|
@@ -705,7 +705,6 @@ xfs_setattr_size(
|
|
{
|
|
{
|
|
struct xfs_mount *mp = ip->i_mount;
|
|
struct xfs_mount *mp = ip->i_mount;
|
|
struct inode *inode = VFS_I(ip);
|
|
struct inode *inode = VFS_I(ip);
|
|
- int mask = iattr->ia_valid;
|
|
|
|
xfs_off_t oldsize, newsize;
|
|
xfs_off_t oldsize, newsize;
|
|
struct xfs_trans *tp;
|
|
struct xfs_trans *tp;
|
|
int error;
|
|
int error;
|
|
@@ -726,8 +725,8 @@ xfs_setattr_size(
|
|
|
|
|
|
ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
|
|
ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
|
|
ASSERT(S_ISREG(ip->i_d.di_mode));
|
|
ASSERT(S_ISREG(ip->i_d.di_mode));
|
|
- ASSERT((mask & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET|
|
|
|
|
- ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0);
|
|
|
|
|
|
+ ASSERT((iattr->ia_valid & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET|
|
|
|
|
+ ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0);
|
|
|
|
|
|
oldsize = inode->i_size;
|
|
oldsize = inode->i_size;
|
|
newsize = iattr->ia_size;
|
|
newsize = iattr->ia_size;
|
|
@@ -736,7 +735,7 @@ xfs_setattr_size(
|
|
* Short circuit the truncate case for zero length files.
|
|
* Short circuit the truncate case for zero length files.
|
|
*/
|
|
*/
|
|
if (newsize == 0 && oldsize == 0 && ip->i_d.di_nextents == 0) {
|
|
if (newsize == 0 && oldsize == 0 && ip->i_d.di_nextents == 0) {
|
|
- if (!(mask & (ATTR_CTIME|ATTR_MTIME)))
|
|
|
|
|
|
+ if (!(iattr->ia_valid & (ATTR_CTIME|ATTR_MTIME)))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -824,10 +823,11 @@ xfs_setattr_size(
|
|
* these flags set. For all other operations the VFS set these flags
|
|
* these flags set. For all other operations the VFS set these flags
|
|
* explicitly if it wants a timestamp update.
|
|
* explicitly if it wants a timestamp update.
|
|
*/
|
|
*/
|
|
- if (newsize != oldsize && (!(mask & (ATTR_CTIME | ATTR_MTIME)))) {
|
|
|
|
|
|
+ if (newsize != oldsize &&
|
|
|
|
+ !(iattr->ia_valid & (ATTR_CTIME | ATTR_MTIME))) {
|
|
iattr->ia_ctime = iattr->ia_mtime =
|
|
iattr->ia_ctime = iattr->ia_mtime =
|
|
current_fs_time(inode->i_sb);
|
|
current_fs_time(inode->i_sb);
|
|
- mask |= ATTR_CTIME | ATTR_MTIME;
|
|
|
|
|
|
+ iattr->ia_valid |= ATTR_CTIME | ATTR_MTIME;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -863,9 +863,9 @@ xfs_setattr_size(
|
|
xfs_inode_clear_eofblocks_tag(ip);
|
|
xfs_inode_clear_eofblocks_tag(ip);
|
|
}
|
|
}
|
|
|
|
|
|
- if (mask & ATTR_MODE)
|
|
|
|
|
|
+ if (iattr->ia_valid & ATTR_MODE)
|
|
xfs_setattr_mode(ip, iattr);
|
|
xfs_setattr_mode(ip, iattr);
|
|
- if (mask & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME))
|
|
|
|
|
|
+ if (iattr->ia_valid & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME))
|
|
xfs_setattr_time(ip, iattr);
|
|
xfs_setattr_time(ip, iattr);
|
|
|
|
|
|
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|
|
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|