diff options
Diffstat (limited to 'fs/xfs/xfs_iops.c')
-rw-r--r-- | fs/xfs/xfs_iops.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index a3ed3c811dfa..138fb36ca875 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c | |||
@@ -1031,13 +1031,17 @@ xfs_vn_setattr( | |||
1031 | 1031 | ||
1032 | if (iattr->ia_valid & ATTR_SIZE) { | 1032 | if (iattr->ia_valid & ATTR_SIZE) { |
1033 | struct xfs_inode *ip = XFS_I(d_inode(dentry)); | 1033 | struct xfs_inode *ip = XFS_I(d_inode(dentry)); |
1034 | uint iolock = XFS_IOLOCK_EXCL; | 1034 | uint iolock; |
1035 | |||
1036 | xfs_ilock(ip, XFS_MMAPLOCK_EXCL); | ||
1037 | iolock = XFS_IOLOCK_EXCL | XFS_MMAPLOCK_EXCL; | ||
1035 | 1038 | ||
1036 | error = xfs_break_layouts(d_inode(dentry), &iolock); | 1039 | error = xfs_break_layouts(d_inode(dentry), &iolock); |
1037 | if (error) | 1040 | if (error) { |
1041 | xfs_iunlock(ip, XFS_MMAPLOCK_EXCL); | ||
1038 | return error; | 1042 | return error; |
1043 | } | ||
1039 | 1044 | ||
1040 | xfs_ilock(ip, XFS_MMAPLOCK_EXCL); | ||
1041 | error = xfs_vn_setattr_size(dentry, iattr); | 1045 | error = xfs_vn_setattr_size(dentry, iattr); |
1042 | xfs_iunlock(ip, XFS_MMAPLOCK_EXCL); | 1046 | xfs_iunlock(ip, XFS_MMAPLOCK_EXCL); |
1043 | } else { | 1047 | } else { |