if (!inode)
                return -ENOSPC;
 
-       inode_init_owner(&init_user_ns, inode, dir, mode | S_IFDIR);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode | S_IFDIR);
        ctx = alloc_spu_context(SPUFS_I(dir)->i_gang); /* XXX gang */
        SPUFS_I(inode)->i_ctx = ctx;
        if (!ctx) {
                goto out;
 
        ret = 0;
-       inode_init_owner(&init_user_ns, inode, dir, mode | S_IFDIR);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode | S_IFDIR);
        gang = alloc_spu_gang();
        SPUFS_I(inode)->i_ctx = NULL;
        SPUFS_I(inode)->i_gang = gang;
 
 {
        int err = 0;
 
-       inode_init_owner(&init_user_ns, inode, NULL, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, NULL, mode);
        inode->i_blocks = 0;
        inode->i_rdev = rdev;
        inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
 
        }
        set_bit(ino, info->si_imap);
        info->si_freei--;
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
        inode->i_blocks = 0;
        inode->i_op = &bfs_file_inops;
 
 int btrfs_create_new_inode(struct btrfs_trans_handle *trans,
                           struct btrfs_new_inode_args *args);
 void btrfs_new_inode_args_destroy(struct btrfs_new_inode_args *args);
-struct inode *btrfs_new_subvol_inode(struct user_namespace *mnt_userns,
+struct inode *btrfs_new_subvol_inode(struct mnt_idmap *idmap,
                                     struct inode *dir);
  void btrfs_set_delalloc_extent(struct btrfs_inode *inode, struct extent_state *state,
                                u32 bits);
 
 static int btrfs_mknod(struct mnt_idmap *idmap, struct inode *dir,
                       struct dentry *dentry, umode_t mode, dev_t rdev)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct inode *inode;
 
        inode = new_inode(dir->i_sb);
        if (!inode)
                return -ENOMEM;
-       inode_init_owner(mnt_userns, inode, dir, mode);
+       inode_init_owner(idmap, inode, dir, mode);
        inode->i_op = &btrfs_special_inode_operations;
        init_special_inode(inode, inode->i_mode, rdev);
        return btrfs_create_common(dir, dentry, inode);
 static int btrfs_create(struct mnt_idmap *idmap, struct inode *dir,
                        struct dentry *dentry, umode_t mode, bool excl)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct inode *inode;
 
        inode = new_inode(dir->i_sb);
        if (!inode)
                return -ENOMEM;
-       inode_init_owner(mnt_userns, inode, dir, mode);
+       inode_init_owner(idmap, inode, dir, mode);
        inode->i_fop = &btrfs_file_operations;
        inode->i_op = &btrfs_file_inode_operations;
        inode->i_mapping->a_ops = &btrfs_aops;
 static int btrfs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
                       struct dentry *dentry, umode_t mode)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct inode *inode;
 
        inode = new_inode(dir->i_sb);
        if (!inode)
                return -ENOMEM;
-       inode_init_owner(mnt_userns, inode, dir, S_IFDIR | mode);
+       inode_init_owner(idmap, inode, dir, S_IFDIR | mode);
        inode->i_op = &btrfs_dir_inode_operations;
        inode->i_fop = &btrfs_dir_file_operations;
        return btrfs_create_common(dir, dentry, inode);
        return ret;
 }
 
