The patch http://review.whamcloud.com/10013 (commit
85bd36cc695)
"LU-4840 lfs: Use file lease to implement migration" moves
lli_trunc_sem into vvp layer. It violates lli_trunc_sem/i_mutex
locking order. So i_mutex should be taken after lli_trunc_sem now.
Change-Id: I2ecd52b7ae6eca74c6db7d94b1de1333560bc45d
Seagate-bug-id: MRP-3372
Signed-off-by: Andriy Skulysh <andriy.skulysh@seagate.com>
Reviewed-on: http://review.whamcloud.com/19165
Reviewed-by: Patrick Farrell <paf@cray.com>
Tested-by: Jenkins
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Ann Koehler <amk@cray.com>
Reviewed-by: Ben Evans <bevans@cray.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
struct inode *inode = vvp_object_inode(io->ci_obj);
struct ll_inode_info *lli = ll_i2info(inode);
- inode_lock(inode);
if (cl_io_is_trunc(io)) {
down_write(&lli->lli_trunc_sem);
+ inode_lock(inode);
inode_dio_wait(inode);
+ } else {
+ inode_lock(inode);
}
if (io->u.ci_setattr.sa_valid & TIMES_SET_FLAGS)
* because osc has already notified to destroy osc_extents. */
vvp_do_vmtruncate(inode, io->u.ci_setattr.sa_attr.lvb_size);
inode_dio_write_done(inode);
+ inode_unlock(inode);
up_write(&lli->lli_trunc_sem);
+ } else {
+ inode_unlock(inode);
}
- inode_unlock(inode);
}
static void vvp_io_setattr_fini(const struct lu_env *env,