--- a/file.c +++ b/file.c @@ -69,7 +69,7 @@ /* * ntfs_getattr - inode_operations::getattr */ -int ntfs_getattr(struct user_namespace *mnt_userns, const struct path *path, +int ntfs_getattr(const struct path *path, struct kstat *stat, u32 request_mask, u32 flags) { struct inode *inode = d_inode(path->dentry); @@ -83,7 +83,7 @@ stat->attributes_mask |= STATX_ATTR_COMPRESSED | STATX_ATTR_ENCRYPTED; - generic_fillattr(mnt_userns, inode, stat); + generic_fillattr(inode, stat); stat->result_mask |= STATX_BTIME; stat->btime = ni->i_crtime; @@ -734,7 +734,7 @@ /* * ntfs3_setattr - inode_operations::setattr */ -int ntfs3_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, +int ntfs3_setattr(struct dentry *dentry, struct iattr *attr) { struct super_block *sb = dentry->d_sb; @@ -753,7 +753,7 @@ ia_valid = attr->ia_valid; } - err = setattr_prepare(mnt_userns, dentry, attr); + err = setattr_prepare(dentry, attr); if (err) goto out; @@ -778,10 +778,10 @@ ni->ni_flags |= NI_FLAG_UPDATE_PARENT; } - setattr_copy(mnt_userns, inode, attr); + setattr_copy(inode, attr); if (mode != inode->i_mode) { - err = ntfs_acl_chmod(mnt_userns, inode); + err = ntfs_acl_chmod(inode); if (err) goto out; --- a/fsntfs.c +++ b/fsntfs.c @@ -1599,7 +1599,7 @@ lbo = (u64)lcn << cluster_bits; len = (u64)clen << cluster_bits; new_bio: - new = ntfs_alloc_bio(BIO_MAX_VECS); + new = ntfs_alloc_bio(BIO_MAX_PAGES); if (!new) { err = -ENOMEM; break; --- a/inode.c +++ b/inode.c @@ -1167,7 +1167,7 @@ return ERR_PTR(err); } -struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, +struct inode *ntfs_create_inode( struct inode *dir, struct dentry *dentry, const struct cpu_str *uni, umode_t mode, dev_t dev, const char *symname, u32 size, @@ -1284,7 +1284,7 @@ goto out3; } inode = &ni->vfs_inode; - inode_init_owner(mnt_userns, inode, dir, mode); + inode_init_owner(inode, dir, mode); mode = inode->i_mode; inode->i_atime = inode->i_mtime = inode->i_ctime = ni->i_crtime = @@ -1583,7 +1583,7 @@ #ifdef CONFIG_NTFS3_FS_POSIX_ACL if (!S_ISLNK(mode) && (sb->s_flags & SB_POSIXACL)) { - err = ntfs_init_acl(mnt_userns, inode, dir); + err = ntfs_init_acl(inode, dir); if (err) goto out7; } else --- a/namei.c +++ b/namei.c @@ -92,12 +92,12 @@ /* * ntfs_create - inode_operations::create */ -static int ntfs_create(struct user_namespace *mnt_userns, struct inode *dir, +static int ntfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, bool excl) { struct inode *inode; - inode = ntfs_create_inode(mnt_userns, dir, dentry, NULL, S_IFREG | mode, + inode = ntfs_create_inode(dir, dentry, NULL, S_IFREG | mode, 0, NULL, 0, NULL); return IS_ERR(inode) ? PTR_ERR(inode) : 0; @@ -108,12 +108,12 @@ * * inode_operations::mknod */ -static int ntfs_mknod(struct user_namespace *mnt_userns, struct inode *dir, +static int ntfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev) { struct inode *inode; - inode = ntfs_create_inode(mnt_userns, dir, dentry, NULL, mode, rdev, + inode = ntfs_create_inode(dir, dentry, NULL, mode, rdev, NULL, 0, NULL); return IS_ERR(inode) ? PTR_ERR(inode) : 0; @@ -181,13 +181,13 @@ /* * ntfs_symlink - inode_operations::symlink */ -static int ntfs_symlink(struct user_namespace *mnt_userns, struct inode *dir, +static int ntfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) { u32 size = strlen(symname); struct inode *inode; - inode = ntfs_create_inode(mnt_userns, dir, dentry, NULL, S_IFLNK | 0777, + inode = ntfs_create_inode(dir, dentry, NULL, S_IFLNK | 0777, 0, symname, size, NULL); return IS_ERR(inode) ? PTR_ERR(inode) : 0; @@ -196,12 +196,12 @@ /* * ntfs_mkdir- inode_operations::mkdir */ -static int ntfs_mkdir(struct user_namespace *mnt_userns, struct inode *dir, +static int ntfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) { struct inode *inode; - inode = ntfs_create_inode(mnt_userns, dir, dentry, NULL, S_IFDIR | mode, + inode = ntfs_create_inode(dir, dentry, NULL, S_IFDIR | mode, 0, NULL, 0, NULL); return IS_ERR(inode) ? PTR_ERR(inode) : 0; @@ -227,7 +227,7 @@ /* * ntfs_rename - inode_operations::rename */ -static int ntfs_rename(struct user_namespace *mnt_userns, struct inode *dir, +static int ntfs_rename(struct inode *dir, struct dentry *dentry, struct inode *new_dir, struct dentry *new_dentry, u32 flags) { --- a/ntfs_fs.h +++ b/ntfs_fs.h @@ -486,11 +486,11 @@ extern const struct file_operations ntfs_dir_operations; /* Globals from file.c */ -int ntfs_getattr(struct user_namespace *mnt_userns, const struct path *path, +int ntfs_getattr(const struct path *path, struct kstat *stat, u32 request_mask, u32 flags); void ntfs_sparse_cluster(struct inode *inode, struct page *page0, CLST vcn, CLST len); -int ntfs3_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, +int ntfs3_setattr(struct dentry *dentry, struct iattr *attr); int ntfs_file_open(struct inode *inode, struct file *file); int ntfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, @@ -695,7 +695,7 @@ int ntfs_flush_inodes(struct super_block *sb, struct inode *i1, struct inode *i2); int inode_write_data(struct inode *inode, const void *data, size_t bytes); -struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, +struct inode *ntfs_create_inode( struct inode *dir, struct dentry *dentry, const struct cpu_str *uni, umode_t mode, dev_t dev, const char *symname, u32 size, @@ -837,17 +837,17 @@ /* globals from xattr.c */ #ifdef CONFIG_NTFS3_FS_POSIX_ACL struct posix_acl *ntfs_get_acl(struct inode *inode, int type); -int ntfs_set_acl(struct user_namespace *mnt_userns, struct inode *inode, +int ntfs_set_acl(struct inode *inode, struct posix_acl *acl, int type); -int ntfs_init_acl(struct user_namespace *mnt_userns, struct inode *inode, +int ntfs_init_acl(struct inode *inode, struct inode *dir); #else #define ntfs_get_acl NULL #define ntfs_set_acl NULL #endif -int ntfs_acl_chmod(struct user_namespace *mnt_userns, struct inode *inode); -int ntfs_permission(struct user_namespace *mnt_userns, struct inode *inode, +int ntfs_acl_chmod(struct inode *inode); +int ntfs_permission(struct inode *inode, int mask); ssize_t ntfs_listxattr(struct dentry *dentry, char *buffer, size_t size); extern const struct xattr_handler *ntfs_xattr_handlers[]; --- a/super.c +++ b/super.c @@ -514,9 +514,9 @@ struct user_namespace *user_ns = seq_user_ns(m); seq_printf(m, ",uid=%u", - from_kuid_munged(user_ns, opts->fs_uid)); + from_kuid_munged(&init_user_ns, opts->fs_uid)); seq_printf(m, ",gid=%u", - from_kgid_munged(user_ns, opts->fs_gid)); + from_kgid_munged(&init_user_ns, opts->fs_gid)); if (opts->fmask) seq_printf(m, ",fmask=%04o", ~opts->fs_fmask_inv); if (opts->dmask) @@ -1435,7 +1435,7 @@ .init_fs_context = ntfs_init_fs_context, .parameters = ntfs_fs_parameters, .kill_sb = kill_block_super, - .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP, + .fs_flags = FS_REQUIRES_DEV, }; // clang-format on --- a/xattr.c +++ b/xattr.c @@ -478,7 +478,7 @@ } #ifdef CONFIG_NTFS3_FS_POSIX_ACL -static struct posix_acl *ntfs_get_acl_ex(struct user_namespace *mnt_userns, +static struct posix_acl *ntfs_get_acl_ex( struct inode *inode, int type, int locked) { @@ -514,7 +514,7 @@ /* Translate extended attribute to acl. */ if (err >= 0) { - acl = posix_acl_from_xattr(mnt_userns, buf, err); + acl = posix_acl_from_xattr(&init_user_ns, buf, err); } else if (err == -ENODATA) { acl = NULL; } else { @@ -535,10 +535,10 @@ struct posix_acl *ntfs_get_acl(struct inode *inode, int type) { /* TODO: init_user_ns? */ - return ntfs_get_acl_ex(&init_user_ns, inode, type, 0); + return ntfs_get_acl_ex(inode, type, 0); } -static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns, +static noinline int ntfs_set_acl_ex( struct inode *inode, struct posix_acl *acl, int type, bool init_acl) { @@ -557,7 +557,7 @@ if (acl && !init_acl) { umode_t mode; - err = posix_acl_update_mode(mnt_userns, inode, &mode, + err = posix_acl_update_mode(inode, &mode, &acl); if (err) goto out; @@ -592,7 +592,7 @@ value = kmalloc(size, GFP_NOFS); if (!value) return -ENOMEM; - err = posix_acl_to_xattr(mnt_userns, acl, value, size); + err = posix_acl_to_xattr(&init_user_ns, acl, value, size); if (err < 0) goto out; flags = 0; @@ -613,13 +613,13 @@ /* * ntfs_set_acl - inode_operations::set_acl */ -int ntfs_set_acl(struct user_namespace *mnt_userns, struct inode *inode, +int ntfs_set_acl(struct inode *inode, struct posix_acl *acl, int type) { - return ntfs_set_acl_ex(mnt_userns, inode, acl, type, false); + return ntfs_set_acl_ex(inode, acl, type, false); } -static int ntfs_xattr_get_acl(struct user_namespace *mnt_userns, +static int ntfs_xattr_get_acl( struct inode *inode, int type, void *buffer, size_t size) { @@ -638,7 +638,7 @@ if (!acl) return -ENODATA; - err = posix_acl_to_xattr(mnt_userns, acl, buffer, size); + err = posix_acl_to_xattr(&init_user_ns, acl, buffer, size); posix_acl_release(acl); return err; } -static int ntfs_xattr_set_acl(struct user_namespace *mnt_userns, +static int ntfs_xattr_set_acl( struct inode *inode, int type, const void *value, size_t size) { @@ -656,24 +656,24 @@ return -EOPNOTSUPP; } - if (!inode_owner_or_capable(mnt_userns, inode)) + if (!inode_owner_or_capable(inode)) return -EPERM; if (!value) { acl = NULL; } else { - acl = posix_acl_from_xattr(mnt_userns, value, size); + acl = posix_acl_from_xattr(&init_user_ns, value, size); if (IS_ERR(acl)) return PTR_ERR(acl); if (acl) { - err = posix_acl_valid(mnt_userns, acl); + err = posix_acl_valid(&init_user_ns, acl); if (err) goto release_and_out; } } - err = ntfs_set_acl(mnt_userns, inode, acl, type); + err = ntfs_set_acl(inode, acl, type); release_and_out: posix_acl_release(acl); @@ -685,7 +685,7 @@ * * Called from ntfs_create_inode(). */ -int ntfs_init_acl(struct user_namespace *mnt_userns, struct inode *inode, +int ntfs_init_acl(struct inode *inode, struct inode *dir) { struct posix_acl *default_acl, *acl; @@ -696,7 +696,7 @@ return err; if (default_acl) { - err = ntfs_set_acl_ex(mnt_userns, inode, default_acl, + err = ntfs_set_acl_ex(inode, default_acl, ACL_TYPE_DEFAULT, true); posix_acl_release(default_acl); } else { @@ -707,7 +707,7 @@ inode->i_acl = NULL; else { if (!err) - err = ntfs_set_acl_ex(mnt_userns, inode, acl, + err = ntfs_set_acl_ex(inode, acl, ACL_TYPE_ACCESS, true); posix_acl_release(acl); } @@ -719,7 +719,7 @@ /* * ntfs_acl_chmod - Helper for ntfs3_setattr(). */ -int ntfs_acl_chmod(struct user_namespace *mnt_userns, struct inode *inode) +int ntfs_acl_chmod(struct inode *inode) { struct super_block *sb = inode->i_sb; @@ -729,13 +729,13 @@ if (S_ISLNK(inode->i_mode)) return -EOPNOTSUPP; - return posix_acl_chmod(mnt_userns, inode, inode->i_mode); + return posix_acl_chmod(inode, inode->i_mode); } /* * ntfs_permission - inode_operations::permission */ -int ntfs_permission(struct user_namespace *mnt_userns, struct inode *inode, +int ntfs_permission(struct inode *inode, int mask) { if (ntfs_sb(inode->i_sb)->options->noacsrules) { @@ -743,7 +743,7 @@ return 0; } - return generic_permission(mnt_userns, inode, mask); + return generic_permission(inode, mask); } /* @@ -855,7 +855,7 @@ sizeof(XATTR_NAME_POSIX_ACL_DEFAULT)))) { /* TODO: init_user_ns? */ err = ntfs_xattr_get_acl( - &init_user_ns, inode, + inode, name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1 ? ACL_TYPE_ACCESS : ACL_TYPE_DEFAULT, @@ -874,7 +874,7 @@ * ntfs_setxattr - inode_operations::setxattr */ static noinline int ntfs_setxattr(const struct xattr_handler *handler, - struct user_namespace *mnt_userns, + struct dentry *de, struct inode *inode, const char *name, const void *value, size_t size, int flags) @@ -983,7 +983,7 @@ !memcmp(name, XATTR_NAME_POSIX_ACL_DEFAULT, sizeof(XATTR_NAME_POSIX_ACL_DEFAULT)))) { err = ntfs_xattr_set_acl( - mnt_userns, inode, + inode, name_len == sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1 ? ACL_TYPE_ACCESS : ACL_TYPE_DEFAULT,