fs: port ->getattr() to pass mnt_idmap
authorChristian Brauner <brauner@kernel.org>
Fri, 13 Jan 2023 11:49:12 +0000 (12:49 +0100)
committerChristian Brauner (Microsoft) <brauner@kernel.org>
Thu, 19 Jan 2023 08:24:25 +0000 (09:24 +0100)
Convert to struct mnt_idmap.

Last cycle we merged the necessary infrastructure in
256c8aed2b42 ("fs: introduce dedicated idmap type for mounts").
This is just the conversion to struct mnt_idmap.

Currently we still pass around the plain namespace that was attached to a
mount. This is in general pretty convenient but it makes it easy to
conflate namespaces that are relevant on the filesystem with namespaces
that are relevent on the mount level. Especially for non-vfs developers
without detailed knowledge in this area this can be a potential source for
bugs.

Once the conversion to struct mnt_idmap is done all helpers down to the
really low-level helpers will take a struct mnt_idmap argument instead of
two namespace arguments. This way it becomes impossible to conflate the two
eliminating the possibility of any bugs. All of the vfs and all filesystems
only operate on struct mnt_idmap.

Acked-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
72 files changed:
Documentation/filesystems/locking.rst
Documentation/filesystems/vfs.rst
fs/9p/vfs_inode.c
fs/9p/vfs_inode_dotl.c
fs/afs/inode.c
fs/afs/internal.h
fs/bad_inode.c
fs/btrfs/inode.c
fs/ceph/inode.c
fs/ceph/super.h
fs/cifs/cifsfs.h
fs/cifs/inode.c
fs/coda/coda_linux.h
fs/coda/inode.c
fs/ecryptfs/inode.c
fs/erofs/inode.c
fs/erofs/internal.h
fs/exfat/exfat_fs.h
fs/exfat/file.c
fs/ext2/ext2.h
fs/ext2/inode.c
fs/ext4/ext4.h
fs/ext4/inode.c
fs/ext4/symlink.c
fs/f2fs/f2fs.h
fs/f2fs/file.c
fs/f2fs/namei.c
fs/fat/fat.h
fs/fat/file.c
fs/fuse/dir.c
fs/gfs2/inode.c
fs/hfsplus/hfsplus_fs.h
fs/hfsplus/inode.c
fs/kernfs/inode.c
fs/kernfs/kernfs-internal.h
fs/ksmbd/smb2pdu.c
fs/ksmbd/smb_common.c
fs/ksmbd/vfs.c
fs/ksmbd/vfs.h
fs/libfs.c
fs/minix/inode.c
fs/minix/minix.h
fs/nfs/inode.c
fs/nfs/namespace.c
fs/ntfs3/file.c
fs/ntfs3/ntfs_fs.h
fs/ocfs2/file.c
fs/ocfs2/file.h
fs/orangefs/inode.c
fs/orangefs/orangefs-kernel.h
fs/overlayfs/inode.c
fs/overlayfs/overlayfs.h
fs/proc/base.c
fs/proc/fd.c
fs/proc/generic.c
fs/proc/internal.h
fs/proc/proc_net.c
fs/proc/proc_sysctl.c
fs/proc/root.c
fs/stat.c
fs/sysv/itree.c
fs/sysv/sysv.h
fs/ubifs/dir.c
fs/ubifs/file.c
fs/ubifs/ubifs.h
fs/udf/symlink.c
fs/vboxsf/utils.c
fs/vboxsf/vfsmod.h
fs/xfs/xfs_iops.c
include/linux/fs.h
include/linux/nfs_fs.h
mm/shmem.c

index 04ad02dcd269b56177b60141a814eafa73588ff9..556a23af1edf69ed4a3b8c7056466303a58fb458 100644 (file)
@@ -72,7 +72,7 @@ prototypes::
        int (*permission) (struct inode *, int, unsigned int);
        struct posix_acl * (*get_inode_acl)(struct inode *, int, bool);
        int (*setattr) (struct mnt_idmap *, struct dentry *, struct iattr *);
-       int (*getattr) (const struct path *, struct kstat *, u32, unsigned int);
+       int (*getattr) (struct mnt_idmap *, const struct path *, struct kstat *, u32, unsigned int);
        ssize_t (*listxattr) (struct dentry *, char *, size_t);
        int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
        void (*update_time)(struct inode *, struct timespec *, int);
index 894e2a5c3603d24c2796c3e5806bb346c3dbaa56..09184d98fc8cc73328aa0d352fa98119ac3b9850 100644 (file)
@@ -437,7 +437,7 @@ As of kernel 2.6.22, the following members are defined:
                int (*permission) (struct user_namespace *, struct inode *, int);
                struct posix_acl * (*get_inode_acl)(struct inode *, int, bool);
                int (*setattr) (struct mnt_idmap *, struct dentry *, struct iattr *);
-               int (*getattr) (struct user_namespace *, const struct path *, struct kstat *, u32, unsigned int);
+               int (*getattr) (struct mnt_idmap *, const struct path *, struct kstat *, u32, unsigned int);
                ssize_t (*listxattr) (struct dentry *, char *, size_t);
                void (*update_time)(struct inode *, struct timespec *, int);
                int (*atomic_open)(struct inode *, struct dentry *, struct file *,
index d8cd3f17bbf319af16870e802b1602de1c13eec1..ee47b2bb3712e3fbbe254c8df73b0f5d9c394ec6 100644 (file)
@@ -1018,7 +1018,7 @@ error:
 
 /**
  * v9fs_vfs_getattr - retrieve file metadata
- * @mnt_userns: The user namespace of the mount
+ * @idmap: idmap of the mount
  * @path: Object to query
  * @stat: metadata structure to populate
  * @request_mask: Mask of STATX_xxx flags indicating the caller's interests
@@ -1027,7 +1027,7 @@ error:
  */
 
 static int
-v9fs_vfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+v9fs_vfs_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        struct dentry *dentry = path->dentry;
@@ -1038,7 +1038,7 @@ v9fs_vfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
        p9_debug(P9_DEBUG_VFS, "dentry: %p\n", dentry);
        v9ses = v9fs_dentry2v9ses(dentry);
        if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) {
-               generic_fillattr(&init_user_ns, d_inode(dentry), stat);
+               generic_fillattr(&nop_mnt_idmap, d_inode(dentry), stat);
                return 0;
        }
        fid = v9fs_fid_lookup(dentry);
@@ -1051,7 +1051,7 @@ v9fs_vfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
                return PTR_ERR(st);
 
        v9fs_stat2inode(st, d_inode(dentry), dentry->d_sb, 0);
-       generic_fillattr(&init_user_ns, d_inode(dentry), stat);
+       generic_fillattr(&nop_mnt_idmap, d_inode(dentry), stat);
 
        p9stat_free(st);
        kfree(st);
index dfe6b4017bd00b63c8b98032a9b04d35014ddb52..08ec5e7b628d978c0ad31ef81f076d4d0e3d165a 100644 (file)
@@ -450,7 +450,7 @@ error:
 }
 
 static int
