diff options
Diffstat (limited to 'fs/xfs/xfs_vnodeops.c')
-rw-r--r-- | fs/xfs/xfs_vnodeops.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index b792a121b1a7..76a1166af822 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -83,6 +83,7 @@ xfs_setattr( | |||
83 | cred_t *credp) | 83 | cred_t *credp) |
84 | { | 84 | { |
85 | xfs_mount_t *mp = ip->i_mount; | 85 | xfs_mount_t *mp = ip->i_mount; |
86 | struct inode *inode = XFS_ITOV(ip); | ||
86 | int mask = iattr->ia_valid; | 87 | int mask = iattr->ia_valid; |
87 | xfs_trans_t *tp; | 88 | xfs_trans_t *tp; |
88 | int code; | 89 | int code; |
@@ -446,6 +447,9 @@ xfs_setattr( | |||
446 | ip->i_d.di_mode &= S_IFMT; | 447 | ip->i_d.di_mode &= S_IFMT; |
447 | ip->i_d.di_mode |= iattr->ia_mode & ~S_IFMT; | 448 | ip->i_d.di_mode |= iattr->ia_mode & ~S_IFMT; |
448 | 449 | ||
450 | inode->i_mode &= S_IFMT; | ||
451 | inode->i_mode |= iattr->ia_mode & ~S_IFMT; | ||
452 | |||
449 | xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE); | 453 | xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE); |
450 | timeflags |= XFS_ICHGTIME_CHG; | 454 | timeflags |= XFS_ICHGTIME_CHG; |
451 | } | 455 | } |
@@ -481,6 +485,7 @@ xfs_setattr( | |||
481 | &ip->i_udquot, udqp); | 485 | &ip->i_udquot, udqp); |
482 | } | 486 | } |
483 | ip->i_d.di_uid = uid; | 487 | ip->i_d.di_uid = uid; |
488 | inode->i_uid = uid; | ||
484 | } | 489 | } |
485 | if (igid != gid) { | 490 | if (igid != gid) { |
486 | if (XFS_IS_GQUOTA_ON(mp)) { | 491 | if (XFS_IS_GQUOTA_ON(mp)) { |
@@ -491,6 +496,7 @@ xfs_setattr( | |||
491 | &ip->i_gdquot, gdqp); | 496 | &ip->i_gdquot, gdqp); |
492 | } | 497 | } |
493 | ip->i_d.di_gid = gid; | 498 | ip->i_d.di_gid = gid; |
499 | inode->i_gid = gid; | ||
494 | } | 500 | } |
495 | 501 | ||
496 | xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE); | 502 | xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE); |
@@ -503,12 +509,14 @@ xfs_setattr( | |||
503 | */ | 509 | */ |
504 | if (mask & (ATTR_ATIME|ATTR_MTIME)) { | 510 | if (mask & (ATTR_ATIME|ATTR_MTIME)) { |
505 | if (mask & ATTR_ATIME) { | 511 | if (mask & ATTR_ATIME) { |
512 | inode->i_atime = iattr->ia_atime; | ||
506 | ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; | 513 | ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; |
507 | ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; | 514 | ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; |
508 | ip->i_update_core = 1; | 515 | ip->i_update_core = 1; |
509 | timeflags &= ~XFS_ICHGTIME_ACC; | 516 | timeflags &= ~XFS_ICHGTIME_ACC; |
510 | } | 517 | } |
511 | if (mask & ATTR_MTIME) { | 518 | if (mask & ATTR_MTIME) { |
519 | inode->i_mtime = iattr->ia_mtime; | ||
512 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; | 520 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; |
513 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; | 521 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; |
514 | timeflags &= ~XFS_ICHGTIME_MOD; | 522 | timeflags &= ~XFS_ICHGTIME_MOD; |
@@ -524,6 +532,7 @@ xfs_setattr( | |||
524 | */ | 532 | */ |
525 | 533 | ||
526 | if ((flags & XFS_ATTR_DMI) && (mask & ATTR_CTIME)) { | 534 | if ((flags & XFS_ATTR_DMI) && (mask & ATTR_CTIME)) { |
535 | inode->i_ctime = iattr->ia_ctime; | ||
527 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; | 536 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; |
528 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; | 537 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; |
529 | ip->i_update_core = 1; | 538 | ip->i_update_core = 1; |