diff options
-rw-r--r-- | fs/xfs/xfs_iops.c | 66 |
1 files changed, 30 insertions, 36 deletions
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index e7f4e4f4eab9..5762282895a5 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c | |||
@@ -474,6 +474,32 @@ xfs_setattr_mode( | |||
474 | inode->i_mode |= mode & ~S_IFMT; | 474 | inode->i_mode |= mode & ~S_IFMT; |
475 | } | 475 | } |
476 | 476 | ||
477 | static void | ||
478 | xfs_setattr_time( | ||
479 | struct xfs_inode *ip, | ||
480 | struct iattr *iattr) | ||
481 | { | ||
482 | struct inode *inode = VFS_I(ip); | ||
483 | |||
484 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); | ||
485 | |||
486 | if (iattr->ia_valid & ATTR_ATIME) { | ||
487 | inode->i_atime = iattr->ia_atime; | ||
488 | ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; | ||
489 | ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; | ||
490 | } | ||
491 | if (iattr->ia_valid & ATTR_CTIME) { | ||
492 | inode->i_ctime = iattr->ia_ctime; | ||
493 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; | ||
494 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; | ||
495 | } | ||
496 | if (iattr->ia_valid & ATTR_MTIME) { | ||
497 | inode->i_mtime = iattr->ia_mtime; | ||
498 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; | ||
499 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; | ||
500 | } | ||
501 | } | ||
502 | |||
477 | int | 503 | int |
478 | xfs_setattr_nonsize( | 504 | xfs_setattr_nonsize( |
479 | struct xfs_inode *ip, | 505 | struct xfs_inode *ip, |
@@ -627,30 +653,10 @@ xfs_setattr_nonsize( | |||
627 | } | 653 | } |
628 | } | 654 | } |
629 | 655 | ||
630 | /* | ||
631 | * Change file access modes. | ||
632 | */ | ||
633 | if (mask & ATTR_MODE) | 656 | if (mask & ATTR_MODE) |
634 | xfs_setattr_mode(ip, iattr); | 657 | xfs_setattr_mode(ip, iattr); |
635 | 658 | if (mask & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME)) | |
636 | /* | 659 | xfs_setattr_time(ip, iattr); |
637 | * Change file access or modified times. | ||
638 | */ | ||
639 | if (mask & ATTR_ATIME) { | ||
640 | inode->i_atime = iattr->ia_atime; | ||
641 | ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; | ||
642 | ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; | ||
643 | } | ||
644 | if (mask & ATTR_CTIME) { | ||
645 | inode->i_ctime = iattr->ia_ctime; | ||
646 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; | ||
647 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; | ||
648 | } | ||
649 | if (mask & ATTR_MTIME) { | ||
650 | inode->i_mtime = iattr->ia_mtime; | ||
651 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; | ||
652 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; | ||
653 | } | ||
654 | 660 | ||
655 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); | 661 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |
656 | 662 | ||
@@ -865,22 +871,10 @@ xfs_setattr_size( | |||
865 | xfs_inode_clear_eofblocks_tag(ip); | 871 | xfs_inode_clear_eofblocks_tag(ip); |
866 | } | 872 | } |
867 | 873 | ||
868 | /* | ||
869 | * Change file access modes. | ||
870 | */ | ||
871 | if (mask & ATTR_MODE) | 874 | if (mask & ATTR_MODE) |
872 | xfs_setattr_mode(ip, iattr); | 875 | xfs_setattr_mode(ip, iattr); |
873 | 876 | if (mask & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME)) | |
874 | if (mask & ATTR_CTIME) { | 877 | xfs_setattr_time(ip, iattr); |
875 | inode->i_ctime = iattr->ia_ctime; | ||
876 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; | ||
877 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; | ||
878 | } | ||
879 | if (mask & ATTR_MTIME) { | ||
880 | inode->i_mtime = iattr->ia_mtime; | ||
881 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; | ||
882 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; | ||
883 | } | ||
884 | 878 | ||
885 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); | 879 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |
886 | 880 | ||