-v9fs_vfs_getattr_dotl(struct user_namespace *mnt_userns,
+v9fs_vfs_getattr_dotl(struct mnt_idmap *idmap,
                      const struct path *path, struct kstat *stat,
                      u32 request_mask, unsigned int flags)
 {
@@ -462,7 +462,7 @@ v9fs_vfs_getattr_dotl(struct user_namespace *mnt_userns,
        p9_debug(P9_DEBUG_VFS, "dentry: %p\n", dentry);
        v9ses = v9fs_dentry2v9ses(dentry);
        if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) {
-               generic_fillattr(&init_user_ns, d_inode(dentry), stat);
+               generic_fillattr(&nop_mnt_idmap, d_inode(dentry), stat);
                return 0;
        }
        fid = v9fs_fid_lookup(dentry);
@@ -479,7 +479,7 @@ v9fs_vfs_getattr_dotl(struct user_namespace *mnt_userns,
                return PTR_ERR(st);
 
        v9fs_stat2inode_dotl(st, d_inode(dentry), 0);
-       generic_fillattr(&init_user_ns, d_inode(dentry), stat);
+       generic_fillattr(&nop_mnt_idmap, d_inode(dentry), stat);
        /* Change block size to what the server returned */
        stat->blksize = st->st_blksize;
 
index f001cf1750ecf4a27410eb92a6a61c2d621045de..0167e96e51986d176a5c05a3ac741d1607027277 100644 (file)
@@ -737,7 +737,7 @@ error_unlock:
 /*
  * read the attributes of an inode
  */
-int afs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int afs_getattr(struct mnt_idmap *idmap, const struct path *path,
                struct kstat *stat, u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
@@ -761,7 +761,7 @@ int afs_getattr(struct user_namespace *mnt_userns, const struct path *path,
 
        do {
                read_seqbegin_or_lock(&vnode->cb_lock, &seq);
-               generic_fillattr(&init_user_ns, inode, stat);
+               generic_fillattr(&nop_mnt_idmap, inode, stat);
                if (test_bit(AFS_VNODE_SILLY_DELETED, &vnode->flags) &&
                    stat->nlink > 0)
                        stat->nlink -= 1;
index e2a23efc91b66431bb4b826c4004d4e770b55f97..d5e7cd4655936e22969fb05f8b6c39240a7baecd 100644 (file)
@@ -1170,7 +1170,7 @@ extern struct inode *afs_iget(struct afs_operation *, struct afs_vnode_param *);
 extern struct inode *afs_root_iget(struct super_block *, struct key *);
 extern bool afs_check_validity(struct afs_vnode *);
 extern int afs_validate(struct afs_vnode *, struct key *);
-extern int afs_getattr(struct user_namespace *mnt_userns, const struct path *,
+extern int afs_getattr(struct mnt_idmap *idmap, const struct path *,
                       struct kstat *, u32, unsigned int);
 extern int afs_setattr(struct mnt_idmap *idmap, struct dentry *, struct iattr *);
 extern void afs_evict_inode(struct inode *);
index 9cb95ff99047d5ac63c4612a535b2913d6b9e06e..63006ca5b581839eb36077e05b537a6f1fcb88f5 100644 (file)
@@ -95,7 +95,7 @@ static int bad_inode_permission(struct user_namespace *mnt_userns,
        return -EIO;
 }
 
-static int bad_inode_getattr(struct user_namespace *mnt_userns,
+static int bad_inode_getattr(struct mnt_idmap *idmap,
                             const struct path *path, struct kstat *stat,
                             u32 request_mask, unsigned int query_flags)
 {
index 36a897e5d8deafe8bd8d4d61f67efb5f87945951..8ba37e4c36fe4d753bb695f363eda037cbd10d26 100644 (file)
@@ -9005,7 +9005,7 @@ fail:
        return -ENOMEM;
 }
 
-static int btrfs_getattr(struct user_namespace *mnt_userns,
+static int btrfs_getattr(struct mnt_idmap *idmap,
                         const struct path *path, struct kstat *stat,
                         u32 request_mask, unsigned int flags)
 {
@@ -9035,7 +9035,7 @@ static int btrfs_getattr(struct user_namespace *mnt_userns,
                                  STATX_ATTR_IMMUTABLE |
                                  STATX_ATTR_NODUMP);
 
-       generic_fillattr(mnt_userns, inode, stat);
+       generic_fillattr(idmap, inode, stat);
        stat->dev = BTRFS_I(inode)->root->anon_dev;
 
        spin_lock(&BTRFS_I(inode)->lock);
index 358aadd4329ab963b509076071a321e4de352ed5..fcc84cc1d8f185c2afd1a05abcd62f8518d14238 100644 (file)
@@ -2445,7 +2445,7 @@ static int statx_to_caps(u32 want, umode_t mode)
  * Get all the attributes. If we have sufficient caps for the requested attrs,
  * then we can avoid talking to the MDS at all.
  */
-int ceph_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ceph_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        struct inode *inode = d_inode(path->dentry);
@@ -2466,7 +2466,7 @@ int ceph_getattr(struct user_namespace *mnt_userns, const struct path *path,
                        return err;
        }
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        stat->ino = ceph_present_inode(inode);
 
        /*
index a023a74b665094d87f563953cb26773d274f8006..063dad749a079365e687d771cb6fa7a5510abf7d 100644 (file)
@@ -1045,7 +1045,7 @@ extern int ceph_permission(struct user_namespace *mnt_userns,
 extern int __ceph_setattr(struct inode *inode, struct iattr *attr);
 extern int ceph_setattr(struct mnt_idmap *idmap,
                        struct dentry *dentry, struct iattr *attr);
-extern int ceph_getattr(struct user_namespace *mnt_userns,
+extern int ceph_getattr(struct mnt_idmap *idmap,
                        const struct path *path, struct kstat *stat,
                        u32 request_mask, unsigned int flags);
 void ceph_inode_shutdown(struct inode *inode);
index f93c295649df7d6be062f391962dc8eec50b4161..6c42137f9499252ec1b038dde7956c8b80eab344 100644 (file)
@@ -72,7 +72,7 @@ extern int cifs_revalidate_dentry(struct dentry *);
 extern int cifs_invalidate_mapping(struct inode *inode);
 extern int cifs_revalidate_mapping(struct inode *inode);
 extern int cifs_zap_mapping(struct inode *inode);
-extern int cifs_getattr(struct user_namespace *, const struct path *,
+extern int cifs_getattr(struct mnt_idmap *, const struct path *,
                        struct kstat *, u32, unsigned int);
 extern int cifs_setattr(struct mnt_idmap *, struct dentry *,
                        struct iattr *);
index 653f05ce287a12e25ecfbca751e7ba5c6096acc2..aad6a40c9721ea7ae2f16921b32939d5b9079378 100644 (file)
@@ -2496,7 +2496,7 @@ int cifs_revalidate_dentry(struct dentry *dentry)
        return cifs_revalidate_mapping(inode);
 }
 
-int cifs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int cifs_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        struct dentry *dentry = path->dentry;
@@ -2537,7 +2537,7 @@ int cifs_getattr(struct user_namespace *mnt_userns, const struct path *path,
                        return rc;
        }
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        stat->blksize = cifs_sb->ctx->bsize;
        stat->ino = CIFS_I(inode)->uniqueid;
 
index b762525eb5a2c94e8d24b2583a4acd94c9d17357..cc69a0f15b417d0f5558436e4005c6559361bb6e 100644 (file)
@@ -49,7 +49,7 @@ int coda_release(struct inode *i, struct file *f);
 int coda_permission(struct user_namespace *mnt_userns, struct inode *inode,
                    int mask);
 int coda_revalidate_inode(struct inode *);
-int coda_getattr(struct user_namespace *, const struct path *, struct kstat *,
+int coda_getattr(struct mnt_idmap *, const struct path *, struct kstat *,
                 u32, unsigned int);
 int coda_setattr(struct mnt_idmap *, struct dentry *, struct iattr *);
 
index 8e5a431f7eb5f6b9ab3cecd38321399df9c59892..d661e6cf17acdbe6a7b9a86658e62e038fc19876 100644 (file)
@@ -251,12 +251,12 @@ static void coda_evict_inode(struct inode *inode)
        coda_cache_clear_inode(inode);
 }
 
-int coda_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int coda_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        int err = coda_revalidate_inode(d_inode(path->dentry));
        if (!err)
-               generic_fillattr(&init_user_ns, d_inode(path->dentry), stat);
+               generic_fillattr(&nop_mnt_idmap, d_inode(path->dentry), stat);
        return err;
 }
 
index 011b03e5c9df41738403bef8b6e76b1f2d4b4efa..7854b71c769f357a041f2771f6190f455f5d076d 100644 (file)
@@ -972,7 +972,7 @@ out:
        return rc;
 }
 
-static int ecryptfs_getattr_link(struct user_namespace *mnt_userns,
+static int ecryptfs_getattr_link(struct mnt_idmap *idmap,
                                 const struct path *path, struct kstat *stat,
                                 u32 request_mask, unsigned int flags)
 {
@@ -982,7 +982,7 @@ static int ecryptfs_getattr_link(struct user_namespace *mnt_userns,
 
        mount_crypt_stat = &ecryptfs_superblock_to_private(
                                                dentry->d_sb)->mount_crypt_stat;
-       generic_fillattr(&init_user_ns, d_inode(dentry), stat);
+       generic_fillattr(&nop_mnt_idmap, d_inode(dentry), stat);
        if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) {
                char *target;
                size_t targetsiz;
@@ -998,7 +998,7 @@ static int ecryptfs_getattr_link(struct user_namespace *mnt_userns,
        return rc;
 }
 
-static int ecryptfs_getattr(struct user_namespace *mnt_userns,
+static int ecryptfs_getattr(struct mnt_idmap *idmap,
                            const struct path *path, struct kstat *stat,
                            u32 request_mask, unsigned int flags)
 {
@@ -1011,7 +1011,7 @@ static int ecryptfs_getattr(struct user_namespace *mnt_userns,
        if (!rc) {
                fsstack_copy_attr_all(d_inode(dentry),
                                      ecryptfs_inode_to_lower(d_inode(dentry)));
-               generic_fillattr(&init_user_ns, d_inode(dentry), stat);
+               generic_fillattr(&nop_mnt_idmap, d_inode(dentry), stat);
                stat->blocks = lower_stat.blocks;
        }
        return rc;
index d3b8736fa12486f6a3cd71b2851e49a6213162a7..a194e8ee5861c10e7e3dd112414f0ac2e9e782b0 100644 (file)
@@ -353,7 +353,7 @@ struct inode *erofs_iget(struct super_block *sb, erofs_nid_t nid)
        return inode;
 }
 
-int erofs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int erofs_getattr(struct mnt_idmap *idmap, const struct path *path,
                  struct kstat *stat, u32 request_mask,
                  unsigned int query_flags)
 {
@@ -366,7 +366,7 @@ int erofs_getattr(struct user_namespace *mnt_userns, const struct path *path,
        stat->attributes_mask |= (STATX_ATTR_COMPRESSED |
                                  STATX_ATTR_IMMUTABLE);
 
-       generic_fillattr(mnt_userns, inode, stat);
+       generic_fillattr(idmap, inode, stat);
        return 0;
 }
 
index bb8501c0ff5b5443552720b3da6a473b738235b1..e05ae61069e8166dc2369ec1d41dce2b44210c9b 100644 (file)
@@ -494,7 +494,7 @@ extern const struct inode_operations erofs_symlink_iops;
 extern const struct inode_operations erofs_fast_symlink_iops;
 
 struct inode *erofs_iget(struct super_block *sb, erofs_nid_t nid);
-int erofs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int erofs_getattr(struct mnt_idmap *idmap, const struct path *path,
                  struct kstat *stat, u32 request_mask,
                  unsigned int query_flags);
 
index 7fd693a668c796eec2f58cd59a5fbc0d63674121..1bf16abe3c8431d1329b14cbe4727488e0c6de5f 100644 (file)
@@ -452,7 +452,7 @@ int __exfat_truncate(struct inode *inode);
 void exfat_truncate(struct inode *inode);
 int exfat_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                  struct iattr *attr);
-int exfat_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int exfat_getattr(struct mnt_idmap *idmap, const struct path *path,
                  struct kstat *stat, unsigned int request_mask,
                  unsigned int query_flags);
 int exfat_file_fsync(struct file *file, loff_t start, loff_t end, int datasync);
index da61838f8842b22bb6a1de2a5e4a16ebb1d31e2e..1fdb0a64b91db9350b9e8b73d1536601c4a3d775 100644 (file)
@@ -226,14 +226,14 @@ write_size:
        mutex_unlock(&sbi->s_lock);
 }
 
-int exfat_getattr(struct user_namespace *mnt_uerns, const struct path *path,
+int exfat_getattr(struct mnt_idmap *idmap, const struct path *path,
                  struct kstat *stat, unsigned int request_mask,
                  unsigned int query_flags)
 {
        struct inode *inode = d_backing_inode(path->dentry);
        struct exfat_inode_info *ei = EXFAT_I(inode);
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        exfat_truncate_atime(&stat->atime);
        stat->result_mask |= STATX_BTIME;
        stat->btime.tv_sec = ei->i_crtime.tv_sec;
index 4a3e95406ccef9681711ab809d55b8297ad41e35..9ca0fda2892895297c8d8eadcbc2c380d80b5ed7 100644 (file)
@@ -754,7 +754,7 @@ extern int ext2_write_inode (struct inode *, struct writeback_control *);
 extern void ext2_evict_inode(struct inode *);
 extern int ext2_get_block(struct inode *, sector_t, struct buffer_head *, int);
 extern int ext2_setattr (struct mnt_idmap *, struct dentry *, struct iattr *);
-extern int ext2_getattr (struct user_namespace *, const struct path *,
+extern int ext2_getattr (struct mnt_idmap *, const struct path *,
                         struct kstat *, u32, unsigned int);
 extern void ext2_set_inode_flags(struct inode *inode);
 extern int ext2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
index 792b974a5beb5c4114cff57b6520bc4c07f7bbee..bbc9941dbb432814db8de8c3d94906799369f181 100644 (file)
@@ -1592,7 +1592,7 @@ int ext2_write_inode(struct inode *inode, struct writeback_control *wbc)
        return __ext2_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
 }
 
-int ext2_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ext2_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
@@ -1614,7 +1614,7 @@ int ext2_getattr(struct user_namespace *mnt_userns, const struct path *path,
                        STATX_ATTR_IMMUTABLE |
                        STATX_ATTR_NODUMP);
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        return 0;
 }
 
index 056704d4ac9ca170f88d876d43a854d521d43b48..b5e325434c5a55fabfe3404baba1dc64fadf5188 100644 (file)
@@ -2979,11 +2979,11 @@ extern int  ext4_write_inode(struct inode *, struct writeback_control *);
 extern int  ext4_setattr(struct mnt_idmap *, struct dentry *,
                         struct iattr *);
 extern u32  ext4_dio_alignment(struct inode *inode);
-extern int  ext4_getattr(struct user_namespace *, const struct path *,
+extern int  ext4_getattr(struct mnt_idmap *, const struct path *,
                         struct kstat *, u32, unsigned int);
 extern void ext4_evict_inode(struct inode *);
 extern void ext4_clear_inode(struct inode *);
-extern int  ext4_file_getattr(struct user_namespace *, const struct path *,
+extern int  ext4_file_getattr(struct mnt_idmap *, const struct path *,
                              struct kstat *, u32, unsigned int);
 extern int  ext4_sync_inode(handle_t *, struct inode *);
 extern void ext4_dirty_inode(struct inode *, int);
index 18fed4f5108dc3c5997c15f64a62370b95372192..d60eab65319d9342c2f561dc2f62bd89f7d17f57 100644 (file)
@@ -5669,7 +5669,7 @@ u32 ext4_dio_alignment(struct inode *inode)
        return 1; /* use the iomap defaults */
 }
 
-int ext4_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ext4_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
@@ -5726,18 +5726,18 @@ int ext4_getattr(struct user_namespace *mnt_userns, const struct path *path,
                                  STATX_ATTR_NODUMP |
                                  STATX_ATTR_VERITY);
 
-       generic_fillattr(mnt_userns, inode, stat);
+       generic_fillattr(idmap, inode, stat);
        return 0;
 }
 
-int ext4_file_getattr(struct user_namespace *mnt_userns,
+int ext4_file_getattr(struct mnt_idmap *idmap,
                      const struct path *path, struct kstat *stat,
                      u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
        u64 delalloc_blocks;
 
-       ext4_getattr(mnt_userns, path, stat, request_mask, query_flags);
+       ext4_getattr(idmap, path, stat, request_mask, query_flags);
 
        /*
         * If there is inline data in the inode, the inode will normally not
index 3d3ed3c38f5644a0e872b1474cf90bf2afd70219..75bf1f88843c4ce96c285423228a70ff77c08517 100644 (file)
@@ -55,12 +55,12 @@ static const char *ext4_encrypted_get_link(struct dentry *dentry,
        return paddr;
 }
 
-static int ext4_encrypted_symlink_getattr(struct user_namespace *mnt_userns,
+static int ext4_encrypted_symlink_getattr(struct mnt_idmap *idmap,
                                          const struct path *path,
                                          struct kstat *stat, u32 request_mask,
                                          unsigned int query_flags)
 {
-       ext4_getattr(mnt_userns, path, stat, request_mask, query_flags);
+       ext4_getattr(idmap, path, stat, request_mask, query_flags);
 
        return fscrypt_symlink_getattr(path, stat);
 }
index 55bd92d431e55093e73421050ead422aad3b7ed6..d6b13b03d75fb81f5e70e1806083c4070c2eca0d 100644 (file)
@@ -3469,7 +3469,7 @@ void f2fs_truncate_data_blocks(struct dnode_of_data *dn);
 int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock);
 int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock);
 int f2fs_truncate(struct inode *inode);
-int f2fs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int f2fs_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int flags);
 int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                 struct iattr *attr);
index 6ce71c9c8d46b488074b7ba60c267bcf927b3d66..267507ff16ccca373d60f9dfd59c4e5e524d4f80 100644 (file)
@@ -837,7 +837,7 @@ static bool f2fs_force_buffered_io(struct inode *inode, int rw)
        return false;
 }
 
-int f2fs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int f2fs_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
@@ -892,7 +892,7 @@ int f2fs_getattr(struct user_namespace *mnt_userns, const struct path *path,
                                  STATX_ATTR_NODUMP |
                                  STATX_ATTR_VERITY);
 
-       generic_fillattr(mnt_userns, inode, stat);
+       generic_fillattr(idmap, inode, stat);
 
        /* we need to show initial sectors used for inline_data/dentries */
        if ((S_ISREG(inode->i_mode) && f2fs_has_inline_data(inode)) ||
index 30baa0e2a21c950edc0b8396d3b82911c21103c0..e634529ab6adf0ad60672aaa0a4959192384e417 100644 (file)
@@ -1342,12 +1342,12 @@ static const char *f2fs_encrypted_get_link(struct dentry *dentry,
        return target;
 }
 
-static int f2fs_encrypted_symlink_getattr(struct user_namespace *mnt_userns,
+static int f2fs_encrypted_symlink_getattr(struct mnt_idmap *idmap,
                                          const struct path *path,
                                          struct kstat *stat, u32 request_mask,
                                          unsigned int query_flags)
 {
-       f2fs_getattr(mnt_userns, path, stat, request_mask, query_flags);
+       f2fs_getattr(idmap, path, stat, request_mask, query_flags);
 
        return fscrypt_symlink_getattr(path, stat);
 }
index e38bd3a49f4612d07622de2c2fbd90e6e74d26ff..e3b690b48e3eb1ea7ffc5b36e6f00600da0aad66 100644 (file)
@@ -401,7 +401,7 @@ extern const struct inode_operations fat_file_inode_operations;
 extern int fat_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                       struct iattr *attr);
 extern void fat_truncate_blocks(struct inode *inode, loff_t offset);
-extern int fat_getattr(struct user_namespace *mnt_userns,
+extern int fat_getattr(struct mnt_idmap *idmap,
                       const struct path *path, struct kstat *stat,
                       u32 request_mask, unsigned int flags);
 extern int fat_file_fsync(struct file *file, loff_t start, loff_t end,
index b762109a964f57358b8152b5f479b75ddea6ca7f..32c04fdf72758bedb2f9a464a5252f2977190c3e 100644 (file)
@@ -395,13 +395,13 @@ void fat_truncate_blocks(struct inode *inode, loff_t offset)
        fat_flush_inodes(inode->i_sb, inode, NULL);
 }
 
-int fat_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int fat_getattr(struct mnt_idmap *idmap, const struct path *path,
                struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        struct inode *inode = d_inode(path->dentry);
        struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
 
-       generic_fillattr(mnt_userns, inode, stat);
+       generic_fillattr(idmap, inode, stat);
        stat->blksize = sbi->cluster_size;
 
        if (sbi->options.nfs == FAT_NFS_NOSTALE_RO) {
index 1633f7e9fc543ebd842b0906f10710773aa7a2b7..b1d89ba2d4c725b649d61b064a74f33ded18ede7 100644 (file)
@@ -1156,7 +1156,7 @@ static int fuse_update_get_attr(struct inode *inode, struct file *file,
                forget_all_cached_acls(inode);
                err = fuse_do_getattr(inode, stat, file);
        } else if (stat) {
-               generic_fillattr(&init_user_ns, inode, stat);
+               generic_fillattr(&nop_mnt_idmap, inode, stat);
                stat->mode = fi->orig_i_mode;
                stat->ino = fi->orig_ino;
        }
@@ -1900,7 +1900,7 @@ static int fuse_setattr(struct mnt_idmap *idmap, struct dentry *entry,
        return ret;
 }
 
-static int fuse_getattr(struct user_namespace *mnt_userns,
+static int fuse_getattr(struct mnt_idmap *idmap,
                        const struct path *path, struct kstat *stat,
                        u32 request_mask, unsigned int flags)
 {
index 0c8b64921c4ca56dcb5524bd8038d2dd421fb00f..30ec02ab1d0eca487a4c5f077d4f6e608421a80e 100644 (file)
@@ -2022,7 +2022,7 @@ out:
 
 /**
  * gfs2_getattr - Read out an inode's attributes
- * @mnt_userns:        user namespace of the mount the inode was found from
+ * @idmap: idmap of the mount the inode was found from
  * @path: Object to query
  * @stat: The inode's stats
  * @request_mask: Mask of STATX_xxx flags indicating the caller's interests
@@ -2037,7 +2037,7 @@ out:
  * Returns: errno
  */
 
-static int gfs2_getattr(struct user_namespace *mnt_userns,
+static int gfs2_getattr(struct mnt_idmap *idmap,
                        const struct path *path, struct kstat *stat,
                        u32 request_mask, unsigned int flags)
 {
@@ -2066,7 +2066,7 @@ static int gfs2_getattr(struct user_namespace *mnt_userns,
                                  STATX_ATTR_IMMUTABLE |
                                  STATX_ATTR_NODUMP);
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
 
        if (gfs2_holder_initialized(&gh))
                gfs2_glock_dq_uninit(&gh);
index 6aa919e594834bf6a0b93c6ab3b02395977fbd3c..d5f3ce0f8dada37ea30072056364be99825c17d5 100644 (file)
@@ -481,7 +481,7 @@ void hfsplus_inode_write_fork(struct inode *inode,
                              struct hfsplus_fork_raw *fork);
 int hfsplus_cat_read_inode(struct inode *inode, struct hfs_find_data *fd);
 int hfsplus_cat_write_inode(struct inode *inode);
-int hfsplus_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int hfsplus_getattr(struct mnt_idmap *idmap, const struct path *path,
                    struct kstat *stat, u32 request_mask,
                    unsigned int query_flags);
 int hfsplus_file_fsync(struct file *file, loff_t start, loff_t end,
index 00b242f6574a0dac120dc7c12a2a86f05bd271a1..ff98c1250d7ca4364df4c9ff767fcf5111671070 100644 (file)
@@ -276,7 +276,7 @@ static int hfsplus_setattr(struct mnt_idmap *idmap,
        return 0;
 }
 
-int hfsplus_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int hfsplus_getattr(struct mnt_idmap *idmap, const struct path *path,
                    struct kstat *stat, u32 request_mask,
                    unsigned int query_flags)
 {
@@ -298,7 +298,7 @@ int hfsplus_getattr(struct user_namespace *mnt_userns, const struct path *path,
        stat->attributes_mask |= STATX_ATTR_APPEND | STATX_ATTR_IMMUTABLE |
                                 STATX_ATTR_NODUMP;
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        return 0;
 }
 
index 691869b1e9dd8d517ca0c5e2a28fa469cf90d0f3..8e56526d40d8d50a68fbc55bca44bed4a3cd8d1e 100644 (file)
@@ -181,7 +181,7 @@ static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode)
                set_nlink(inode, kn->dir.subdirs + 2);
 }
 
-int kernfs_iop_getattr(struct user_namespace *mnt_userns,
+int kernfs_iop_getattr(struct mnt_idmap *idmap,
                       const struct path *path, struct kstat *stat,
                       u32 request_mask, unsigned int query_flags)
 {
@@ -191,7 +191,7 @@ int kernfs_iop_getattr(struct user_namespace *mnt_userns,
 
        down_read(&root->kernfs_rwsem);
        kernfs_refresh_inode(kn, inode);
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        up_read(&root->kernfs_rwsem);
 
        return 0;
index 0ccab5c997b65c63ccc106cf3d1897ebebb7cb48..451bf26394e6892f662409d61b7071a4a302a311 100644 (file)
@@ -131,7 +131,7 @@ int kernfs_iop_permission(struct user_namespace *mnt_userns,
                          struct inode *inode, int mask);
 int kernfs_iop_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                       struct iattr *iattr);
-int kernfs_iop_getattr(struct user_namespace *mnt_userns,
+int kernfs_iop_getattr(struct mnt_idmap *idmap,
                       const struct path *path, struct kstat *stat,
                       u32 request_mask, unsigned int query_flags);
 ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size);
index f787f66b329c189ccb37323679f41e036f5ebbe1..ba8146f39adb9e078aabe42fc4ae785cf755f0dc 100644 (file)
@@ -3631,7 +3631,8 @@ static void unlock_dir(struct ksmbd_file *dir_fp)
 
 static int process_query_dir_entries(struct smb2_query_dir_private *priv)
 {
-       struct user_namespace   *user_ns = file_mnt_user_ns(priv->dir_fp->filp);
+       struct mnt_idmap        *idmap = file_mnt_idmap(priv->dir_fp->filp);
+       struct user_namespace   *user_ns = mnt_idmap_owner(idmap);
        struct kstat            kstat;
        struct ksmbd_kstat      ksmbd_kstat;
        int                     rc;
@@ -3665,7 +3666,7 @@ static int process_query_dir_entries(struct smb2_query_dir_private *priv)
                ksmbd_kstat.kstat = &kstat;
                if (priv->info_level != FILE_NAMES_INFORMATION)
                        ksmbd_vfs_fill_dentry_attrs(priv->work,
-                                                   user_ns,
+                                                   idmap,
                                                    dent,
                                                    &ksmbd_kstat);
 
@@ -4331,7 +4332,7 @@ static int get_file_basic_info(struct smb2_query_info_rsp *rsp,
        }
 
        basic_info = (struct smb2_file_basic_info *)rsp->Buffer;
-       generic_fillattr(file_mnt_user_ns(fp->filp), file_inode(fp->filp),
+       generic_fillattr(file_mnt_idmap(fp->filp), file_inode(fp->filp),
                         &stat);
        basic_info->CreationTime = cpu_to_le64(fp->create_time);
        time = ksmbd_UnixTimeToNT(stat.atime);
@@ -4372,7 +4373,7 @@ static void get_file_standard_info(struct smb2_query_info_rsp *rsp,
        struct kstat stat;
 
        inode = file_inode(fp->filp);
-       generic_fillattr(file_mnt_user_ns(fp->filp), inode, &stat);
+       generic_fillattr(file_mnt_idmap(fp->filp), inode, &stat);
 
        sinfo = (struct smb2_file_standard_info *)rsp->Buffer;
        delete_pending = ksmbd_inode_pending_delete(fp);
@@ -4426,7 +4427,7 @@ static int get_file_all_info(struct ksmbd_work *work,
                return PTR_ERR(filename);
 
        inode = file_inode(fp->filp);
-       generic_fillattr(file_mnt_user_ns(fp->filp), inode, &stat);
+       generic_fillattr(file_mnt_idmap(fp->filp), inode, &stat);
 
        ksmbd_debug(SMB, "filename = %s\n", filename);
        delete_pending = ksmbd_inode_pending_delete(fp);
@@ -4503,7 +4504,7 @@ static void get_file_stream_info(struct ksmbd_work *work,
        int buf_free_len;
        struct smb2_query_info_req *req = ksmbd_req_buf_next(work);
 
-       generic_fillattr(file_mnt_user_ns(fp->filp), file_inode(fp->filp),
+       generic_fillattr(file_mnt_idmap(fp->filp), file_inode(fp->filp),
                         &stat);
        file_info = (struct smb2_file_stream_info *)rsp->Buffer;
 
@@ -4594,7 +4595,7 @@ static void get_file_internal_info(struct smb2_query_info_rsp *rsp,
        struct smb2_file_internal_info *file_info;
        struct kstat stat;
 
-       generic_fillattr(file_mnt_user_ns(fp->filp), file_inode(fp->filp),
+       generic_fillattr(file_mnt_idmap(fp->filp), file_inode(fp->filp),
                         &stat);
        file_info = (struct smb2_file_internal_info *)rsp->Buffer;
        file_info->IndexNumber = cpu_to_le64(stat.ino);
@@ -4620,7 +4621,7 @@ static int get_file_network_open_info(struct smb2_query_info_rsp *rsp,
        file_info = (struct smb2_file_ntwrk_info *)rsp->Buffer;
 
        inode = file_inode(fp->filp);
-       generic_fillattr(file_mnt_user_ns(fp->filp), inode, &stat);
+       generic_fillattr(file_mnt_idmap(fp->filp), inode, &stat);
 
        file_info->CreationTime = cpu_to_le64(fp->create_time);
        time = ksmbd_UnixTimeToNT(stat.atime);
@@ -4681,7 +4682,7 @@ static void get_file_compression_info(struct smb2_query_info_rsp *rsp,
        struct smb2_file_comp_info *file_info;
        struct kstat stat;
 
-       generic_fillattr(file_mnt_user_ns(fp->filp), file_inode(fp->filp),
+       generic_fillattr(file_mnt_idmap(fp->filp), file_inode(fp->filp),
                         &stat);
 
        file_info = (struct smb2_file_comp_info *)rsp->Buffer;
index 2a4fbbd55b91fc763119abbbbf54726c80be02a9..fa2b54df6ee6ff2aad4da4f3090010b26a863c63 100644 (file)
@@ -307,7 +307,7 @@ int ksmbd_populate_dot_dotdot_entries(struct ksmbd_work *work, int info_level,
 {
        int i, rc = 0;
        struct ksmbd_conn *conn = work->conn;
-       struct user_namespace *user_ns = file_mnt_user_ns(dir->filp);
+       struct mnt_idmap *idmap = file_mnt_idmap(dir->filp);
 
        for (i = 0; i < 2; i++) {
                struct kstat kstat;
@@ -333,7 +333,7 @@ int ksmbd_populate_dot_dotdot_entries(struct ksmbd_work *work, int info_level,
 
                        ksmbd_kstat.kstat = &kstat;
                        ksmbd_vfs_fill_dentry_attrs(work,
-                                                   user_ns,
+                                                   idmap,
                                                    dentry,
                                                    &ksmbd_kstat);
                        rc = fn(conn, info_level, d_info, &ksmbd_kstat);
index 5b284dd61056b361de033087c4328ee4abdc26e5..cf60e62d6e73029d39ebe81b1f2f4a6202a15133 100644 (file)
@@ -1657,14 +1657,14 @@ void *ksmbd_vfs_init_kstat(char **p, struct ksmbd_kstat *ksmbd_kstat)
 }
 
 int ksmbd_vfs_fill_dentry_attrs(struct ksmbd_work *work,
-                               struct user_namespace *user_ns,
+                               struct mnt_idmap *idmap,
                                struct dentry *dentry,
                                struct ksmbd_kstat *ksmbd_kstat)
 {
        u64 time;
        int rc;
 
-       generic_fillattr(user_ns, d_inode(dentry), ksmbd_kstat->kstat);
+       generic_fillattr(idmap, d_inode(dentry), ksmbd_kstat->kstat);
 
        time = ksmbd_UnixTimeToNT(ksmbd_kstat->kstat->ctime);
        ksmbd_kstat->create_time = time;
@@ -1682,7 +1682,7 @@ int ksmbd_vfs_fill_dentry_attrs(struct ksmbd_work *work,
                                   KSMBD_SHARE_FLAG_STORE_DOS_ATTRS)) {
                struct xattr_dos_attrib da;
 
-               rc = ksmbd_vfs_get_dos_attrib_xattr(user_ns, dentry, &da);
+               rc = ksmbd_vfs_get_dos_attrib_xattr(mnt_idmap_owner(idmap), dentry, &da);
                if (rc > 0) {
                        ksmbd_kstat->file_attributes = cpu_to_le32(da.attr);
                        ksmbd_kstat->create_time = da.create_time;
index 0c9b04ae5fbf665068d485a1f99843aab203db83..619304b08a7fe9e5bc6c89ea3e9fab34c4648e30 100644 (file)
@@ -135,7 +135,7 @@ int ksmbd_vfs_unlink(struct mnt_idmap *idmap, struct dentry *dir,
                     struct dentry *dentry);
 void *ksmbd_vfs_init_kstat(char **p, struct ksmbd_kstat *ksmbd_kstat);
 int ksmbd_vfs_fill_dentry_attrs(struct ksmbd_work *work,
-                               struct user_namespace *user_ns,
+                               struct mnt_idmap *idmap,
                                struct dentry *dentry,
                                struct ksmbd_kstat *ksmbd_kstat);
 void ksmbd_vfs_posix_lock_wait(struct file_lock *flock);
index 0933726e3b6f5f83b36d4f27936477cd15cdb44c..aae36b224508f1af72968ef46ccd53bc3265cc8e 100644 (file)
 
 #include "internal.h"
 
-int simple_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int simple_getattr(struct mnt_idmap *idmap, const struct path *path,
                   struct kstat *stat, u32 request_mask,
                   unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        stat->blocks = inode->i_mapping->nrpages << (PAGE_SHIFT - 9);
        return 0;
 }
@@ -1315,12 +1315,12 @@ static struct dentry *empty_dir_lookup(struct inode *dir, struct dentry *dentry,
        return ERR_PTR(-ENOENT);
 }
 
-static int empty_dir_getattr(struct user_namespace *mnt_userns,
+static int empty_dir_getattr(struct mnt_idmap *idmap,
                             const struct path *path, struct kstat *stat,
                             u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        return 0;
 }
 
index da8bdd1712a70b17e6bf825b3cd9830d2e23206f..e9fbb5303a222958a53fa95575be1814327f9adc 100644 (file)
@@ -654,13 +654,13 @@ static int minix_write_inode(struct inode *inode, struct writeback_control *wbc)
        return err;
 }
 
-int minix_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int minix_getattr(struct mnt_idmap *idmap, const struct path *path,
                  struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        struct super_block *sb = path->dentry->d_sb;
        struct inode *inode = d_inode(path->dentry);
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        if (INODE_VERSION(inode) == MINIX_V1)
                stat->blocks = (BLOCK_SIZE / 512) * V1_minix_blocks(stat->size, sb);
        else
index 20217336802570e024dc6837c2f67742198877c6..e0b76defa85c42e47002bbefb081f3e2a4db411f 100644 (file)
@@ -51,7 +51,7 @@ extern unsigned long minix_count_free_inodes(struct super_block *sb);
 extern int minix_new_block(struct inode * inode);
 extern void minix_free_block(struct inode *inode, unsigned long block);
 extern unsigned long minix_count_free_blocks(struct super_block *sb);
-extern int minix_getattr(struct user_namespace *, const struct path *,
+extern int minix_getattr(struct mnt_idmap *, const struct path *,
                         struct kstat *, u32, unsigned int);
 extern int minix_prepare_chunk(struct page *page, loff_t pos, unsigned len);
 
index d31ea0a1ebd6085e6bff56648f19adffdc9f960e..7000c161c900c869f42c6709388405addc8814ca 100644 (file)
@@ -828,7 +828,7 @@ static u32 nfs_get_valid_attrmask(struct inode *inode)
        return reply_mask;
 }
 
-int nfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int nfs_getattr(struct mnt_idmap *idmap, const struct path *path,
                struct kstat *stat, u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
@@ -908,7 +908,7 @@ out_no_revalidate:
        /* Only return attributes that were revalidated. */
        stat->result_mask = nfs_get_valid_attrmask(inode) | request_mask;
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        stat->ino = nfs_compat_user_ino64(NFS_FILEID(inode));
        if (S_ISDIR(inode->i_mode))
                stat->blksize = NFS_SERVER(inode)->dtsize;
index 971132dfc93a81befd2098977925878c2a8b2a1e..19d51ebf842c017a281780559b08291d40b001bc 100644 (file)
@@ -208,14 +208,14 @@ out_fc:
 }
 
 static int
-nfs_namespace_getattr(struct user_namespace *mnt_userns,
+nfs_namespace_getattr(struct mnt_idmap *idmap,
                      const struct path *path, struct kstat *stat,
                      u32 request_mask, unsigned int query_flags)
 {
        if (NFS_FH(d_inode(path->dentry))->size != 0)
-               return nfs_getattr(mnt_userns, path, stat, request_mask,
+               return nfs_getattr(idmap, path, stat, request_mask,
                                   query_flags);
-       generic_fillattr(&init_user_ns, d_inode(path->dentry), stat);
+       generic_fillattr(&nop_mnt_idmap, d_inode(path->dentry), stat);
        return 0;
 }
 
index 3303b6c8868091114809b3dbe18325ff198031d5..33299e4f931ed4d63f58bf018b0fe10b2ba8004c 100644 (file)
@@ -70,7 +70,7 @@ static long ntfs_compat_ioctl(struct file *filp, u32 cmd, unsigned long arg)
 /*
  * ntfs_getattr - inode_operations::getattr
  */
-int ntfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ntfs_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, u32 flags)
 {
        struct inode *inode = d_inode(path->dentry);
@@ -84,7 +84,7 @@ int ntfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
 
        stat->attributes_mask |= STATX_ATTR_COMPRESSED | STATX_ATTR_ENCRYPTED;
 
-       generic_fillattr(mnt_userns, inode, stat);
+       generic_fillattr(idmap, inode, stat);
 
        stat->result_mask |= STATX_BTIME;
        stat->btime = ni->i_crtime;
index 87073329712258be4dbf4a7434088f296c84d1f8..41cd797b3c9605016f67669f758de9f7dc3b3110 100644 (file)
@@ -492,7 +492,7 @@ bool dir_is_empty(struct inode *dir);
 extern const struct file_operations ntfs_dir_operations;
 
 /* Globals from file.c */
-int ntfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ntfs_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, u32 flags);
 int ntfs3_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                  struct iattr *attr);
index e157deb68d38895d5f549fa0c8f74f8b4758f3f4..972a8333317ff76267fc3e76683cf3f85707ebbb 100644 (file)
@@ -1303,7 +1303,7 @@ bail:
        return status;
 }
 
-int ocfs2_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ocfs2_getattr(struct mnt_idmap *idmap, const struct path *path,
                  struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        struct inode *inode = d_inode(path->dentry);
@@ -1318,7 +1318,7 @@ int ocfs2_getattr(struct user_namespace *mnt_userns, const struct path *path,
                goto bail;
        }
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        /*
         * If there is inline data in the inode, the inode will normally not
         * have data blocks allocated (it may have an external xattr block).
index 76020b348df2c9826c3bf457113a23f3abef8169..ddc76aaffe794ec5b4c56610589d119caea6bcb2 100644 (file)
@@ -51,7 +51,7 @@ int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh,
                      loff_t zero_to);
 int ocfs2_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                  struct iattr *attr);
-int ocfs2_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ocfs2_getattr(struct mnt_idmap *idmap, const struct path *path,
                  struct kstat *stat, u32 request_mask, unsigned int flags);
 int ocfs2_permission(struct user_namespace *mnt_userns,
                     struct inode *inode,
index 011892b23b5eab5e0b12794b85fd429d9ea9f09e..71cc7f11c7a086a021c69bc272a8610161e308e7 100644 (file)
@@ -866,7 +866,7 @@ out:
 /*
  * Obtain attributes of an object given a dentry
  */
-int orangefs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int orangefs_getattr(struct mnt_idmap *idmap, const struct path *path,
                     struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        int ret;
@@ -879,7 +879,7 @@ int orangefs_getattr(struct user_namespace *mnt_userns, const struct path *path,
        ret = orangefs_inode_getattr(inode,
            request_mask & STATX_SIZE ? ORANGEFS_GETATTR_SIZE : 0);
        if (ret == 0) {
-               generic_fillattr(&init_user_ns, inode, stat);
+               generic_fillattr(&nop_mnt_idmap, inode, stat);
 
                /* override block size reported to stat */
                if (!(request_mask & STATX_SIZE))
index 142abd37cdda4b21de28817dbd60ec010aad5fc4..064a52980283063fcee8bc7a4efef0e310273c12 100644 (file)
@@ -364,7 +364,7 @@ int __orangefs_setattr(struct inode *, struct iattr *);
 int __orangefs_setattr_mode(struct dentry *dentry, struct iattr *iattr);
 int orangefs_setattr(struct mnt_idmap *, struct dentry *, struct iattr *);
 
-int orangefs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int orangefs_getattr(struct mnt_idmap *idmap, const struct path *path,
                     struct kstat *stat, u32 request_mask, unsigned int flags);
 
 int orangefs_permission(struct user_namespace *mnt_userns,
index 8796a0feb34f051e85c035995833e997106163b6..ad33253ed7e94aba5f98e7f9719d730447f8c3d1 100644 (file)
@@ -153,7 +153,7 @@ static void ovl_map_dev_ino(struct dentry *dentry, struct kstat *stat, int fsid)
        }
 }
 
-int ovl_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ovl_getattr(struct mnt_idmap *idmap, const struct path *path,
                struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        struct dentry *dentry = path->dentry;
index 4cd435aabbb48fc4d8a514131d906443d4fdc9b3..b6e17f631b539b2d678e41d935364db27274d8ba 100644 (file)
@@ -599,7 +599,7 @@ unsigned int ovl_get_nlink(struct ovl_fs *ofs, struct dentry *lowerdentry,
                           unsigned int fallback);
 int ovl_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                struct iattr *attr);
-int ovl_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ovl_getattr(struct mnt_idmap *idmap, const struct path *path,
                struct kstat *stat, u32 request_mask, unsigned int flags);
 int ovl_permission(struct user_namespace *mnt_userns, struct inode *inode,
                   int mask);
index 92166c33395db093123cd52a0ae13add8100d148..aa7ebee0074678249f3e76630d4a2cf0b47fa272 100644 (file)
@@ -1959,14 +1959,14 @@ static struct inode *proc_pid_make_base_inode(struct super_block *sb,
        return inode;
 }
 
-int pid_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int pid_getattr(struct mnt_idmap *idmap, const struct path *path,
                struct kstat *stat, u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
        struct proc_fs_info *fs_info = proc_sb_info(inode->i_sb);
        struct task_struct *task;
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
 
        stat->uid = GLOBAL_ROOT_UID;
        stat->gid = GLOBAL_ROOT_GID;
@@ -3891,13 +3891,13 @@ static int proc_task_readdir(struct file *file, struct dir_context *ctx)
        return 0;
 }
 
-static int proc_task_getattr(struct user_namespace *mnt_userns,
+static int proc_task_getattr(struct mnt_idmap *idmap,
                             const struct path *path, struct kstat *stat,
                             u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
        struct task_struct *p = get_proc_task(inode);
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
 
        if (p) {
                stat->nlink += get_nr_threads(p);
index fc46d6fe080c599fc5c68114b4962cd3ee11dab1..d9bda34c770d57e71f35b51458058ede611b1b14 100644 (file)
@@ -344,14 +344,14 @@ int proc_fd_permission(struct user_namespace *mnt_userns,
        return rv;
 }
 
-static int proc_fd_getattr(struct user_namespace *mnt_userns,
+static int proc_fd_getattr(struct mnt_idmap *idmap,
                        const struct path *path, struct kstat *stat,
                        u32 request_mask, unsigned int query_flags)
 {
        struct inode *inode = d_inode(path->dentry);
        int rv = 0;
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
 
        /* If it's a directory, put the number of open fds there */
        if (S_ISDIR(inode->i_mode)) {
index 4464ad6a22833049bdc431a8f14db3a736f3a9d0..8379593fa4bbe3730426908a27323a311dc79f65 100644 (file)
@@ -134,7 +134,7 @@ static int proc_notify_change(struct mnt_idmap *idmap,
        return 0;
 }
 
-static int proc_getattr(struct user_namespace *mnt_userns,
+static int proc_getattr(struct mnt_idmap *idmap,
                        const struct path *path, struct kstat *stat,
                        u32 request_mask, unsigned int query_flags)
 {
@@ -147,7 +147,7 @@ static int proc_getattr(struct user_namespace *mnt_userns,
                }
        }
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        return 0;
 }
 
index 6eb921670fc675773180d304f7107eac2a3f0064..9dda7e54b2d0d98766b940701dd47a5034f2f463 100644 (file)
@@ -162,7 +162,7 @@ extern int proc_pid_statm(struct seq_file *, struct pid_namespace *,
  * base.c
  */
 extern const struct dentry_operations pid_dentry_operations;
-extern int pid_getattr(struct user_namespace *, const struct path *,
+extern int pid_getattr(struct mnt_idmap *, const struct path *,
                       struct kstat *, u32, unsigned int);
 extern int proc_setattr(struct mnt_idmap *, struct dentry *,
                        struct iattr *);
index 856839b8ae8b7e5b5af600aa08a5575315e8eed6..a0c0419872e3cc2245b9783307f9fec8f5345c1e 100644 (file)
@@ -299,7 +299,7 @@ static struct dentry *proc_tgid_net_lookup(struct inode *dir,
        return de;
 }
 
-static int proc_tgid_net_getattr(struct user_namespace *mnt_userns,
+static int proc_tgid_net_getattr(struct mnt_idmap *idmap,
                                 const struct path *path, struct kstat *stat,
                                 u32 request_mask, unsigned int query_flags)
 {
@@ -308,7 +308,7 @@ static int proc_tgid_net_getattr(struct user_namespace *mnt_userns,
 
        net = get_proc_task_net(inode);
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
 
        if (net != NULL) {
                stat->nlink = net->proc_net->nlink;
index daba911972eca14e3f12da1c43cfd323b6845549..7d111c46ca75ab935b541af3a82e73a6bed3deca 100644 (file)
@@ -845,7 +845,7 @@ static int proc_sys_setattr(struct mnt_idmap *idmap,
        return 0;
 }
 
-static int proc_sys_getattr(struct user_namespace *mnt_userns,
+static int proc_sys_getattr(struct mnt_idmap *idmap,
                            const struct path *path, struct kstat *stat,
                            u32 request_mask, unsigned int query_flags)
 {
@@ -856,7 +856,7 @@ static int proc_sys_getattr(struct user_namespace *mnt_userns,
        if (IS_ERR(head))
                return PTR_ERR(head);
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        if (table)
                stat->mode = (stat->mode & S_IFMT) | table->mode;
 
index 3c2ee3eb1138aaa0fac4bedc5503fe0a50cc7df4..a86e65a608daac0b1a7ed0b9776b68459064e8d8 100644 (file)
@@ -310,11 +310,11 @@ void __init proc_root_init(void)
        register_filesystem(&proc_fs_type);
 }
 
-static int proc_root_getattr(struct user_namespace *mnt_userns,
+static int proc_root_getattr(struct mnt_idmap *idmap,
                             const struct path *path, struct kstat *stat,
                             u32 request_mask, unsigned int query_flags)
 {
-       generic_fillattr(&init_user_ns, d_inode(path->dentry), stat);
+       generic_fillattr(&nop_mnt_idmap, d_inode(path->dentry), stat);
        stat->nlink = proc_root.nlink + nr_processes();
        return 0;
 }
index d6cc74ca848635a38064fb949dfff6512b253f8b..cb91bc7c9efd810617aefd960bd460b7c31b1180 100644 (file)
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -27,7 +27,7 @@
 
 /**
  * generic_fillattr - Fill in the basic attributes from the inode struct
- * @mnt_userns:        user namespace of the mount the inode was found from
+ * @idmap:     idmap of the mount the inode was found from
  * @inode:     Inode to use as the source
  * @stat:      Where to fill in the attributes
  *
  * found on the VFS inode structure.  This is the default if no getattr inode
  * operation is supplied.
  *
- * If the inode has been found through an idmapped mount the user namespace of
- * the vfsmount must be passed through @mnt_userns. This function will then
- * take care to map the inode according to @mnt_userns before filling in the
+ * If the inode has been found through an idmapped mount the idmap of
+ * the vfsmount must be passed through @idmap. This function will then
+ * take care to map the inode according to @idmap before filling in the
  * uid and gid filds. On non-idmapped mounts or if permission checking is to be
- * performed on the raw inode simply passs init_user_ns.
+ * performed on the raw inode simply passs @nop_mnt_idmap.
  */
-void generic_fillattr(struct user_namespace *mnt_userns, struct inode *inode,
+void generic_fillattr(struct mnt_idmap *idmap, struct inode *inode,
                      struct kstat *stat)
 {
+       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
+
        vfsuid_t vfsuid = i_uid_into_vfsuid(mnt_userns, inode);
        vfsgid_t vfsgid = i_gid_into_vfsgid(mnt_userns, inode);
 
@@ -97,7 +99,7 @@ EXPORT_SYMBOL(generic_fill_statx_attr);
 int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
                      u32 request_mask, unsigned int query_flags)
 {
-       struct user_namespace *mnt_userns;
+       struct mnt_idmap *idmap;
        struct inode *inode = d_backing_inode(path->dentry);
 
        memset(stat, 0, sizeof(*stat));
@@ -122,12 +124,12 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
        stat->attributes_mask |= (STATX_ATTR_AUTOMOUNT |
                                  STATX_ATTR_DAX);
 
-       mnt_userns = mnt_user_ns(path->mnt);
+       idmap = mnt_idmap(path->mnt);
        if (inode->i_op->getattr)
-               return inode->i_op->getattr(mnt_userns, path, stat,
+               return inode->i_op->getattr(idmap, path, stat,
                                            request_mask, query_flags);
 
-       generic_fillattr(mnt_userns, inode, stat);
+       generic_fillattr(idmap, inode, stat);
        return 0;
 }
 EXPORT_SYMBOL(vfs_getattr_nosec);
index 3b8567564e7e4751e8b40fdd974aa9c9b75bd0e4..b22764fe669c84838e6552d6ea0d8004b7a8d739 100644 (file)
@@ -441,11 +441,11 @@ static unsigned sysv_nblocks(struct super_block *s, loff_t size)
        return res;
 }
 
-int sysv_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int sysv_getattr(struct mnt_idmap *idmap, const struct path *path,
                 struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        struct super_block *s = path->dentry->d_sb;
-       generic_fillattr(&init_user_ns, d_inode(path->dentry), stat);
+       generic_fillattr(&nop_mnt_idmap, d_inode(path->dentry), stat);
        stat->blocks = (s->s_blocksize / 512) * sysv_nblocks(s, stat->size);
        stat->blksize = s->s_blocksize;
        return 0;
index 99ddf033da4f1dadc749337d42d30d23ab350fe3..5e122a5673c1c19dfa20213d71c683bfd9e650b7 100644 (file)
@@ -141,7 +141,7 @@ extern struct inode *sysv_iget(struct super_block *, unsigned int);
 extern int sysv_write_inode(struct inode *, struct writeback_control *wbc);
 extern int sysv_sync_inode(struct inode *);
 extern void sysv_set_inode(struct inode *, dev_t);
-extern int sysv_getattr(struct user_namespace *, const struct path *,
+extern int sysv_getattr(struct mnt_idmap *, const struct path *,
                        struct kstat *, u32, unsigned int);
 extern int sysv_init_icache(void);
 extern void sysv_destroy_icache(void);
index 0f29cf2011361c6f9d663dc21f09e363de0c7e0f..b034f66c6ea8a7bacfc4c6d0b30b8aef794cdc28 100644 (file)
@@ -1631,7 +1631,7 @@ static int ubifs_rename(struct user_namespace *mnt_userns,
        return do_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
 }
 
-int ubifs_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int ubifs_getattr(struct mnt_idmap *idmap, const struct path *path,
                  struct kstat *stat, u32 request_mask, unsigned int flags)
 {
        loff_t size;
@@ -1654,7 +1654,7 @@ int ubifs_getattr(struct user_namespace *mnt_userns, const struct path *path,
                                STATX_ATTR_ENCRYPTED |
                                STATX_ATTR_IMMUTABLE);
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        stat->blksize = UBIFS_BLOCK_SIZE;
        stat->size = ui->ui_size;
 
index e666337df02c3c6cf98f30fbfc6b486f5b34c6aa..8cb5d76b301ccde611be04b7662acdcbdb1ead82 100644 (file)
@@ -1608,11 +1608,11 @@ static const char *ubifs_get_link(struct dentry *dentry,
        return fscrypt_get_symlink(inode, ui->data, ui->data_len, done);
 }
 
-static int ubifs_symlink_getattr(struct user_namespace *mnt_userns,
+static int ubifs_symlink_getattr(struct mnt_idmap *idmap,
                                 const struct path *path, struct kstat *stat,
                                 u32 request_mask, unsigned int query_flags)
 {
-       ubifs_getattr(mnt_userns, path, stat, request_mask, query_flags);
+       ubifs_getattr(idmap, path, stat, request_mask, query_flags);
 
        if (IS_ENCRYPTED(d_inode(path->dentry)))
                return fscrypt_symlink_getattr(path, stat);
index 9b66e762950b43cb23b483cdd3392fb2a850f900..1d2fdef6dfa06c2a6d570c2ee624ae02dfc8db75 100644 (file)
@@ -2027,8 +2027,8 @@ int ubifs_update_time(struct inode *inode, struct timespec64 *time, int flags);
 /* dir.c */
 struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
                              umode_t mode, bool is_xattr);
-int ubifs_getattr(struct user_namespace *mnt_userns, const struct path *path, struct kstat *stat,
-                 u32 request_mask, unsigned int flags);
+int ubifs_getattr(struct mnt_idmap *idmap, const struct path *path,
+                 struct kstat *stat, u32 request_mask, unsigned int flags);
 int ubifs_check_dir_empty(struct inode *dir);
 
 /* xattr.c */
index f3642f9c23f86bae15f4bdc175ff5a4125624ac4..5cf763911aef35a54f42a5ea9c1d49db309afcb6 100644 (file)
@@ -153,7 +153,7 @@ out_unmap:
        return err;
 }
 
-static int udf_symlink_getattr(struct user_namespace *mnt_userns,
+static int udf_symlink_getattr(struct mnt_idmap *idmap,
                               const struct path *path, struct kstat *stat,
                               u32 request_mask, unsigned int flags)
 {
@@ -161,7 +161,7 @@ static int udf_symlink_getattr(struct user_namespace *mnt_userns,
        struct inode *inode = d_backing_inode(dentry);
        struct page *page;
 
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
        page = read_mapping_page(inode->i_mapping, 0, NULL);
        if (IS_ERR(page))
                return PTR_ERR(page);
index 046b5a3bf314b3b24617bc6280d2caebb1217dae..dd0ae1188e87009c6d67bc102234e59fa16b5951 100644 (file)
@@ -231,7 +231,7 @@ int vboxsf_inode_revalidate(struct dentry *dentry)
        return 0;
 }
 
-int vboxsf_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int vboxsf_getattr(struct mnt_idmap *idmap, const struct path *path,
                   struct kstat *kstat, u32 request_mask, unsigned int flags)
 {
        int err;
@@ -252,7 +252,7 @@ int vboxsf_getattr(struct user_namespace *mnt_userns, const struct path *path,
        if (err)
                return err;
 
-       generic_fillattr(&init_user_ns, d_inode(dentry), kstat);
+       generic_fillattr(&nop_mnt_idmap, d_inode(dentry), kstat);
        return 0;
 }
 
index 7de5a0a4e285f237c402f5687fa4da4b530b2f2d..05973eb89d5283acf4766909537295d013ebf4f7 100644 (file)
@@ -97,7 +97,7 @@ int vboxsf_stat(struct vboxsf_sbi *sbi, struct shfl_string *path,
                struct shfl_fsobjinfo *info);
 int vboxsf_stat_dentry(struct dentry *dentry, struct shfl_fsobjinfo *info);
 int vboxsf_inode_revalidate(struct dentry *dentry);
-int vboxsf_getattr(struct user_namespace *mnt_userns, const struct path *path,
+int vboxsf_getattr(struct mnt_idmap *idmap, const struct path *path,
                   struct kstat *kstat, u32 request_mask,
                   unsigned int query_flags);
 int vboxsf_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
index ba764205bd3ae981b29a4e08839a067512b88949..737211879a0927b92c808ae67a2a6ec42ed7e673 100644 (file)
@@ -549,12 +549,13 @@ xfs_stat_blksize(
 
 STATIC int
 xfs_vn_getattr(
-       struct user_namespace   *mnt_userns,
+       struct mnt_idmap        *idmap,
        const struct path       *path,
        struct kstat            *stat,
        u32                     request_mask,
        unsigned int            query_flags)
 {
+       struct user_namespace   *mnt_userns = mnt_idmap_owner(idmap);
        struct inode            *inode = d_inode(path->dentry);
        struct xfs_inode        *ip = XFS_I(inode);
        struct xfs_mount        *mp = ip->i_mount;
index 24e378e2835f6b9f588849be9a5fc488f51575fe..0214aee3324eaa166dc293d5df52b38b8291c62d 100644 (file)
@@ -2153,7 +2153,7 @@ struct inode_operations {
        int (*rename) (struct user_namespace *, struct inode *, struct dentry *,
                        struct inode *, struct dentry *, unsigned int);
        int (*setattr) (struct mnt_idmap *, struct dentry *, struct iattr *);
-       int (*getattr) (struct user_namespace *, const struct path *,
+       int (*getattr) (struct mnt_idmap *, const struct path *,
                        struct kstat *, u32, unsigned int);
        ssize_t (*listxattr) (struct dentry *, char *, size_t);
        int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
@@ -3261,7 +3261,7 @@ extern void page_put_link(void *);
 extern int page_symlink(struct inode *inode, const char *symname, int len);
 extern const struct inode_operations page_symlink_inode_operations;
 extern void kfree_link(void *);
-void generic_fillattr(struct user_namespace *, struct inode *, struct kstat *);
+void generic_fillattr(struct mnt_idmap *, struct inode *, struct kstat *);
 void generic_fill_statx_attr(struct inode *inode, struct kstat *stat);
 extern int vfs_getattr_nosec(const struct path *, struct kstat *, u32, unsigned int);
 extern int vfs_getattr(const struct path *, struct kstat *, u32, unsigned int);
@@ -3314,7 +3314,7 @@ extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
 extern int dcache_readdir(struct file *, struct dir_context *);
 extern int simple_setattr(struct mnt_idmap *, struct dentry *,
                          struct iattr *);
-extern int simple_getattr(struct user_namespace *, const struct path *,
+extern int simple_getattr(struct mnt_idmap *, const struct path *,
                          struct kstat *, u32, unsigned int);
 extern int simple_statfs(struct dentry *, struct kstatfs *);
 extern int simple_open(struct inode *inode, struct file *file);
index 7c9628dc61a38a5aae36beb6be55551ab5dee180..0cd89ebd4bb6577adfb5b50c009eddbb73cc66f1 100644 (file)
@@ -392,7 +392,7 @@ extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *);
 extern int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr);
 extern int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr);
 extern int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr);
-extern int nfs_getattr(struct user_namespace *, const struct path *,
+extern int nfs_getattr(struct mnt_idmap *, const struct path *,
                       struct kstat *, u32, unsigned int);
 extern void nfs_access_add_cache(struct inode *, struct nfs_access_entry *, const struct cred *);
 extern void nfs_access_set_mask(struct nfs_access_entry *, u32);
index 6976df4e78b69cc6a730a30eba699acbca84edcf..ae259636af7670185412b557f0f812c4a96e834e 100644 (file)
@@ -1047,7 +1047,7 @@ void shmem_truncate_range(struct inode *inode, loff_t lstart, loff_t lend)
 }
 EXPORT_SYMBOL_GPL(shmem_truncate_range);
 
-static int shmem_getattr(struct user_namespace *mnt_userns,
+static int shmem_getattr(struct mnt_idmap *idmap,
                         const struct path *path, struct kstat *stat,
                         u32 request_mask, unsigned int query_flags)
 {
@@ -1068,7 +1068,7 @@ static int shmem_getattr(struct user_namespace *mnt_userns,
        stat->attributes_mask |= (STATX_ATTR_APPEND |
                        STATX_ATTR_IMMUTABLE |
                        STATX_ATTR_NODUMP);
-       generic_fillattr(&init_user_ns, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, inode, stat);
 
        if (shmem_is_huge(NULL, inode, 0, false))
                stat->blksize = HPAGE_PMD_SIZE;