-struct inode *btrfs_new_subvol_inode(struct user_namespace *mnt_userns,
+struct inode *btrfs_new_subvol_inode(struct mnt_idmap *idmap,
                                     struct inode *dir)
 {
        struct inode *inode;
                 * Subvolumes don't inherit the sgid bit or the parent's gid if
                 * the parent's sgid bit is set. This is probably a bug.
                 */
-               inode_init_owner(mnt_userns, inode, NULL,
+               inode_init_owner(idmap, inode, NULL,
                                 S_IFDIR | (~current_umask() & S_IRWXUGO));
                inode->i_op = &btrfs_dir_inode_operations;
                inode->i_fop = &btrfs_dir_file_operations;
        return ret;
 }
 
-static struct inode *new_whiteout_inode(struct user_namespace *mnt_userns,
+static struct inode *new_whiteout_inode(struct mnt_idmap *idmap,
                                        struct inode *dir)
 {
        struct inode *inode;
 
        inode = new_inode(dir->i_sb);
        if (inode) {
-               inode_init_owner(mnt_userns, inode, dir,
+               inode_init_owner(idmap, inode, dir,
                                 S_IFCHR | WHITEOUT_MODE);
                inode->i_op = &btrfs_special_inode_operations;
                init_special_inode(inode, inode->i_mode, WHITEOUT_DEV);
        return inode;
 }
 
-static int btrfs_rename(struct user_namespace *mnt_userns,
+static int btrfs_rename(struct mnt_idmap *idmap,
                        struct inode *old_dir, struct dentry *old_dentry,
                        struct inode *new_dir, struct dentry *new_dentry,
                        unsigned int flags)
                filemap_flush(old_inode->i_mapping);
 
        if (flags & RENAME_WHITEOUT) {
-               whiteout_args.inode = new_whiteout_inode(mnt_userns, old_dir);
+               whiteout_args.inode = new_whiteout_inode(idmap, old_dir);
                if (!whiteout_args.inode)
                        return -ENOMEM;
                ret = btrfs_new_inode_prepare(&whiteout_args, &trans_num_items);
                         struct dentry *old_dentry, struct inode *new_dir,
                         struct dentry *new_dentry, unsigned int flags)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        int ret;
 
        if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
                ret = btrfs_rename_exchange(old_dir, old_dentry, new_dir,
                                            new_dentry);
        else
-               ret = btrfs_rename(mnt_userns, old_dir, old_dentry, new_dir,
+               ret = btrfs_rename(idmap, old_dir, old_dentry, new_dir,
                                   new_dentry, flags);
 
        btrfs_btree_balance_dirty(BTRFS_I(new_dir)->root->fs_info);
 static int btrfs_symlink(struct mnt_idmap *idmap, struct inode *dir,
                         struct dentry *dentry, const char *symname)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
        struct btrfs_trans_handle *trans;
        struct btrfs_root *root = BTRFS_I(dir)->root;
        inode = new_inode(dir->i_sb);
        if (!inode)
                return -ENOMEM;
-       inode_init_owner(mnt_userns, inode, dir, S_IFLNK | S_IRWXUGO);
+       inode_init_owner(idmap, inode, dir, S_IFLNK | S_IRWXUGO);
        inode->i_op = &btrfs_symlink_inode_operations;
        inode_nohighmem(inode);
        inode->i_mapping->a_ops = &btrfs_aops;
 static int btrfs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
                         struct file *file, umode_t mode)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
        struct btrfs_trans_handle *trans;
        struct btrfs_root *root = BTRFS_I(dir)->root;
        inode = new_inode(dir->i_sb);
        if (!inode)
                return -ENOMEM;
-       inode_init_owner(mnt_userns, inode, dir, mode);
+       inode_init_owner(idmap, inode, dir, mode);
        inode->i_fop = &btrfs_file_operations;
        inode->i_op = &btrfs_file_inode_operations;
        inode->i_mapping->a_ops = &btrfs_aops;
 
        return num_items;
 }
 
-static noinline int create_subvol(struct user_namespace *mnt_userns,
+static noinline int create_subvol(struct mnt_idmap *idmap,
                                  struct inode *dir, struct dentry *dentry,
                                  struct btrfs_qgroup_inherit *inherit)
 {
        if (ret < 0)
                goto out_root_item;
 
-       new_inode_args.inode = btrfs_new_subvol_inode(mnt_userns, dir);
+       new_inode_args.inode = btrfs_new_subvol_inode(idmap, dir);
        if (!new_inode_args.inode) {
                ret = -ENOMEM;
                goto out_anon_dev;
        struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
        struct dentry *dentry;
        struct fscrypt_str name_str = FSTR_INIT((char *)name, namelen);
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        int error;
 
        error = down_write_killable_nested(&dir->i_rwsem, I_MUTEX_PARENT);
        if (snap_src)
                error = create_snapshot(snap_src, dir, dentry, readonly, inherit);
        else
-               error = create_subvol(mnt_userns, dir, dentry, inherit);
+               error = create_subvol(idmap, dir, dentry, inherit);
 
        if (!error)
                fsnotify_mkdir(dir, dentry);
 
        BTRFS_I(inode)->location.type = BTRFS_INODE_ITEM_KEY;
        BTRFS_I(inode)->location.objectid = BTRFS_FIRST_FREE_OBJECTID;
        BTRFS_I(inode)->location.offset = 0;
-       inode_init_owner(&init_user_ns, inode, NULL, S_IFREG);
+       inode_init_owner(&nop_mnt_idmap, inode, NULL, S_IFREG);
 
        return inode;
 }
 
                inode->i_uid = current_fsuid();
                inode->i_gid = dir->i_gid;
        } else
-               inode_init_owner(&init_user_ns, inode, dir, mode);
+               inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
 
        inode->i_ino = ino;
        inode->i_blocks = 0;
 
 
 /* ialloc.c */
 extern int ext4_mark_inode_used(struct super_block *sb, int ino);
-extern struct inode *__ext4_new_inode(struct user_namespace *, handle_t *,
+extern struct inode *__ext4_new_inode(struct mnt_idmap *, handle_t *,
                                      struct inode *, umode_t,
                                      const struct qstr *qstr, __u32 goal,
                                      uid_t *owner, __u32 i_flags,
                                      int nblocks);
 
 #define ext4_new_inode(handle, dir, mode, qstr, goal, owner, i_flags)          \
-       __ext4_new_inode(&init_user_ns, (handle), (dir), (mode), (qstr),       \
+       __ext4_new_inode(&nop_mnt_idmap, (handle), (dir), (mode), (qstr),      \
                         (goal), (owner), i_flags, 0, 0, 0)
-#define ext4_new_inode_start_handle(mnt_userns, dir, mode, qstr, goal, owner, \
+#define ext4_new_inode_start_handle(idmap, dir, mode, qstr, goal, owner, \
                                    type, nblocks)                  \
-       __ext4_new_inode((mnt_userns), NULL, (dir), (mode), (qstr), (goal), (owner), \
+       __ext4_new_inode((idmap), NULL, (dir), (mode), (qstr), (goal), (owner), \
                         0, (type), __LINE__, (nblocks))
 
 
 
  * For other inodes, search forward from the parent directory's block
  * group to find a free inode.
  */
-struct inode *__ext4_new_inode(struct user_namespace *mnt_userns,
+struct inode *__ext4_new_inode(struct mnt_idmap *idmap,
                               handle_t *handle, struct inode *dir,
                               umode_t mode, const struct qstr *qstr,
                               __u32 goal, uid_t *owner, __u32 i_flags,
        ext4_group_t flex_group;
        struct ext4_group_info *grp = NULL;
        bool encrypt = false;
+       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
 
        /* Cannot create files in a deleted directory */
        if (!dir || !dir->i_nlink)
                inode_fsuid_set(inode, mnt_userns);
                inode->i_gid = dir->i_gid;
        } else
-               inode_init_owner(mnt_userns, inode, dir, mode);
+               inode_init_owner(idmap, inode, dir, mode);
 
        if (ext4_has_feature_project(sb) &&
            ext4_test_inode_flag(dir, EXT4_INODE_PROJINHERIT))
 
 static int ext4_create(struct mnt_idmap *idmap, struct inode *dir,
                       struct dentry *dentry, umode_t mode, bool excl)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        handle_t *handle;
        struct inode *inode;
        int err, credits, retries = 0;
        credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
                   EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
 retry:
-       inode = ext4_new_inode_start_handle(mnt_userns, dir, mode, &dentry->d_name,
+       inode = ext4_new_inode_start_handle(idmap, dir, mode, &dentry->d_name,
                                            0, NULL, EXT4_HT_DIR, credits);
        handle = ext4_journal_current_handle();
        err = PTR_ERR(inode);
 static int ext4_mknod(struct mnt_idmap *idmap, struct inode *dir,
                      struct dentry *dentry, umode_t mode, dev_t rdev)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        handle_t *handle;
        struct inode *inode;
        int err, credits, retries = 0;
        credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
                   EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
 retry:
-       inode = ext4_new_inode_start_handle(mnt_userns, dir, mode, &dentry->d_name,
+       inode = ext4_new_inode_start_handle(idmap, dir, mode, &dentry->d_name,
                                            0, NULL, EXT4_HT_DIR, credits);
        handle = ext4_journal_current_handle();
        err = PTR_ERR(inode);
 static int ext4_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
                        struct file *file, umode_t mode)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        handle_t *handle;
        struct inode *inode;
        int err, retries = 0;
                return err;
 
 retry:
-       inode = ext4_new_inode_start_handle(mnt_userns, dir, mode,
+       inode = ext4_new_inode_start_handle(idmap, dir, mode,
                                            NULL, 0, NULL,
                                            EXT4_HT_DIR,
                        EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) +
 static int ext4_mkdir(struct mnt_idmap *idmap, struct inode *dir,
                      struct dentry *dentry, umode_t mode)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        handle_t *handle;
        struct inode *inode;
        int err, err2 = 0, credits, retries = 0;
        credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
                   EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
 retry:
-       inode = ext4_new_inode_start_handle(mnt_userns, dir, S_IFDIR | mode,
+       inode = ext4_new_inode_start_handle(idmap, dir, S_IFDIR | mode,
                                            &dentry->d_name,
                                            0, NULL, EXT4_HT_DIR, credits);
        handle = ext4_journal_current_handle();
 static int ext4_symlink(struct mnt_idmap *idmap, struct inode *dir,
                        struct dentry *dentry, const char *symname)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        handle_t *handle;
        struct inode *inode;
        int err, len = strlen(symname);
        credits = EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
                  EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3;
 retry:
-       inode = ext4_new_inode_start_handle(mnt_userns, dir, S_IFLNK|S_IRWXUGO,
+       inode = ext4_new_inode_start_handle(idmap, dir, S_IFLNK|S_IRWXUGO,
                                            &dentry->d_name, 0, NULL,
                                            EXT4_HT_DIR, credits);
        handle = ext4_journal_current_handle();
        }
 }
 
-static struct inode *ext4_whiteout_for_rename(struct user_namespace *mnt_userns,
+static struct inode *ext4_whiteout_for_rename(struct mnt_idmap *idmap,
                                              struct ext4_renament *ent,
                                              int credits, handle_t **h)
 {
        credits += (EXT4_MAXQUOTAS_TRANS_BLOCKS(ent->dir->i_sb) +
                    EXT4_XATTR_TRANS_BLOCKS + 4);
 retry:
-       wh = ext4_new_inode_start_handle(mnt_userns, ent->dir,
+       wh = ext4_new_inode_start_handle(idmap, ent->dir,
                                         S_IFCHR | WHITEOUT_MODE,
                                         &ent->dentry->d_name, 0, NULL,
                                         EXT4_HT_DIR, credits);
  * while new_{dentry,inode) refers to the destination dentry/inode
  * This comes from rename(const char *oldpath, const char *newpath)
  */
-static int ext4_rename(struct user_namespace *mnt_userns, struct inode *old_dir,
+static int ext4_rename(struct mnt_idmap *idmap, struct inode *old_dir,
                       struct dentry *old_dentry, struct inode *new_dir,
                       struct dentry *new_dentry, unsigned int flags)
 {
                        goto release_bh;
                }
        } else {
-               whiteout = ext4_whiteout_for_rename(mnt_userns, &old, credits, &handle);
+               whiteout = ext4_whiteout_for_rename(idmap, &old, credits, &handle);
                if (IS_ERR(whiteout)) {
                        retval = PTR_ERR(whiteout);
                        goto release_bh;
                        struct inode *new_dir, struct dentry *new_dentry,
                        unsigned int flags)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        int err;
 
        if (unlikely(ext4_forced_shutdown(EXT4_SB(old_dir->i_sb))))
                                         new_dir, new_dentry);
        }
 
-       return ext4_rename(mnt_userns, old_dir, old_dentry, new_dir, new_dentry, flags);
+       return ext4_rename(idmap, old_dir, old_dentry, new_dir, new_dentry, flags);
 }
 
 /*
 
 int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
                                                        bool hot, bool set);
 struct dentry *f2fs_get_parent(struct dentry *child);
-int f2fs_get_tmpfile(struct user_namespace *mnt_userns, struct inode *dir,
+int f2fs_get_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
                     struct inode **new_inode);
 
 /*
 
 static int f2fs_ioc_start_atomic_write(struct file *filp, bool truncate)
 {
        struct inode *inode = file_inode(filp);
-       struct user_namespace *mnt_userns = file_mnt_user_ns(filp);
+       struct mnt_idmap *idmap = file_mnt_idmap(filp);
+       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct f2fs_inode_info *fi = F2FS_I(inode);
        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
        struct inode *pinode;
                goto out;
        }
 
-       ret = f2fs_get_tmpfile(mnt_userns, pinode, &fi->cow_inode);
+       ret = f2fs_get_tmpfile(idmap, pinode, &fi->cow_inode);
        iput(pinode);
        if (ret) {
                f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
 
                file_set_hot(inode);
 }
 
-static struct inode *f2fs_new_inode(struct user_namespace *mnt_userns,
+static struct inode *f2fs_new_inode(struct mnt_idmap *idmap,
                                                struct inode *dir, umode_t mode,
                                                const char *name)
 {
 
        nid_free = true;
 
-       inode_init_owner(mnt_userns, inode, dir, mode);
+       inode_init_owner(idmap, inode, dir, mode);
 
        inode->i_ino = ino;
        inode->i_blocks = 0;
 static int f2fs_create(struct mnt_idmap *idmap, struct inode *dir,
                       struct dentry *dentry, umode_t mode, bool excl)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
        struct inode *inode;
        nid_t ino = 0;
        if (err)
                return err;
 
-       inode = f2fs_new_inode(mnt_userns, dir, mode, dentry->d_name.name);
+       inode = f2fs_new_inode(idmap, dir, mode, dentry->d_name.name);
        if (IS_ERR(inode))
                return PTR_ERR(inode);
 
 static int f2fs_symlink(struct mnt_idmap *idmap, struct inode *dir,
                        struct dentry *dentry, const char *symname)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
        struct inode *inode;
        size_t len = strlen(symname);
        if (err)
                return err;
 
-       inode = f2fs_new_inode(mnt_userns, dir, S_IFLNK | S_IRWXUGO, NULL);
+       inode = f2fs_new_inode(idmap, dir, S_IFLNK | S_IRWXUGO, NULL);
        if (IS_ERR(inode))
                return PTR_ERR(inode);
 
 static int f2fs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
                      struct dentry *dentry, umode_t mode)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
        struct inode *inode;
        int err;
        if (err)
                return err;
 
-       inode = f2fs_new_inode(mnt_userns, dir, S_IFDIR | mode, NULL);
+       inode = f2fs_new_inode(idmap, dir, S_IFDIR | mode, NULL);
        if (IS_ERR(inode))
                return PTR_ERR(inode);
 
 static int f2fs_mknod(struct mnt_idmap *idmap, struct inode *dir,
                      struct dentry *dentry, umode_t mode, dev_t rdev)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
        struct inode *inode;
        int err = 0;
        if (err)
                return err;
 
-       inode = f2fs_new_inode(mnt_userns, dir, mode, NULL);
+       inode = f2fs_new_inode(idmap, dir, mode, NULL);
        if (IS_ERR(inode))
                return PTR_ERR(inode);
 
        return err;
 }
 
-static int __f2fs_tmpfile(struct user_namespace *mnt_userns, struct inode *dir,
+static int __f2fs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
                          struct file *file, umode_t mode, bool is_whiteout,
                          struct inode **new_inode)
 {
        if (err)
                return err;
 
-       inode = f2fs_new_inode(mnt_userns, dir, mode, NULL);
+       inode = f2fs_new_inode(idmap, dir, mode, NULL);
        if (IS_ERR(inode))
                return PTR_ERR(inode);
 
 static int f2fs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
                        struct file *file, umode_t mode)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
        int err;
 
        if (!f2fs_is_checkpoint_ready(sbi))
                return -ENOSPC;
 
-       err = __f2fs_tmpfile(mnt_userns, dir, file, mode, false, NULL);
+       err = __f2fs_tmpfile(idmap, dir, file, mode, false, NULL);
 
        return finish_open_simple(file, err);
 }
 
-static int f2fs_create_whiteout(struct user_namespace *mnt_userns,
+static int f2fs_create_whiteout(struct mnt_idmap *idmap,
                                struct inode *dir, struct inode **whiteout)
 {
        if (unlikely(f2fs_cp_error(F2FS_I_SB(dir))))
                return -EIO;
 
-       return __f2fs_tmpfile(mnt_userns, dir, NULL,
+       return __f2fs_tmpfile(idmap, dir, NULL,
                                S_IFCHR | WHITEOUT_MODE, true, whiteout);
 }
 
-int f2fs_get_tmpfile(struct user_namespace *mnt_userns, struct inode *dir,
+int f2fs_get_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
                     struct inode **new_inode)
 {
-       return __f2fs_tmpfile(mnt_userns, dir, NULL, S_IFREG, false, new_inode);
+       return __f2fs_tmpfile(idmap, dir, NULL, S_IFREG, false, new_inode);
 }
 
-static int f2fs_rename(struct user_namespace *mnt_userns, struct inode *old_dir,
+static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
                        struct dentry *old_dentry, struct inode *new_dir,
                        struct dentry *new_dentry, unsigned int flags)
 {
        }
 
        if (flags & RENAME_WHITEOUT) {
-               err = f2fs_create_whiteout(mnt_userns, old_dir, &whiteout);
+               err = f2fs_create_whiteout(idmap, old_dir, &whiteout);
                if (err)
                        return err;
        }
                        struct inode *new_dir, struct dentry *new_dentry,
                        unsigned int flags)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        int err;
 
        if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
         * VFS has already handled the new dentry existence case,
         * here, we just deal with "RENAME_NOREPLACE" as regular rename.
         */
-       return f2fs_rename(mnt_userns, old_dir, old_dentry,
+       return f2fs_rename(idmap, old_dir, old_dentry,
                                        new_dir, new_dentry, flags);
 }
 
 
                return NULL;
 
        inode->i_ino = sbi->next_cnid++;
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        set_nlink(inode, 1);
        inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
 
 
                struct hugetlbfs_inode_info *info = HUGETLBFS_I(inode);
 
                inode->i_ino = get_next_ino();
-               inode_init_owner(&init_user_ns, inode, dir, mode);
+               inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
                lockdep_set_class(&inode->i_mapping->i_mmap_rwsem,
                                &hugetlbfs_i_mmap_rwsem_key);
                inode->i_mapping->a_ops = &hugetlbfs_aops;
 
 
 /**
  * inode_init_owner - Init uid,gid,mode for new inode according to posix standards
- * @mnt_userns:        User namespace of the mount the inode was created from
+ * @idmap: idmap of the mount the inode was created from
  * @inode: New inode
  * @dir: Directory inode
  * @mode: mode of the new inode
  *
- * If the inode has been created 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 checking permissions
+ * If the inode has been created 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 checking permissions
  * and initializing i_uid and i_gid. On non-idmapped mounts or if permission
- * checking is to be performed on the raw inode simply passs init_user_ns.
+ * checking is to be performed on the raw inode simply pass @nop_mnt_idmap.
  */
-void inode_init_owner(struct user_namespace *mnt_userns, struct inode *inode,
+void inode_init_owner(struct mnt_idmap *idmap, struct inode *inode,
                      const struct inode *dir, umode_t mode)
 {
+       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
+
        inode_fsuid_set(inode, mnt_userns);
        if (dir && dir->i_mode & S_ISGID) {
                inode->i_gid = dir->i_gid;
 
                goto fail_put;
        }
 
-       inode_init_owner(&init_user_ns, inode, parent, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, parent, mode);
        /*
         * New inodes need to save sane values on disk when
         * uid & gid mount options are used
 
                iput(inode);
                return NULL;
        }
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        inode->i_ino = j;
        inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
        inode->i_blocks = 0;
 
        ii->i_bh = bh;
 
        atomic64_inc(&root->inodes_count);
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        inode->i_ino = ino;
        inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
 
 
                                struct ntfs_fnd *fnd)
 {
        int err;
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct super_block *sb = dir->i_sb;
        struct ntfs_sb_info *sbi = sb->s_fs_info;
        const struct qstr *name = &dentry->d_name;
                goto out3;
        }
        inode = &ni->vfs_inode;
-       inode_init_owner(mnt_userns, inode, dir, mode);
+       inode_init_owner(idmap, inode, dir, mode);
        mode = inode->i_mode;
 
        inode->i_atime = inode->i_mtime = inode->i_ctime = ni->i_crtime =
 
 
        if (inode) {
                inode->i_ino = get_next_ino();
-               inode_init_owner(&init_user_ns, inode, NULL, mode);
+               inode_init_owner(&nop_mnt_idmap, inode, NULL, mode);
                inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
                inc_nlink(inode);
 
                return NULL;
 
        inode->i_ino = get_next_ino();
-       inode_init_owner(&init_user_ns, inode, parent, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, parent, mode);
        inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
 
        ip = DLMFS_I(inode);
 
        if (S_ISDIR(mode))
                set_nlink(inode, 2);
        mode = mode_strip_sgid(&init_user_ns, dir, mode);
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        status = dquot_initialize(inode);
        if (status)
                return ERR_PTR(status);
 
                goto fail;
 
        inode->i_ino = new_block;
-       inode_init_owner(&init_user_ns, inode, NULL, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, NULL, mode);
        inode->i_mapping->a_ops = &omfs_aops;
 
        inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
 
        inode->i_state |= I_CREATING;
        spin_unlock(&inode->i_lock);
 
-       inode_init_owner(&init_user_ns, inode, dentry->d_parent->d_inode, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dentry->d_parent->d_inode, mode);
        attr.mode = inode->i_mode;
 
        err = ovl_create_or_link(dentry, inode, &attr, false);
 
 
        if (inode) {
                inode->i_ino = get_next_ino();
-               inode_init_owner(&init_user_ns, inode, dir, mode);
+               inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
                inode->i_mapping->a_ops = &ram_aops;
                mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER);
                mapping_set_unevictable(inode->i_mapping);
 
         * the quota init calls have to know who to charge the quota to, so
         * we have to set uid and gid here
         */
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        return dquot_initialize(inode);
 }
 
 
        *sbi->s_sb_fic_count = cpu_to_fs16(sbi, count);
        fs16_add(sbi, sbi->s_sb_total_free_inodes, -1);
        dirty_sb(sb);
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        inode->i_ino = fs16_to_cpu(sbi, ino);
        inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
        inode->i_blocks = 0;
 
         */
        inode->i_flags |= S_NOCMTIME;
 
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        inode->i_mtime = inode->i_atime = inode->i_ctime =
                         current_time(inode);
        inode->i_mapping->nrpages = 0;
 
                mutex_unlock(&sbi->s_alloc_mutex);
        }
 
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_SET))
                inode->i_uid = sbi->s_uid;
        if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_SET))
 
        ufs_mark_sb_dirty(sb);
 
        inode->i_ino = cg * uspi->s_ipg + bit;
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        inode->i_blocks = 0;
        inode->i_generation = 0;
        inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
 
  */
 int
 xfs_init_new_inode(
-       struct user_namespace   *mnt_userns,
+       struct mnt_idmap        *idmap,
        struct xfs_trans        *tp,
        struct xfs_inode        *pip,
        xfs_ino_t               ino,
        bool                    init_xattrs,
        struct xfs_inode        **ipp)
 {
+       struct user_namespace   *mnt_userns = mnt_idmap_owner(idmap);
        struct inode            *dir = pip ? VFS_I(pip) : NULL;
        struct xfs_mount        *mp = tp->t_mountp;
        struct xfs_inode        *ip;
                inode->i_gid = dir->i_gid;
                inode->i_mode = mode;
        } else {
-               inode_init_owner(mnt_userns, inode, dir, mode);
+               inode_init_owner(idmap, inode, dir, mode);
        }
 
        /*
 
 int
 xfs_create(
-       struct user_namespace   *mnt_userns,
+       struct mnt_idmap        *idmap,
        xfs_inode_t             *dp,
        struct xfs_name         *name,
        umode_t                 mode,
        bool                    init_xattrs,
        xfs_inode_t             **ipp)
 {
+       struct user_namespace   *mnt_userns = mnt_idmap_owner(idmap);
        int                     is_dir = S_ISDIR(mode);
        struct xfs_mount        *mp = dp->i_mount;
        struct xfs_inode        *ip = NULL;
         */
        error = xfs_dialloc(&tp, dp->i_ino, mode, &ino);
        if (!error)
-               error = xfs_init_new_inode(mnt_userns, tp, dp, ino, mode,
+               error = xfs_init_new_inode(idmap, tp, dp, ino, mode,
                                is_dir ? 2 : 1, rdev, prid, init_xattrs, &ip);
        if (error)
                goto out_trans_cancel;
 
 int
 xfs_create_tmpfile(
-       struct user_namespace   *mnt_userns,
+       struct mnt_idmap        *idmap,
        struct xfs_inode        *dp,
        umode_t                 mode,
        struct xfs_inode        **ipp)
 {
+       struct user_namespace   *mnt_userns = mnt_idmap_owner(idmap);
        struct xfs_mount        *mp = dp->i_mount;
        struct xfs_inode        *ip = NULL;
        struct xfs_trans        *tp = NULL;
 
        error = xfs_dialloc(&tp, dp->i_ino, mode, &ino);
        if (!error)
-               error = xfs_init_new_inode(mnt_userns, tp, dp, ino, mode,
+               error = xfs_init_new_inode(idmap, tp, dp, ino, mode,
                                0, 0, prid, false, &ip);
        if (error)
                goto out_trans_cancel;
  */
 static int
 xfs_rename_alloc_whiteout(
-       struct user_namespace   *mnt_userns,
+       struct mnt_idmap        *idmap,
        struct xfs_name         *src_name,
        struct xfs_inode        *dp,
        struct xfs_inode        **wip)
        struct qstr             name;
        int                     error;
 
-       error = xfs_create_tmpfile(mnt_userns, dp, S_IFCHR | WHITEOUT_MODE,
+       error = xfs_create_tmpfile(idmap, dp, S_IFCHR | WHITEOUT_MODE,
                                   &tmpfile);
        if (error)
                return error;
  */
 int
 xfs_rename(
-       struct user_namespace   *mnt_userns,
+       struct mnt_idmap        *idmap,
        struct xfs_inode        *src_dp,
        struct xfs_name         *src_name,
        struct xfs_inode        *src_ip,
         * appropriately.
         */
        if (flags & RENAME_WHITEOUT) {
-               error = xfs_rename_alloc_whiteout(mnt_userns, src_name,
+               error = xfs_rename_alloc_whiteout(idmap, src_name,
                                                  target_dp, &wip);
                if (error)
                        return error;
 
 void           xfs_inactive(struct xfs_inode *ip);
 int            xfs_lookup(struct xfs_inode *dp, const struct xfs_name *name,
                           struct xfs_inode **ipp, struct xfs_name *ci_name);
-int            xfs_create(struct user_namespace *mnt_userns,
+int            xfs_create(struct mnt_idmap *idmap,
                           struct xfs_inode *dp, struct xfs_name *name,
                           umode_t mode, dev_t rdev, bool need_xattr,
                           struct xfs_inode **ipp);
-int            xfs_create_tmpfile(struct user_namespace *mnt_userns,
+int            xfs_create_tmpfile(struct mnt_idmap *idmap,
                           struct xfs_inode *dp, umode_t mode,
                           struct xfs_inode **ipp);
 int            xfs_remove(struct xfs_inode *dp, struct xfs_name *name,
                           struct xfs_inode *ip);
 int            xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip,
                         struct xfs_name *target_name);
-int            xfs_rename(struct user_namespace *mnt_userns,
+int            xfs_rename(struct mnt_idmap *idmap,
                           struct xfs_inode *src_dp, struct xfs_name *src_name,
                           struct xfs_inode *src_ip, struct xfs_inode *target_dp,
                           struct xfs_name *target_name,
 xfs_extlen_t   xfs_get_extsz_hint(struct xfs_inode *ip);
 xfs_extlen_t   xfs_get_cowextsz_hint(struct xfs_inode *ip);
 
-int xfs_init_new_inode(struct user_namespace *mnt_userns, struct xfs_trans *tp,
+int xfs_init_new_inode(struct mnt_idmap *idmap, struct xfs_trans *tp,
                struct xfs_inode *pip, xfs_ino_t ino, umode_t mode,
                xfs_nlink_t nlink, dev_t rdev, prid_t prid, bool init_xattrs,
                struct xfs_inode **ipp);
 
 
 STATIC int
 xfs_generic_create(
-       struct user_namespace   *mnt_userns,
-       struct inode    *dir,
-       struct dentry   *dentry,
-       umode_t         mode,
-       dev_t           rdev,
-       struct file     *tmpfile)       /* unnamed file */
+       struct mnt_idmap        *idmap,
+       struct inode            *dir,
+       struct dentry           *dentry,
+       umode_t                 mode,
+       dev_t                   rdev,
+       struct file             *tmpfile)       /* unnamed file */
 {
        struct inode    *inode;
        struct xfs_inode *ip = NULL;
                goto out_free_acl;
 
        if (!tmpfile) {
-               error = xfs_create(mnt_userns, XFS_I(dir), &name, mode, rdev,
+               error = xfs_create(idmap, XFS_I(dir), &name, mode, rdev,
                                xfs_create_need_xattr(dir, default_acl, acl),
                                &ip);
        } else {
-               error = xfs_create_tmpfile(mnt_userns, XFS_I(dir), mode, &ip);
+               error = xfs_create_tmpfile(idmap, XFS_I(dir), mode, &ip);
        }
        if (unlikely(error))
                goto out_free_acl;
        umode_t                 mode,
        dev_t                   rdev)
 {
-       return xfs_generic_create(mnt_idmap_owner(idmap), dir, dentry, mode,
-                                 rdev, NULL);
+       return xfs_generic_create(idmap, dir, dentry, mode, rdev, NULL);
 }
 
 STATIC int
        umode_t                 mode,
        bool                    flags)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
-       return xfs_generic_create(mnt_userns, dir, dentry, mode, 0, NULL);
+       return xfs_generic_create(idmap, dir, dentry, mode, 0, NULL);
 }
 
 STATIC int
        struct dentry           *dentry,
        umode_t                 mode)
 {
-       return xfs_generic_create(mnt_idmap_owner(idmap), dir, dentry,
-                                 mode | S_IFDIR, 0, NULL);
+       return xfs_generic_create(idmap, dir, dentry, mode | S_IFDIR, 0, NULL);
 }
 
 STATIC struct dentry *
        struct dentry           *dentry,
        const char              *symname)
 {
-       struct user_namespace   *mnt_userns = mnt_idmap_owner(idmap);
        struct inode    *inode;
        struct xfs_inode *cip = NULL;
        struct xfs_name name;
        if (unlikely(error))
                goto out;
 
-       error = xfs_symlink(mnt_userns, XFS_I(dir), &name, symname, mode, &cip);
+       error = xfs_symlink(idmap, XFS_I(dir), &name, symname, mode, &cip);
        if (unlikely(error))
                goto out;
 
        struct dentry           *ndentry,
        unsigned int            flags)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
        struct inode    *new_inode = d_inode(ndentry);
        int             omode = 0;
        int             error;
        if (unlikely(error))
                return error;
 
-       return xfs_rename(mnt_userns, XFS_I(odir), &oname,
+       return xfs_rename(idmap, XFS_I(odir), &oname,
                          XFS_I(d_inode(odentry)), XFS_I(ndir), &nname,
                          new_inode ? XFS_I(new_inode) : NULL, flags);
 }
        struct file             *file,
        umode_t                 mode)
 {
-       struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
-
-       int err = xfs_generic_create(mnt_userns, dir, file->f_path.dentry, mode, 0, file);
+       int err = xfs_generic_create(idmap, dir, file->f_path.dentry, mode, 0, file);
 
        return finish_open_simple(file, err);
 }
 
 
                error = xfs_dialloc(&tp, 0, S_IFREG, &ino);
                if (!error)
-                       error = xfs_init_new_inode(&init_user_ns, tp, NULL, ino,
+                       error = xfs_init_new_inode(&nop_mnt_idmap, tp, NULL, ino,
                                        S_IFREG, 1, 0, 0, false, ipp);
                if (error) {
                        xfs_trans_cancel(tp);
 
 
 int
 xfs_symlink(
-       struct user_namespace   *mnt_userns,
+       struct mnt_idmap        *idmap,
        struct xfs_inode        *dp,
        struct xfs_name         *link_name,
        const char              *target_path,
        umode_t                 mode,
        struct xfs_inode        **ipp)
 {
+       struct user_namespace   *mnt_userns = mnt_idmap_owner(idmap);
        struct xfs_mount        *mp = dp->i_mount;
        struct xfs_trans        *tp = NULL;
        struct xfs_inode        *ip = NULL;
         */
        error = xfs_dialloc(&tp, dp->i_ino, S_IFLNK, &ino);
        if (!error)
-               error = xfs_init_new_inode(mnt_userns, tp, dp, ino,
+               error = xfs_init_new_inode(idmap, tp, dp, ino,
                                S_IFLNK | (mode & ~S_IFMT), 1, 0, prid,
                                false, &ip);
        if (error)
 
 
 /* Kernel only symlink definitions */
 
-int xfs_symlink(struct user_namespace *mnt_userns, struct xfs_inode *dp,
+int xfs_symlink(struct mnt_idmap *idmap, struct xfs_inode *dp,
                struct xfs_name *link_name, const char *target_path,
                umode_t mode, struct xfs_inode **ipp);
 int xfs_readlink_bmap_ilocked(struct xfs_inode *ip, char *link);
 
        struct super_block *sb = parent->i_sb;
 
        inode->i_ino = bdev_nr_zones(sb->s_bdev) + type + 1;
-       inode_init_owner(&init_user_ns, inode, parent, S_IFDIR | 0555);
+       inode_init_owner(&nop_mnt_idmap, inode, parent, S_IFDIR | 0555);
        inode->i_op = &zonefs_dir_inode_operations;
        inode->i_fop = &simple_dir_operations;
        set_nlink(inode, 2);
 
 /*
  * VFS file helper functions.
  */
-void inode_init_owner(struct user_namespace *mnt_userns, struct inode *inode,
+void inode_init_owner(struct mnt_idmap *idmap, struct inode *inode,
                      const struct inode *dir, umode_t mode);
 extern bool may_open_dev(const struct path *path);
 umode_t mode_strip_sgid(struct user_namespace *mnt_userns,
 
        inode->i_mtime = inode->i_atime;
        inode->i_ctime = inode->i_atime;
 
-       inode_init_owner(&init_user_ns, inode, dir, mode);
+       inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
 
        return inode;
 }
 
        inode = new_inode(sb);
        if (inode) {
                inode->i_ino = ino;
-               inode_init_owner(&init_user_ns, inode, dir, mode);
+               inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
                inode->i_blocks = 0;
                inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
                inode->i_generation = get_random_u32();