On Tue 01-09-26 14:14:37, 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) <[email protected]>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <[email protected]>

                                                                Honza

> ---
>  Documentation/filesystems/locking.rst |  2 +-
>  Documentation/filesystems/vfs.rst     |  2 +-
>  fs/afs/internal.h                     |  2 +-
>  fs/afs/security.c                     |  2 +-
>  fs/attr.c                             |  2 +-
>  fs/autofs/root.c                      |  4 ++--
>  fs/bad_inode.c                        |  2 +-
>  fs/btrfs/inode.c                      |  2 +-
>  fs/btrfs/ioctl.c                      |  2 +-
>  fs/ceph/inode.c                       |  2 +-
>  fs/ceph/super.h                       |  2 +-
>  fs/coda/coda_linux.h                  |  2 +-
>  fs/coda/dir.c                         |  2 +-
>  fs/coda/pioctl.c                      |  4 ++--
>  fs/ecryptfs/inode.c                   |  2 +-
>  fs/failfs.c                           |  2 +-
>  fs/fuse/dir.c                         |  2 +-
>  fs/gfs2/inode.c                       |  2 +-
>  fs/gfs2/inode.h                       |  2 +-
>  fs/hostfs/hostfs_kern.c               |  2 +-
>  fs/internal.h                         |  2 +-
>  fs/kernfs/inode.c                     |  2 +-
>  fs/kernfs/kernfs-internal.h           |  2 +-
>  fs/namei.c                            | 22 +++++++++++-----------
>  fs/nfs/dir.c                          |  2 +-
>  fs/nilfs2/inode.c                     |  2 +-
>  fs/nilfs2/nilfs.h                     |  2 +-
>  fs/ocfs2/file.c                       |  2 +-
>  fs/ocfs2/file.h                       |  2 +-
>  fs/orangefs/inode.c                   |  2 +-
>  fs/orangefs/orangefs-kernel.h         |  2 +-
>  fs/overlayfs/inode.c                  |  2 +-
>  fs/overlayfs/overlayfs.h              |  2 +-
>  fs/proc/base.c                        |  4 ++--
>  fs/proc/fd.c                          |  4 ++--
>  fs/proc/fd.h                          |  2 +-
>  fs/proc/proc_sysctl.c                 |  2 +-
>  fs/smb/client/cifsfs.c                |  2 +-
>  fs/smb/server/vfs.c                   |  2 +-
>  fs/smb/server/vfs.h                   |  2 +-
>  fs/tracefs/inode.c                    |  2 +-
>  include/linux/fs.h                    |  8 ++++----
>  include/linux/nfs_fs.h                |  2 +-
>  security/selinux/selinuxfs.c          |  2 +-
>  44 files changed, 61 insertions(+), 61 deletions(-)
> 
> diff --git a/Documentation/filesystems/locking.rst 
> b/Documentation/filesystems/locking.rst
> index 844d65eb47a5..5af7d3bfcd5e 100644
> --- a/Documentation/filesystems/locking.rst
> +++ b/Documentation/filesystems/locking.rst
> @@ -74,7 +74,7 @@ prototypes::
>       int (*readlink) (struct dentry *, char __user *,int);
>       const char *(*get_link) (struct dentry *, struct inode *, struct 
> delayed_call *);
>       void (*truncate) (struct inode *);
> -     int (*permission) (struct mnt_idmap *, struct inode *, int, unsigned 
> int);
> +     int (*permission) (const struct mnt_idmap *, 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) (struct mnt_idmap *, const struct path *, struct kstat 
> *, u32, unsigned int);
> diff --git a/Documentation/filesystems/vfs.rst 
> b/Documentation/filesystems/vfs.rst
> index d3a93eec3945..b7e476f70185 100644
> --- a/Documentation/filesystems/vfs.rst
> +++ b/Documentation/filesystems/vfs.rst
> @@ -428,7 +428,7 @@ As of kernel 2.6.22, the following members are defined:
>               int (*readlink) (struct dentry *, char __user *,int);
>               const char *(*get_link) (struct dentry *, struct inode *,
>                                        struct delayed_call *);
> -             int (*permission) (struct mnt_idmap *, struct inode *, int);
> +             int (*permission) (const struct mnt_idmap *, 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 mnt_idmap *, const struct path *, struct 
> kstat *, u32, unsigned int);
> diff --git a/fs/afs/internal.h b/fs/afs/internal.h
> index 290873bac89b..e772da2a15f2 100644
> --- a/fs/afs/internal.h
> +++ b/fs/afs/internal.h
> @@ -1530,7 +1530,7 @@ extern void afs_cache_permit(struct afs_vnode *, struct 
> key *, unsigned int,
>  extern struct key *afs_request_key(struct afs_cell *);
>  extern struct key *afs_request_key_rcu(struct afs_cell *);
>  extern int afs_check_permit(struct afs_vnode *, struct key *, afs_access_t 
> *);
> -extern int afs_permission(struct mnt_idmap *, struct inode *, int);
> +extern int afs_permission(const struct mnt_idmap *, struct inode *, int);
>  extern void __exit afs_clean_up_permit_cache(void);
>  
>  /*
> diff --git a/fs/afs/security.c b/fs/afs/security.c
> index 6d00d62a65ed..fd040f7c6766 100644
> --- a/fs/afs/security.c
> +++ b/fs/afs/security.c
> @@ -428,7 +428,7 @@ int afs_check_permit(struct afs_vnode *vnode, struct key 
> *key,
>   * - AFS ACLs are attached to directories only, and a file is controlled by 
> its
>   *   parent directory's ACL
>   */
> -int afs_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int afs_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                  int mask)
>  {
>       struct afs_vnode *vnode = AFS_FS_I(inode);
> diff --git a/fs/attr.c b/fs/attr.c
> index 23f1347ff240..c5033afe04bf 100644
> --- a/fs/attr.c
> +++ b/fs/attr.c
> @@ -369,7 +369,7 @@ void setattr_copy(const struct mnt_idmap *idmap, struct 
> inode *inode,
>  }
>  EXPORT_SYMBOL(setattr_copy);
>  
> -int may_setattr(struct mnt_idmap *idmap, struct inode *inode,
> +int may_setattr(const struct mnt_idmap *idmap, struct inode *inode,
>               unsigned int ia_valid)
>  {
>       int error;
> diff --git a/fs/autofs/root.c b/fs/autofs/root.c
> index b36439f4521e..3158df448025 100644
> --- a/fs/autofs/root.c
> +++ b/fs/autofs/root.c
> @@ -11,7 +11,7 @@
>  
>  #include "autofs_i.h"
>  
> -static int autofs_dir_permission(struct mnt_idmap *, struct inode *, int);
> +static int autofs_dir_permission(const struct mnt_idmap *, struct inode *, 
> int);
>  static int autofs_dir_symlink(struct mnt_idmap *, struct inode *,
>                             struct dentry *, const char *);
>  static int autofs_dir_unlink(struct inode *, struct dentry *);
> @@ -552,7 +552,7 @@ static struct dentry *autofs_lookup(struct inode *dir,
>       return NULL;
>  }
>  
> -static int autofs_dir_permission(struct mnt_idmap *idmap,
> +static int autofs_dir_permission(const struct mnt_idmap *idmap,
>                                struct inode *inode, int mask)
>  {
>       if (mask & MAY_WRITE) {
> diff --git a/fs/bad_inode.c b/fs/bad_inode.c
> index 486c40f73e51..c2cfa9395bc9 100644
> --- a/fs/bad_inode.c
> +++ b/fs/bad_inode.c
> @@ -89,7 +89,7 @@ static int bad_inode_readlink(struct dentry *dentry, char 
> __user *buffer,
>       return -EIO;
>  }
>  
> -static int bad_inode_permission(struct mnt_idmap *idmap,
> +static int bad_inode_permission(const struct mnt_idmap *idmap,
>                               struct inode *inode, int mask)
>  {
>       return -EIO;
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index d5a78d9027e2..7bf38f069116 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -9375,7 +9375,7 @@ int btrfs_prealloc_file_range_trans(struct inode *inode,
>   * we are marking them with IOP_FASTPERM_MAY_EXEC, allowing path lookup to
>   * elide calls here.
>   */
> -static int btrfs_permission(struct mnt_idmap *idmap,
> +static int btrfs_permission(const struct mnt_idmap *idmap,
>                           struct inode *inode, int mask)
>  {
>       struct btrfs_root *root = BTRFS_I(inode)->root;
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index 8eacdc2ee4de..9d6302547b12 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -1726,7 +1726,7 @@ static noinline int btrfs_search_path_in_tree(struct 
> btrfs_root *root, u64 dirid
>       return 0;
>  }
>  
> -static int btrfs_search_path_in_tree_user(struct mnt_idmap *idmap,
> +static int btrfs_search_path_in_tree_user(const struct mnt_idmap *idmap,
>                               struct inode *inode,
>                               struct btrfs_ioctl_ino_lookup_user_args *args)
>  {
> diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
> index 3921b601ad59..b8527f67e3f0 100644
> --- a/fs/ceph/inode.c
> +++ b/fs/ceph/inode.c
> @@ -3098,7 +3098,7 @@ int ceph_do_getvxattr(struct inode *inode, const char 
> *name, void *value,
>   * Check inode permissions.  We verify we have a valid value for
>   * the AUTH cap, then call the generic handler.
>   */
> -int ceph_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int ceph_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                   int mask)
>  {
>       int err;
> diff --git a/fs/ceph/super.h b/fs/ceph/super.h
> index e9a9d5737c80..ef9861797eb2 100644
> --- a/fs/ceph/super.h
> +++ b/fs/ceph/super.h
> @@ -1166,7 +1166,7 @@ static inline int ceph_do_getattr(struct inode *inode, 
> int mask, bool force)
>  {
>       return __ceph_do_getattr(inode, NULL, mask, force);
>  }
> -extern int ceph_permission(struct mnt_idmap *idmap,
> +extern int ceph_permission(const struct mnt_idmap *idmap,
>                          struct inode *inode, int mask);
>  
>  struct ceph_iattr {
> diff --git a/fs/coda/coda_linux.h b/fs/coda/coda_linux.h
> index dd6277d87afb..5ee6cedd3865 100644
> --- a/fs/coda/coda_linux.h
> +++ b/fs/coda/coda_linux.h
> @@ -46,7 +46,7 @@ extern const struct file_operations coda_ioctl_operations;
>  /* operations shared over more than one file */
>  int coda_open(struct inode *i, struct file *f);
>  int coda_release(struct inode *i, struct file *f);
> -int coda_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int coda_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                   int mask);
>  int coda_revalidate_inode(struct inode *);
>  int coda_getattr(struct mnt_idmap *, const struct path *, struct kstat *,
> diff --git a/fs/coda/dir.c b/fs/coda/dir.c
> index 67148edfadee..e8db5960b61b 100644
> --- a/fs/coda/dir.c
> +++ b/fs/coda/dir.c
> @@ -73,7 +73,7 @@ static struct dentry *coda_lookup(struct inode *dir, struct 
> dentry *entry, unsig
>  }
>  
>  
> -int coda_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int coda_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                   int mask)
>  {
>       int error;
> diff --git a/fs/coda/pioctl.c b/fs/coda/pioctl.c
> index 36e35c15561a..c457e9bab94b 100644
> --- a/fs/coda/pioctl.c
> +++ b/fs/coda/pioctl.c
> @@ -24,7 +24,7 @@
>  #include "coda_linux.h"
>  
>  /* pioctl ops */
> -static int coda_ioctl_permission(struct mnt_idmap *idmap,
> +static int coda_ioctl_permission(const struct mnt_idmap *idmap,
>                                struct inode *inode, int mask);
>  static long coda_pioctl(struct file *filp, unsigned int cmd,
>                       unsigned long user_data);
> @@ -41,7 +41,7 @@ const struct file_operations coda_ioctl_operations = {
>  };
>  
>  /* the coda pioctl inode ops */
> -static int coda_ioctl_permission(struct mnt_idmap *idmap,
> +static int coda_ioctl_permission(const struct mnt_idmap *idmap,
>                                struct inode *inode, int mask)
>  {
>       return (mask & MAY_EXEC) ? -EACCES : 0;
> diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
> index 525297c7ebd8..6dafca14ca78 100644
> --- a/fs/ecryptfs/inode.c
> +++ b/fs/ecryptfs/inode.c
> @@ -849,7 +849,7 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t 
> new_length)
>  }
>  
>  static int
> -ecryptfs_permission(struct mnt_idmap *idmap, struct inode *inode,
> +ecryptfs_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                   int mask)
>  {
>       return inode_permission(&nop_mnt_idmap,
> diff --git a/fs/failfs.c b/fs/failfs.c
> index 66a36da3d236..cec6cad99eb2 100644
> --- a/fs/failfs.c
> +++ b/fs/failfs.c
> @@ -22,7 +22,7 @@ bool failfs_mnt(const struct vfsmount *mnt)
>       return mnt->mnt_sb == failfs_root_path.mnt->mnt_sb;
>  }
>  
> -static int failfs_permission(struct mnt_idmap *idmap, struct inode *inode,
> +static int failfs_permission(const struct mnt_idmap *idmap, struct inode 
> *inode,
>                            int mask)
>  {
>       return -EOPNOTSUPP;
> diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
> index 7a204f55ca84..4b87973c727d 100644
> --- a/fs/fuse/dir.c
> +++ b/fs/fuse/dir.c
> @@ -1763,7 +1763,7 @@ static int fuse_perm_getattr(struct inode *inode, int 
> mask)
>   * access request is sent.  Execute permission is still checked
>   * locally based on file mode.
>   */
> -static int fuse_permission(struct mnt_idmap *idmap,
> +static int fuse_permission(const struct mnt_idmap *idmap,
>                          struct inode *inode, int mask)
>  {
>       struct fuse_conn *fc = get_fuse_conn(inode);
> diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
> index f361876c5583..1b1d22abe1d4 100644
> --- a/fs/gfs2/inode.c
> +++ b/fs/gfs2/inode.c
> @@ -1963,7 +1963,7 @@ static const char *gfs2_get_link(struct dentry *dentry,
>   * Returns: errno
>   */
>  
> -int gfs2_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int gfs2_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                   int mask)
>  {
>       int may_not_block = mask & MAY_NOT_BLOCK;
> diff --git a/fs/gfs2/inode.h b/fs/gfs2/inode.h
> index 2fcd96dd1361..373473eb091c 100644
> --- a/fs/gfs2/inode.h
> +++ b/fs/gfs2/inode.h
> @@ -97,7 +97,7 @@ int gfs2_dinode_dealloc(struct gfs2_inode *ip);
>  
>  struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
>                          int is_root);
> -int gfs2_permission(struct mnt_idmap *idmap,
> +int gfs2_permission(const struct mnt_idmap *idmap,
>                   struct inode *inode, int mask);
>  struct inode *gfs2_lookup_meta(struct inode *dip, const char *name);
>  void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);
> diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
> index 7add056d47d8..0d5c5f11f913 100644
> --- a/fs/hostfs/hostfs_kern.c
> +++ b/fs/hostfs/hostfs_kern.c
> @@ -774,7 +774,7 @@ static int hostfs_rename2(struct mnt_idmap *idmap,
>       return err;
>  }
>  
> -static int hostfs_permission(struct mnt_idmap *idmap,
> +static int hostfs_permission(const struct mnt_idmap *idmap,
>                            struct inode *ino, int desired)
>  {
>       char *name;
> diff --git a/fs/internal.h b/fs/internal.h
> index 161b0cafe17f..a502b1fbacd2 100644
> --- a/fs/internal.h
> +++ b/fs/internal.h
> @@ -55,7 +55,7 @@ extern int filename_lookup(int dfd, struct filename *name, 
> unsigned flags,
>                          struct path *path, const struct path *root);
>  int filename_rmdir(int dfd, struct filename *name);
>  int filename_unlinkat(int dfd, struct filename *name);
> -int may_linkat(struct mnt_idmap *idmap, const struct path *link);
> +int may_linkat(const struct mnt_idmap *idmap, const struct path *link);
>  int filename_renameat2(int olddfd, struct filename *oldname, int newdfd,
>                struct filename *newname, unsigned int flags);
>  int filename_mkdirat(int dfd, struct filename *name, umode_t mode);
> diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c
> index 237dcdd73fc2..d53d104e54d5 100644
> --- a/fs/kernfs/inode.c
> +++ b/fs/kernfs/inode.c
> @@ -272,7 +272,7 @@ void kernfs_evict_inode(struct inode *inode)
>       kernfs_put(kn);
>  }
>  
> -int kernfs_iop_permission(struct mnt_idmap *idmap,
> +int kernfs_iop_permission(const struct mnt_idmap *idmap,
>                         struct inode *inode, int mask)
>  {
>       struct kernfs_node *kn;
> diff --git a/fs/kernfs/kernfs-internal.h b/fs/kernfs/kernfs-internal.h
> index aa784b540b36..0f6f412213f6 100644
> --- a/fs/kernfs/kernfs-internal.h
> +++ b/fs/kernfs/kernfs-internal.h
> @@ -171,7 +171,7 @@ extern struct kmem_cache *kernfs_node_cache, 
> *kernfs_iattrs_cache;
>   */
>  extern const struct xattr_handler * const kernfs_xattr_handlers[];
>  void kernfs_evict_inode(struct inode *inode);
> -int kernfs_iop_permission(struct mnt_idmap *idmap,
> +int kernfs_iop_permission(const struct mnt_idmap *idmap,
>                         struct inode *inode, int mask);
>  int kernfs_iop_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
>                      struct iattr *iattr);
> diff --git a/fs/namei.c b/fs/namei.c
> index db82daec3646..f5e00ae41ed4 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -371,7 +371,7 @@ struct filename *complete_getname(struct delayed_filename 
> *v)
>   * On non-idmapped mounts or if permission checking is to be performed on the
>   * raw inode simply pass @nop_mnt_idmap.
>   */
> -static int check_acl(struct mnt_idmap *idmap,
> +static int check_acl(const struct mnt_idmap *idmap,
>                    struct inode *inode, int mask)
>  {
>  #ifdef CONFIG_FS_POSIX_ACL
> @@ -435,7 +435,7 @@ static inline bool no_acl_inode(struct inode *inode)
>   * On non-idmapped mounts or if permission checking is to be performed on the
>   * raw inode simply pass @nop_mnt_idmap.
>   */
> -static int acl_permission_check(struct mnt_idmap *idmap,
> +static int acl_permission_check(const struct mnt_idmap *idmap,
>                               struct inode *inode, int mask)
>  {
>       unsigned int mode = inode->i_mode;
> @@ -518,7 +518,7 @@ static int acl_permission_check(struct mnt_idmap *idmap,
>   * On non-idmapped mounts or if permission checking is to be performed on the
>   * raw inode simply pass @nop_mnt_idmap.
>   */
> -int generic_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int generic_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                      int mask)
>  {
>       int ret;
> @@ -575,7 +575,7 @@ EXPORT_SYMBOL(generic_permission);
>   * flag in inode->i_opflags, that says "this has not special
>   * permission function, use the fast case".
>   */
> -static inline int do_inode_permission(struct mnt_idmap *idmap,
> +static inline int do_inode_permission(const struct mnt_idmap *idmap,
>                                     struct inode *inode, int mask)
>  {
>       if (unlikely(!(inode->i_opflags & IOP_FASTPERM))) {
> @@ -625,7 +625,7 @@ static int sb_permission(struct super_block *sb, struct 
> inode *inode, int mask)
>   *
>   * When checking for MAY_APPEND, MAY_WRITE must also be set in @mask.
>   */
> -int inode_permission(struct mnt_idmap *idmap,
> +int inode_permission(const struct mnt_idmap *idmap,
>                    struct inode *inode, int mask)
>  {
>       int retval;
> @@ -680,7 +680,7 @@ EXPORT_SYMBOL(inode_permission);
>   * on IOP_FASTPERM can still get the optimization if they set 
> IOP_FASTPERM_MAY_EXEC
>   * on their directory inodes.
>   */
> -static __always_inline int lookup_inode_permission_may_exec(struct mnt_idmap 
> *idmap,
> +static __always_inline int lookup_inode_permission_may_exec(const struct 
> mnt_idmap *idmap,
>       struct inode *inode, int mask)
>  {
>       /* Lookup already checked this to return -ENOTDIR */
> @@ -1314,7 +1314,7 @@ static inline int may_follow_link(struct nameidata *nd, 
> const struct inode *inod
>   *
>   * Otherwise returns true.
>   */
> -static bool safe_hardlink_source(struct mnt_idmap *idmap,
> +static bool safe_hardlink_source(const struct mnt_idmap *idmap,
>                                struct inode *inode)
>  {
>       umode_t mode = inode->i_mode;
> @@ -1357,7 +1357,7 @@ static bool safe_hardlink_source(struct mnt_idmap 
> *idmap,
>   *
>   * Returns 0 if successful, -ve on error.
>   */
> -int may_linkat(struct mnt_idmap *idmap, const struct path *link)
> +int may_linkat(const struct mnt_idmap *idmap, const struct path *link)
>  {
>       struct inode *inode = link->dentry->d_inode;
>  
> @@ -1952,7 +1952,7 @@ static struct dentry *lookup_slow_killable(const struct 
> qstr *name,
>       return res;
>  }
>  
> -static inline int may_lookup(struct mnt_idmap *idmap,
> +static inline int may_lookup(const struct mnt_idmap *idmap,
>                            struct nameidata *restrict nd)
>  {
>       int err, mask;
> @@ -4228,7 +4228,7 @@ bool may_open_dev(const struct path *path)
>               !(path->mnt->mnt_sb->s_iflags & SB_I_NODEV);
>  }
>  
> -static int may_open(struct mnt_idmap *idmap, const struct path *path,
> +static int may_open(const struct mnt_idmap *idmap, const struct path *path,
>                   int acc_mode, int flag)
>  {
>       struct dentry *dentry = path->dentry;
> @@ -4312,7 +4312,7 @@ static inline int open_to_namei_flags(int flag)
>       return flag;
>  }
>  
> -static int may_o_create(struct mnt_idmap *idmap,
> +static int may_o_create(const struct mnt_idmap *idmap,
>                       const struct path *dir, struct dentry *dentry,
>                       umode_t mode)
>  {
> diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
> index 49394123bd09..7574bc2fb677 100644
> --- a/fs/nfs/dir.c
> +++ b/fs/nfs/dir.c
> @@ -3393,7 +3393,7 @@ static int nfs_execute_ok(struct inode *inode, int mask)
>       return ret;
>  }
>  
> -int nfs_permission(struct mnt_idmap *idmap,
> +int nfs_permission(const struct mnt_idmap *idmap,
>                  struct inode *inode,
>                  int mask)
>  {
> diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
> index 34e6096069ad..9342f651bf9b 100644
> --- a/fs/nilfs2/inode.c
> +++ b/fs/nilfs2/inode.c
> @@ -943,7 +943,7 @@ int nilfs_setattr(struct mnt_idmap *idmap, struct dentry 
> *dentry,
>       return err;
>  }
>  
> -int nilfs_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int nilfs_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                    int mask)
>  {
>       struct nilfs_root *root = NILFS_I(inode)->i_root;
> diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h
> index 4fc42d3787a4..0eaa191f70b8 100644
> --- a/fs/nilfs2/nilfs.h
> +++ b/fs/nilfs2/nilfs.h
> @@ -302,7 +302,7 @@ extern void nilfs_evict_inode(struct inode *);
>  extern int nilfs_setattr(struct mnt_idmap *, struct dentry *,
>                        struct iattr *);
>  extern void nilfs_write_failed(struct address_space *mapping, loff_t to);
> -int nilfs_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int nilfs_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                    int mask);
>  int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh);
>  extern int nilfs_inode_dirty(struct inode *);
> diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
> index d6e977ba6565..24bbf607546c 100644
> --- a/fs/ocfs2/file.c
> +++ b/fs/ocfs2/file.c
> @@ -1349,7 +1349,7 @@ int ocfs2_getattr(struct mnt_idmap *idmap, const struct 
> path *path,
>       return err;
>  }
>  
> -int ocfs2_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int ocfs2_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                    int mask)
>  {
>       int ret, had_lock;
> diff --git a/fs/ocfs2/file.h b/fs/ocfs2/file.h
> index 41e65e45a9f3..08e4d6796531 100644
> --- a/fs/ocfs2/file.h
> +++ b/fs/ocfs2/file.h
> @@ -54,7 +54,7 @@ int ocfs2_setattr(struct mnt_idmap *idmap, struct dentry 
> *dentry,
>                 struct iattr *attr);
>  int ocfs2_getattr(struct mnt_idmap *idmap, const struct path *path,
>                 struct kstat *stat, u32 request_mask, unsigned int flags);
> -int ocfs2_permission(struct mnt_idmap *idmap,
> +int ocfs2_permission(const struct mnt_idmap *idmap,
>                    struct inode *inode,
>                    int mask);
>  
> diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c
> index cd3273c88e03..8e6eeec501bc 100644
> --- a/fs/orangefs/inode.c
> +++ b/fs/orangefs/inode.c
> @@ -872,7 +872,7 @@ int orangefs_getattr(struct mnt_idmap *idmap, const 
> struct path *path,
>       return ret;
>  }
>  
> -int orangefs_permission(struct mnt_idmap *idmap,
> +int orangefs_permission(const struct mnt_idmap *idmap,
>                       struct inode *inode, int mask)
>  {
>       int ret;
> diff --git a/fs/orangefs/orangefs-kernel.h b/fs/orangefs/orangefs-kernel.h
> index 1451fc2c1917..c582ceffb26e 100644
> --- a/fs/orangefs/orangefs-kernel.h
> +++ b/fs/orangefs/orangefs-kernel.h
> @@ -357,7 +357,7 @@ int orangefs_setattr(struct mnt_idmap *, struct dentry *, 
> struct iattr *);
>  int orangefs_getattr(struct mnt_idmap *idmap, const struct path *path,
>                    struct kstat *stat, u32 request_mask, unsigned int flags);
>  
> -int orangefs_permission(struct mnt_idmap *idmap,
> +int orangefs_permission(const struct mnt_idmap *idmap,
>                       struct inode *inode, int mask);
>  
>  int orangefs_update_time(struct inode *inode, enum fs_update_time type,
> diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
> index 0364e7d08ad7..1166381f1852 100644
> --- a/fs/overlayfs/inode.c
> +++ b/fs/overlayfs/inode.c
> @@ -303,7 +303,7 @@ int ovl_getattr(struct mnt_idmap *idmap, const struct 
> path *path,
>       return err;
>  }
>  
> -int ovl_permission(struct mnt_idmap *idmap,
> +int ovl_permission(const struct mnt_idmap *idmap,
>                  struct inode *inode, int mask)
>  {
>       struct inode *upperinode = ovl_inode_upper(inode);
> diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h
> index 6508f30aaaca..513ba93c7d1b 100644
> --- a/fs/overlayfs/overlayfs.h
> +++ b/fs/overlayfs/overlayfs.h
> @@ -802,7 +802,7 @@ int ovl_set_nlink_lower(struct dentry *dentry);
>  unsigned int ovl_get_nlink(struct ovl_fs *ofs, struct dentry *lowerdentry,
>                          struct dentry *upperdentry,
>                          unsigned int fallback);
> -int ovl_permission(struct mnt_idmap *idmap, struct inode *inode,
> +int ovl_permission(const struct mnt_idmap *idmap, struct inode *inode,
>                  int mask);
>  
>  #ifdef CONFIG_FS_POSIX_ACL
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index 6a39de424f62..8dc43c846298 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -743,7 +743,7 @@ static bool has_pid_permissions(struct proc_fs_info 
> *fs_info,
>  }
>  
>  
> -static int proc_pid_permission(struct mnt_idmap *idmap,
> +static int proc_pid_permission(const struct mnt_idmap *idmap,
>                              struct inode *inode, int mask)
>  {
>       struct proc_fs_info *fs_info = proc_sb_info(inode->i_sb);
> @@ -3607,7 +3607,7 @@ int proc_pid_readdir(struct file *file, struct 
> dir_context *ctx)
>   * This function makes sure that the node is always accessible for members of
>   * same thread group.
>   */
> -static int proc_tid_comm_permission(struct mnt_idmap *idmap,
> +static int proc_tid_comm_permission(const struct mnt_idmap *idmap,
>                                   struct inode *inode, int mask)
>  {
>       bool is_same_tgroup;
> diff --git a/fs/proc/fd.c b/fs/proc/fd.c
> index 0f9a1556f2a3..0653bceb730d 100644
> --- a/fs/proc/fd.c
> +++ b/fs/proc/fd.c
> @@ -82,7 +82,7 @@ static int seq_fdinfo_open(struct inode *inode, struct file 
> *file)
>   * that the current task has PTRACE_MODE_READ in addition to the normal
>   * POSIX-like checks.
>   */
> -static int proc_fdinfo_permission(struct mnt_idmap *idmap, struct inode 
> *inode,
> +static int proc_fdinfo_permission(const struct mnt_idmap *idmap, struct 
> inode *inode,
>                                 int mask)
>  {
>       bool allowed = false;
> @@ -323,7 +323,7 @@ static struct dentry *proc_lookupfd(struct inode *dir, 
> struct dentry *dentry,
>   * /proc/pid/fd needs a special permission handler so that a process can 
> still
>   * access /proc/self/fd after it has executed a setuid().
>   */
> -int proc_fd_permission(struct mnt_idmap *idmap,
> +int proc_fd_permission(const struct mnt_idmap *idmap,
>                      struct inode *inode, int mask)
>  {
>       struct task_struct *p;
> diff --git a/fs/proc/fd.h b/fs/proc/fd.h
> index 7e7265f7e06f..77f2e4f38592 100644
> --- a/fs/proc/fd.h
> +++ b/fs/proc/fd.h
> @@ -10,7 +10,7 @@ extern const struct inode_operations 
> proc_fd_inode_operations;
>  extern const struct file_operations proc_fdinfo_operations;
>  extern const struct inode_operations proc_fdinfo_inode_operations;
>  
> -extern int proc_fd_permission(struct mnt_idmap *idmap,
> +extern int proc_fd_permission(const struct mnt_idmap *idmap,
>                             struct inode *inode, int mask);
>  
>  static inline unsigned int proc_fd(struct inode *inode)
> diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
> index 04a382178c65..5315d891f244 100644
> --- a/fs/proc/proc_sysctl.c
> +++ b/fs/proc/proc_sysctl.c
> @@ -788,7 +788,7 @@ static int proc_sys_readdir(struct file *file, struct 
> dir_context *ctx)
>       return 0;
>  }
>  
> -static int proc_sys_permission(struct mnt_idmap *idmap,
> +static int proc_sys_permission(const struct mnt_idmap *idmap,
>                              struct inode *inode, int mask)
>  {
>       /*
> diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c
> index 7ecd70efdfea..b1ecbcfb154e 100644
> --- a/fs/smb/client/cifsfs.c
> +++ b/fs/smb/client/cifsfs.c
> @@ -402,7 +402,7 @@ static long cifs_fallocate(struct file *file, int mode, 
> loff_t off, loff_t len)
>       return rc;
>  }
>  
> -static int cifs_permission(struct mnt_idmap *idmap,
> +static int cifs_permission(const struct mnt_idmap *idmap,
>                          struct inode *inode, int mask)
>  {
>       unsigned int sbflags = cifs_sb_flags(CIFS_SB(inode));
> diff --git a/fs/smb/server/vfs.c b/fs/smb/server/vfs.c
> index cb52dce113b9..0361de56edc2 100644
> --- a/fs/smb/server/vfs.c
> +++ b/fs/smb/server/vfs.c
> @@ -115,7 +115,7 @@ static int ksmbd_vfs_path_lookup(struct 
> ksmbd_share_config *share_conf,
>       return 0;
>  }
>  
> -void ksmbd_vfs_query_maximal_access(struct mnt_idmap *idmap,
> +void ksmbd_vfs_query_maximal_access(const struct mnt_idmap *idmap,
>                                  struct dentry *dentry, __le32 *daccess)
>  {
>       *daccess = cpu_to_le32(FILE_READ_ATTRIBUTES | READ_CONTROL);
> diff --git a/fs/smb/server/vfs.h b/fs/smb/server/vfs.h
> index 9f4b003166e5..9c8b5b288926 100644
> --- a/fs/smb/server/vfs.h
> +++ b/fs/smb/server/vfs.h
> @@ -74,7 +74,7 @@ struct ksmbd_kstat {
>  };
>  
>  int ksmbd_vfs_lock_parent(struct dentry *parent, struct dentry *child);
> -void ksmbd_vfs_query_maximal_access(struct mnt_idmap *idmap,
> +void ksmbd_vfs_query_maximal_access(const struct mnt_idmap *idmap,
>                                  struct dentry *dentry, __le32 *daccess);
>  int ksmbd_vfs_create(struct ksmbd_work *work, const char *name, umode_t 
> mode);
>  int ksmbd_vfs_mkdir(struct ksmbd_work *work, const char *name, umode_t mode);
> diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
> index f3d6188a3b7b..7cf32384ad50 100644
> --- a/fs/tracefs/inode.c
> +++ b/fs/tracefs/inode.c
> @@ -189,7 +189,7 @@ static void set_tracefs_inode_owner(struct inode *inode)
>               inode->i_gid = gid;
>  }
>  
> -static int tracefs_permission(struct mnt_idmap *idmap,
> +static int tracefs_permission(const struct mnt_idmap *idmap,
>                             struct inode *inode, int mask)
>  {
>       set_tracefs_inode_owner(inode);
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 91a23c8dbbf6..f815594dd8cb 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1994,7 +1994,7 @@ enum fs_update_time {
>  struct inode_operations {
>       struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned 
> int);
>       const char * (*get_link) (struct dentry *, struct inode *, struct 
> delayed_call *);
> -     int (*permission) (struct mnt_idmap *, struct inode *, int);
> +     int (*permission) (const struct mnt_idmap *, struct inode *, int);
>       struct posix_acl * (*get_inode_acl)(struct inode *, int, bool);
>  
>       int (*readlink) (struct dentry *, char __user *,int);
> @@ -2709,8 +2709,8 @@ static inline int bmap(struct inode *inode,  sector_t 
> *block)
>  
>  int notify_change(struct mnt_idmap *, struct dentry *,
>                 struct iattr *, struct delegated_inode *);
> -int inode_permission(struct mnt_idmap *, struct inode *, int);
> -int generic_permission(struct mnt_idmap *, struct inode *, int);
> +int inode_permission(const struct mnt_idmap *, struct inode *, int);
> +int generic_permission(const struct mnt_idmap *, struct inode *, int);
>  static inline int file_permission(struct file *file, int mask)
>  {
>       return inode_permission(file_mnt_idmap(file),
> @@ -3397,7 +3397,7 @@ static inline bool 
> generic_ci_validate_strict_name(struct inode *dir,
>  }
>  #endif
>  
> -int may_setattr(struct mnt_idmap *idmap, struct inode *inode,
> +int may_setattr(const struct mnt_idmap *idmap, struct inode *inode,
>               unsigned int ia_valid);
>  int setattr_prepare(struct mnt_idmap *, struct dentry *, struct iattr *);
>  extern int inode_newsize_ok(const struct inode *, loff_t offset);
> diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
> index b85a73ae7919..b2828ea03abe 100644
> --- a/include/linux/nfs_fs.h
> +++ b/include/linux/nfs_fs.h
> @@ -441,7 +441,7 @@ 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);
> -extern int nfs_permission(struct mnt_idmap *, struct inode *, int);
> +extern int nfs_permission(const struct mnt_idmap *, struct inode *, int);
>  extern int nfs_open(struct inode *, struct file *);
>  extern int nfs_attribute_cache_expired(struct inode *inode);
>  extern int nfs_revalidate_inode(struct inode *inode, unsigned long flags);
> diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
> index c7d91476971c..a0be7f1b5993 100644
> --- a/security/selinux/selinuxfs.c
> +++ b/security/selinux/selinuxfs.c
> @@ -1782,7 +1782,7 @@ static struct dentry *sel_make_dir(struct dentry *dir, 
> const char *name,
>       return sel_attach(dir, name, inode);
>  }
>  
> -static int reject_all(struct mnt_idmap *idmap, struct inode *inode, int mask)
> +static int reject_all(const struct mnt_idmap *idmap, struct inode *inode, 
> int mask)
>  {
>       return -EPERM;  // no access for anyone, root or no root.
>  }
> 
> -- 
> 2.53.0
> 
-- 
Jan Kara <[email protected]>
SUSE Labs, CR

Reply via email to