hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/fs/xfs/xfs_iops.c
....@@ -595,37 +595,6 @@
595595 return 0;
596596 }
597597
598
-static void
599
-xfs_setattr_mode(
600
- struct xfs_inode *ip,
601
- struct iattr *iattr)
602
-{
603
- struct inode *inode = VFS_I(ip);
604
- umode_t mode = iattr->ia_mode;
605
-
606
- ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
607
-
608
- inode->i_mode &= S_IFMT;
609
- inode->i_mode |= mode & ~S_IFMT;
610
-}
611
-
612
-void
613
-xfs_setattr_time(
614
- struct xfs_inode *ip,
615
- struct iattr *iattr)
616
-{
617
- struct inode *inode = VFS_I(ip);
618
-
619
- ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
620
-
621
- if (iattr->ia_valid & ATTR_ATIME)
622
- inode->i_atime = iattr->ia_atime;
623
- if (iattr->ia_valid & ATTR_CTIME)
624
- inode->i_ctime = iattr->ia_ctime;
625
- if (iattr->ia_valid & ATTR_MTIME)
626
- inode->i_mtime = iattr->ia_mtime;
627
-}
628
-
629598 static int
630599 xfs_vn_change_ok(
631600 struct dentry *dentry,
....@@ -741,16 +710,6 @@
741710 }
742711
743712 /*
744
- * CAP_FSETID overrides the following restrictions:
745
- *
746
- * The set-user-ID and set-group-ID bits of a file will be
747
- * cleared upon successful return from chown()
748
- */
749
- if ((inode->i_mode & (S_ISUID|S_ISGID)) &&
750
- !capable(CAP_FSETID))
751
- inode->i_mode &= ~(S_ISUID|S_ISGID);
752
-
753
- /*
754713 * Change the ownerships and register quota modifications
755714 * in the transaction.
756715 */
....@@ -761,7 +720,6 @@
761720 olddquot1 = xfs_qm_vop_chown(tp, ip,
762721 &ip->i_udquot, udqp);
763722 }
764
- inode->i_uid = uid;
765723 }
766724 if (!gid_eq(igid, gid)) {
767725 if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_GQUOTA_ON(mp)) {
....@@ -772,15 +730,10 @@
772730 olddquot2 = xfs_qm_vop_chown(tp, ip,
773731 &ip->i_gdquot, gdqp);
774732 }
775
- inode->i_gid = gid;
776733 }
777734 }
778735
779
- if (mask & ATTR_MODE)
780
- xfs_setattr_mode(ip, iattr);
781
- if (mask & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME))
782
- xfs_setattr_time(ip, iattr);
783
-
736
+ setattr_copy(inode, iattr);
784737 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
785738
786739 XFS_STATS_INC(mp, xs_ig_attrchg);
....@@ -1025,11 +978,8 @@
1025978 xfs_inode_clear_eofblocks_tag(ip);
1026979 }
1027980
1028
- if (iattr->ia_valid & ATTR_MODE)
1029
- xfs_setattr_mode(ip, iattr);
1030
- if (iattr->ia_valid & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME))
1031
- xfs_setattr_time(ip, iattr);
1032
-
981
+ ASSERT(!(iattr->ia_valid & (ATTR_UID | ATTR_GID)));
982
+ setattr_copy(inode, iattr);
1033983 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
1034984
1035985 XFS_STATS_INC(mp, xs_ig_attrchg);