xfs: port to vfs{g,u}id_t and associated helpers
authorChristian Brauner <brauner@kernel.org>
Sun, 18 Sep 2022 20:54:14 +0000 (06:54 +1000)
committerDave Chinner <david@fromorbit.com>
Sun, 18 Sep 2022 20:54:14 +0000 (06:54 +1000)
A while ago we introduced a dedicated vfs{g,u}id_t type in commit
1e5267cd0895 ("mnt_idmapping: add vfs{g,u}id_t"). We already switched
over a good part of the VFS. Ultimately we will remove all legacy
idmapped mount helpers that operate only on k{g,u}id_t in favor of the
new type safe helpers that operate on vfs{g,u}id_t.

Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_inode.c
fs/xfs/xfs_iops.c
fs/xfs/xfs_itable.c

index b3eeeae3afe1a7d35de0708cf34f7a97b98df6c7..c000b74dd203582517081fe253d770b8205493fb 100644 (file)
@@ -835,9 +835,8 @@ xfs_init_new_inode(
         * ID or one of the supplementary group IDs, the S_ISGID bit is cleared
         * (and only if the irix_sgid_inherit compatibility variable is set).
         */
-       if (irix_sgid_inherit &&
-           (inode->i_mode & S_ISGID) &&
-           !in_group_p(i_gid_into_mnt(mnt_userns, inode)))
+       if (irix_sgid_inherit && (inode->i_mode & S_ISGID) &&
+           !vfsgid_in_group_p(i_gid_into_vfsgid(mnt_userns, inode)))
                inode->i_mode &= ~S_ISGID;
 
        ip->i_disk_size = 0;
index 45518b8c613c9a97fd364ccc7fead0fcf91f4771..5d670c85dcc23413c5c26badcd2652f3b7309a12 100644 (file)
@@ -558,6 +558,8 @@ xfs_vn_getattr(
        struct inode            *inode = d_inode(path->dentry);
        struct xfs_inode        *ip = XFS_I(inode);
        struct xfs_mount        *mp = ip->i_mount;
+       vfsuid_t                vfsuid = i_uid_into_vfsuid(mnt_userns, inode);
+       vfsgid_t                vfsgid = i_gid_into_vfsgid(mnt_userns, inode);
 
        trace_xfs_getattr(ip);
 
@@ -568,8 +570,8 @@ xfs_vn_getattr(
        stat->dev = inode->i_sb->s_dev;
        stat->mode = inode->i_mode;
        stat->nlink = inode->i_nlink;
-       stat->uid = i_uid_into_mnt(mnt_userns, inode);
-       stat->gid = i_gid_into_mnt(mnt_userns, inode);
+       stat->uid = vfsuid_into_kuid(vfsuid);
+       stat->gid = vfsgid_into_kgid(vfsgid);
        stat->ino = ip->i_ino;
        stat->atime = inode->i_atime;
        stat->mtime = inode->i_mtime;
index 36312b00b1642e2627f726b70a30d53847b9264d..a1c2bcf65d376fc485294ae296dd56ba31da03f3 100644 (file)
@@ -66,6 +66,8 @@ xfs_bulkstat_one_int(
        struct xfs_bulkstat     *buf = bc->buf;
        xfs_extnum_t            nextents;
        int                     error = -EINVAL;
+       vfsuid_t                vfsuid;
+       vfsgid_t                vfsgid;
 
        if (xfs_internal_inum(mp, ino))
                goto out_advance;
@@ -81,14 +83,16 @@ xfs_bulkstat_one_int(
        ASSERT(ip != NULL);
        ASSERT(ip->i_imap.im_blkno != 0);
        inode = VFS_I(ip);
+       vfsuid = i_uid_into_vfsuid(mnt_userns, inode);
+       vfsgid = i_gid_into_vfsgid(mnt_userns, inode);
 
        /* xfs_iget returns the following without needing
         * further change.
         */
        buf->bs_projectid = ip->i_projid;
        buf->bs_ino = ino;
-       buf->bs_uid = from_kuid(sb_userns, i_uid_into_mnt(mnt_userns, inode));
-       buf->bs_gid = from_kgid(sb_userns, i_gid_into_mnt(mnt_userns, inode));
+       buf->bs_uid = from_kuid(sb_userns, vfsuid_into_kuid(vfsuid));
+       buf->bs_gid = from_kgid(sb_userns, vfsgid_into_kgid(vfsgid));
        buf->bs_size = ip->i_disk_size;
 
        buf->bs_nlink = inode->i_nlink;