Re: [PATCH 17/27] fs: port ->tmpfile() to pass const mnt_idmap
From: Jan Kara
Date: Wed Sep 02 2026 - 12:27:37 EST
On Tue 01-09-26 14:14:42, Christian Brauner wrote:
> Convert to const struct mnt_idmap.
>
> A mount's idmapping is immutable. The only thing that is allowed to be
> modified afterwards is the reference count and that is hidden behind
> mnt_idmap_get() and mnt_idmap_put(). Everything else only ever reads
> from the idmapping. This is the same model that struct cred uses and the
> idmapping is also rather sensitive.
>
> So make the idmap argument const wherever we can. The conversion is done
> from the bottom up so callers can continue to pass a non-const pointer
> to a const parameter until the conversion is finished.
>
> No functional changes.
>
> Signed-off-by: Christian Brauner (Amutable) <brauner@xxxxxxxxxx>
Looks good. Feel free to add:
Reviewed-by: Jan Kara <jack@xxxxxxx>
Honza
> ---
> Documentation/filesystems/locking.rst | 2 +-
> Documentation/filesystems/vfs.rst | 2 +-
> fs/bad_inode.c | 2 +-
> fs/btrfs/inode.c | 2 +-
> fs/ext2/namei.c | 2 +-
> fs/ext4/namei.c | 2 +-
> fs/f2fs/namei.c | 2 +-
> fs/fuse/dir.c | 2 +-
> fs/hugetlbfs/inode.c | 2 +-
> fs/minix/namei.c | 2 +-
> fs/overlayfs/dir.c | 2 +-
> fs/ramfs/inode.c | 2 +-
> fs/smb/client/cifsfs.h | 2 +-
> fs/smb/client/dir.c | 2 +-
> fs/ubifs/dir.c | 2 +-
> fs/udf/namei.c | 2 +-
> fs/xfs/xfs_iops.c | 2 +-
> include/linux/fs.h | 2 +-
> include/linux/lsm_hook_defs.h | 2 +-
> include/linux/security.h | 4 ++--
> mm/shmem.c | 2 +-
> security/integrity/ima/ima_main.c | 2 +-
> security/security.c | 2 +-
> 23 files changed, 24 insertions(+), 24 deletions(-)
>
> diff --git a/Documentation/filesystems/locking.rst b/Documentation/filesystems/locking.rst
> index 167988321a8c..e4948ddc0a5f 100644
> --- a/Documentation/filesystems/locking.rst
> +++ b/Documentation/filesystems/locking.rst
> @@ -86,7 +86,7 @@ prototypes::
> int (*atomic_open)(struct inode *, struct dentry *,
> struct file *, unsigned open_flag,
> umode_t create_mode);
> - int (*tmpfile) (struct mnt_idmap *, struct inode *,
> + int (*tmpfile) (const struct mnt_idmap *, struct inode *,
> struct file *, umode_t);
> int (*fileattr_set)(const struct mnt_idmap *idmap,
> struct dentry *dentry, struct file_kattr *fa);
> diff --git a/Documentation/filesystems/vfs.rst b/Documentation/filesystems/vfs.rst
> index 6adb1061a9b6..e960257ef14a 100644
> --- a/Documentation/filesystems/vfs.rst
> +++ b/Documentation/filesystems/vfs.rst
> @@ -438,7 +438,7 @@ As of kernel 2.6.22, the following members are defined:
> void (*sync_lazytime)(struct inode *inode);
> int (*atomic_open)(struct inode *, struct dentry *, struct file *,
> unsigned open_flag, umode_t create_mode);
> - int (*tmpfile) (struct mnt_idmap *, struct inode *, struct file *, umode_t);
> + int (*tmpfile) (const struct mnt_idmap *, struct inode *, struct file *, umode_t);
> struct posix_acl * (*get_acl)(const struct mnt_idmap *, struct dentry *, int);
> int (*set_acl)(const struct mnt_idmap *, struct dentry *, struct posix_acl *, int);
> int (*fileattr_set)(const struct mnt_idmap *idmap,
> diff --git a/fs/bad_inode.c b/fs/bad_inode.c
> index 6e116810f66d..d8c0ce62cc63 100644
> --- a/fs/bad_inode.c
> +++ b/fs/bad_inode.c
> @@ -146,7 +146,7 @@ static int bad_inode_atomic_open(struct inode *inode, struct dentry *dentry,
> return -EIO;
> }
>
> -static int bad_inode_tmpfile(struct mnt_idmap *idmap,
> +static int bad_inode_tmpfile(const struct mnt_idmap *idmap,
> struct inode *inode, struct file *file,
> umode_t mode)
> {
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 7bf38f069116..092057508ae9 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -9391,7 +9391,7 @@ static int btrfs_permission(const struct mnt_idmap *idmap,
> return generic_permission(idmap, inode, mask);
> }
>
> -static int btrfs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int btrfs_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct btrfs_fs_info *fs_info = inode_to_fs_info(dir);
> diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c
> index 8666233ec63b..108dc52cedfc 100644
> --- a/fs/ext2/namei.c
> +++ b/fs/ext2/namei.c
> @@ -117,7 +117,7 @@ static int ext2_create (struct mnt_idmap * idmap,
> return ext2_add_nondir(dentry, inode);
> }
>
> -static int ext2_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int ext2_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct inode *inode = ext2_new_inode(dir, mode, NULL);
> diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
> index edc12599e64d..0bff01fb052a 100644
> --- a/fs/ext4/namei.c
> +++ b/fs/ext4/namei.c
> @@ -2881,7 +2881,7 @@ static int ext4_mknod(struct mnt_idmap *idmap, struct inode *dir,
> return err;
> }
>
> -static int ext4_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int ext4_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> handle_t *handle;
> diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
> index e33780294713..3adc2345a204 100644
> --- a/fs/f2fs/namei.c
> +++ b/fs/f2fs/namei.c
> @@ -928,7 +928,7 @@ static int __f2fs_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> return err;
> }
>
> -static int f2fs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int f2fs_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
> diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
> index 0dbe3c6560f8..14dc9318cd57 100644
> --- a/fs/fuse/dir.c
> +++ b/fs/fuse/dir.c
> @@ -1098,7 +1098,7 @@ static int fuse_create(struct mnt_idmap *idmap, struct inode *dir,
> return fuse_mknod(idmap, dir, entry, mode, 0);
> }
>
> -static int fuse_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int fuse_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct fuse_conn *fc = get_fuse_conn(dir);
> diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
> index 4bd3adc20a47..8a07a3f18c05 100644
> --- a/fs/hugetlbfs/inode.c
> +++ b/fs/hugetlbfs/inode.c
> @@ -984,7 +984,7 @@ static int hugetlbfs_create(struct mnt_idmap *idmap,
> return hugetlbfs_mknod(idmap, dir, dentry, mode | S_IFREG, 0);
> }
>
> -static int hugetlbfs_tmpfile(struct mnt_idmap *idmap,
> +static int hugetlbfs_tmpfile(const struct mnt_idmap *idmap,
> struct inode *dir, struct file *file,
> umode_t mode)
> {
> diff --git a/fs/minix/namei.c b/fs/minix/namei.c
> index 5525ba367ed7..0575dea16a3b 100644
> --- a/fs/minix/namei.c
> +++ b/fs/minix/namei.c
> @@ -50,7 +50,7 @@ static int minix_mknod(struct mnt_idmap *idmap, struct inode *dir,
> return add_nondir(dentry, inode);
> }
>
> -static int minix_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int minix_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct inode *inode = minix_new_inode(dir, mode);
> diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
> index a022dc7781bf..4f3f1e2bafff 100644
> --- a/fs/overlayfs/dir.c
> +++ b/fs/overlayfs/dir.c
> @@ -1420,7 +1420,7 @@ static int ovl_dummy_open(struct inode *inode, struct file *file)
> return 0;
> }
>
> -static int ovl_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int ovl_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> int err;
> diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c
> index 0a88ede48e0a..fc9a79af4840 100644
> --- a/fs/ramfs/inode.c
> +++ b/fs/ramfs/inode.c
> @@ -163,7 +163,7 @@ static int ramfs_symlink(struct mnt_idmap *idmap, struct inode *dir,
> return error;
> }
>
> -static int ramfs_tmpfile(struct mnt_idmap *idmap,
> +static int ramfs_tmpfile(const struct mnt_idmap *idmap,
> struct inode *dir, struct file *file, umode_t mode)
> {
> struct inode *inode;
> diff --git a/fs/smb/client/cifsfs.h b/fs/smb/client/cifsfs.h
> index 0c85daa8386e..255f478d3a18 100644
> --- a/fs/smb/client/cifsfs.h
> +++ b/fs/smb/client/cifsfs.h
> @@ -57,7 +57,7 @@ int cifs_create(struct mnt_idmap *idmap, struct inode *dir,
> struct dentry *direntry, umode_t mode);
> int cifs_atomic_open(struct inode *dir, struct dentry *direntry,
> struct file *file, unsigned int oflags, umode_t mode);
> -int cifs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +int cifs_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode);
> struct dentry *cifs_lookup(struct inode *parent_dir_inode,
> struct dentry *direntry, unsigned int flags);
> diff --git a/fs/smb/client/dir.c b/fs/smb/client/dir.c
> index 6fa6d48fdfd3..56a3e1966257 100644
> --- a/fs/smb/client/dir.c
> +++ b/fs/smb/client/dir.c
> @@ -1059,7 +1059,7 @@ static int set_tmpfile_attr(const unsigned int xid, unsigned int oflags,
> * The initial dentry state is unhashed-negative. On success, dentry will
> * become unhashed-positive by calling d_instantiate().
> */
> -int cifs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +int cifs_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct dentry *dentry = file->f_path.dentry;
> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> index 23ec924162d6..0e1a4de9bb18 100644
> --- a/fs/ubifs/dir.c
> +++ b/fs/ubifs/dir.c
> @@ -440,7 +440,7 @@ static void unlock_2_inodes(struct inode *inode1, struct inode *inode2)
> mutex_unlock(&ubifs_inode(inode1)->ui_mutex);
> }
>
> -static int ubifs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int ubifs_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct dentry *dentry = file->f_path.dentry;
> diff --git a/fs/udf/namei.c b/fs/udf/namei.c
> index b90841ac0a40..8b5873b53324 100644
> --- a/fs/udf/namei.c
> +++ b/fs/udf/namei.c
> @@ -386,7 +386,7 @@ static int udf_create(struct mnt_idmap *idmap, struct inode *dir,
> return udf_add_nondir(dentry, inode);
> }
>
> -static int udf_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +static int udf_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct inode *inode = udf_new_inode(dir, mode);
> diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
> index 25d4d42fbc7f..06ca999d0927 100644
> --- a/fs/xfs/xfs_iops.c
> +++ b/fs/xfs/xfs_iops.c
> @@ -1250,7 +1250,7 @@ xfs_vn_fiemap(
>
> STATIC int
> xfs_vn_tmpfile(
> - struct mnt_idmap *idmap,
> + const struct mnt_idmap *idmap,
> struct inode *dir,
> struct file *file,
> umode_t mode)
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 9809e7c3aa0d..92161c224856 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -2024,7 +2024,7 @@ struct inode_operations {
> int (*atomic_open)(struct inode *, struct dentry *,
> struct file *, unsigned open_flag,
> umode_t create_mode);
> - int (*tmpfile) (struct mnt_idmap *, struct inode *,
> + int (*tmpfile) (const struct mnt_idmap *, struct inode *,
> struct file *, umode_t);
> struct posix_acl *(*get_acl)(const struct mnt_idmap *, struct dentry *,
> int);
> diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h
> index e8638f7d2245..470de3fb22c1 100644
> --- a/include/linux/lsm_hook_defs.h
> +++ b/include/linux/lsm_hook_defs.h
> @@ -122,7 +122,7 @@ LSM_HOOK(int, 0, inode_init_security_anon, struct inode *inode,
> const struct qstr *name, const struct inode *context_inode)
> LSM_HOOK(int, 0, inode_create, struct inode *dir, struct dentry *dentry,
> umode_t mode)
> -LSM_HOOK(void, LSM_RET_VOID, inode_post_create_tmpfile, struct mnt_idmap *idmap,
> +LSM_HOOK(void, LSM_RET_VOID, inode_post_create_tmpfile, const struct mnt_idmap *idmap,
> struct inode *inode)
> LSM_HOOK(int, 0, inode_link, struct dentry *old_dentry, struct inode *dir,
> struct dentry *new_dentry)
> diff --git a/include/linux/security.h b/include/linux/security.h
> index d5832750418a..b07a85e6aed4 100644
> --- a/include/linux/security.h
> +++ b/include/linux/security.h
> @@ -405,7 +405,7 @@ int security_inode_init_security_anon(struct inode *inode,
> const struct qstr *name,
> const struct inode *context_inode);
> int security_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode);
> -void security_inode_post_create_tmpfile(struct mnt_idmap *idmap,
> +void security_inode_post_create_tmpfile(const struct mnt_idmap *idmap,
> struct inode *inode);
> int security_inode_link(struct dentry *old_dentry, struct inode *dir,
> struct dentry *new_dentry);
> @@ -910,7 +910,7 @@ static inline int security_inode_create(struct inode *dir,
> }
>
> static inline void
> -security_inode_post_create_tmpfile(struct mnt_idmap *idmap, struct inode *inode)
> +security_inode_post_create_tmpfile(const struct mnt_idmap *idmap, struct inode *inode)
> { }
>
> static inline int security_inode_link(struct dentry *old_dentry,
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 097699ea2762..a107940660a8 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -3857,7 +3857,7 @@ shmem_mknod(struct mnt_idmap *idmap, struct inode *dir,
> }
>
> static int
> -shmem_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
> +shmem_tmpfile(const struct mnt_idmap *idmap, struct inode *dir,
> struct file *file, umode_t mode)
> {
> struct inode *inode;
> diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> index 8d9c92dc8825..72ecacda7528 100644
> --- a/security/integrity/ima/ima_main.c
> +++ b/security/integrity/ima/ima_main.c
> @@ -846,7 +846,7 @@ EXPORT_SYMBOL_GPL(ima_inode_hash);
> * Skip calling process_measurement(), but indicate which newly, created
> * tmpfiles are in policy.
> */
> -static void ima_post_create_tmpfile(struct mnt_idmap *idmap,
> +static void ima_post_create_tmpfile(const struct mnt_idmap *idmap,
> struct inode *inode)
>
> {
> diff --git a/security/security.c b/security/security.c
> index e3a14c958bc4..4e4ef1c496ad 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -1638,7 +1638,7 @@ EXPORT_SYMBOL_GPL(security_inode_create);
> *
> * Update inode security data after a tmpfile has been created.
> */
> -void security_inode_post_create_tmpfile(struct mnt_idmap *idmap,
> +void security_inode_post_create_tmpfile(const struct mnt_idmap *idmap,
> struct inode *inode)
> {
> if (unlikely(IS_PRIVATE(inode)))
>
> --
> 2.53.0
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR