|
@@ -700,7 +700,7 @@ xfs_setattr_size(
|
|
xfs_off_t oldsize, newsize;
|
|
xfs_off_t oldsize, newsize;
|
|
struct xfs_trans *tp;
|
|
struct xfs_trans *tp;
|
|
int error;
|
|
int error;
|
|
- uint lock_flags;
|
|
|
|
|
|
+ uint lock_flags = 0;
|
|
uint commit_flags = 0;
|
|
uint commit_flags = 0;
|
|
|
|
|
|
trace_xfs_setattr(ip);
|
|
trace_xfs_setattr(ip);
|
|
@@ -720,10 +720,10 @@ xfs_setattr_size(
|
|
ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID|
|
|
ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID|
|
|
ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0);
|
|
ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0);
|
|
|
|
|
|
- lock_flags = XFS_ILOCK_EXCL;
|
|
|
|
- if (!(flags & XFS_ATTR_NOLOCK))
|
|
|
|
|
|
+ if (!(flags & XFS_ATTR_NOLOCK)) {
|
|
lock_flags |= XFS_IOLOCK_EXCL;
|
|
lock_flags |= XFS_IOLOCK_EXCL;
|
|
- xfs_ilock(ip, lock_flags);
|
|
|
|
|
|
+ xfs_ilock(ip, lock_flags);
|
|
|
|
+ }
|
|
|
|
|
|
oldsize = inode->i_size;
|
|
oldsize = inode->i_size;
|
|
newsize = iattr->ia_size;
|
|
newsize = iattr->ia_size;
|
|
@@ -746,7 +746,7 @@ xfs_setattr_size(
|
|
/*
|
|
/*
|
|
* Make sure that the dquots are attached to the inode.
|
|
* Make sure that the dquots are attached to the inode.
|
|
*/
|
|
*/
|
|
- error = xfs_qm_dqattach_locked(ip, 0);
|
|
|
|
|
|
+ error = xfs_qm_dqattach(ip, 0);
|
|
if (error)
|
|
if (error)
|
|
goto out_unlock;
|
|
goto out_unlock;
|
|
|
|
|
|
@@ -764,12 +764,12 @@ xfs_setattr_size(
|
|
* before the inode is joined to the transaction to modify
|
|
* before the inode is joined to the transaction to modify
|
|
* i_size.
|
|
* i_size.
|
|
*/
|
|
*/
|
|
|
|
+ xfs_ilock(ip, XFS_ILOCK_EXCL);
|
|
error = xfs_zero_eof(ip, newsize, oldsize);
|
|
error = xfs_zero_eof(ip, newsize, oldsize);
|
|
|
|
+ xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
|
if (error)
|
|
if (error)
|
|
goto out_unlock;
|
|
goto out_unlock;
|
|
}
|
|
}
|
|
- xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
|
|
|
- lock_flags &= ~XFS_ILOCK_EXCL;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
* We are going to log the inode size change in this transaction so
|
|
* We are going to log the inode size change in this transaction so
|