--- a/file.c +++ b/file.c @@ -76,7 +76,7 @@ /* * 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); @@ -90,7 +90,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; @@ -732,7 +732,7 @@ /* * 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; @@ -751,7 +751,7 @@ ia_valid = attr->ia_valid; } - err = setattr_prepare(mnt_userns, dentry, attr); + err = setattr_prepare(dentry, attr); if (err) goto out; @@ -776,10 +776,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 @@ -1629,7 +1629,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 @@ -1155,7 +1155,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, @@ -1268,7 +1168,7 @@ goto out3; } inode = &ni->vfs_inode; - inode_init_owner(mnt_userns, inode, dir, mode); + inode_init_owner(inode, dir, mode); inode->i_atime = inode->i_mtime = inode->i_ctime = ni->i_crtime = current_time(inode); @@ -1568,7 +1568,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 out6; } else --- a/namei.c +++ b/namei.c @@ -102,7 +102,7 @@ * * 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 ntfs_inode *ni = ntfs_i(dir); @@ -110,7 +110,7 @@ ni_lock_dir(ni); - 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); ni_unlock(ni); @@ -123,7 +123,7 @@ * * 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 ntfs_inode *ni = ntfs_i(dir); @@ -131,7 +131,7 @@ ni_lock_dir(ni); - inode = ntfs_create_inode(mnt_userns, dir, dentry, NULL, mode, rdev, + inode = ntfs_create_inode(dir, dentry, NULL, mode, rdev, NULL, 0, NULL); ni_unlock(ni); @@ -205,7 +205,7 @@ * * 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); @@ -214,7 +214,7 @@ ni_lock_dir(ni); - 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); ni_unlock(ni); @@ -227,7 +227,7 @@ * * 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; @@ -235,7 +235,7 @@ ni_lock_dir(ni); - 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); ni_unlock(ni); @@ -267,7 +267,7 @@ * * inode_operations::rename */ -static int ntfs_rename(struct user_namespace *mnt_userns, struct inode *old_dir, +static int ntfs_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry, u32 flags) { --- a/ntfs_fs.h +++ b/ntfs_fs.h @@ -459,11 +459,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, @@ -650,7 +650,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, @@ -791,17 +791,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 @@ -545,10 +545,10 @@ if (opts->uid) seq_printf(m, ",uid=%u", - from_kuid_munged(user_ns, opts->fs_uid)); + from_kuid_munged(&init_user_ns, opts->fs_uid)); if (opts->gid) 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) @@ -1422,7 +1422,7 @@ .name = "ntfs3", .mount = ntfs_mount, .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 @@ -486,7 +486,7 @@ kfree(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) { @@ -522,7 +522,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); if (!IS_ERR(acl)) set_cached_acl(inode, type, acl); } else { @@ -542,10 +542,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, int locked) { @@ -603,7 +603,7 @@ 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; } @@ -624,13 +624,13 @@ * * 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, 0); + return ntfs_set_acl_ex(inode, acl, type, 0); } -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) { @@ -647,13 +647,13 @@ 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); ntfs_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) { @@ -663,24 +663,24 @@ if (!(inode->i_sb->s_flags & SB_POSIXACL)) 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: ntfs_posix_acl_release(acl); @@ -690,7 +690,7 @@ /* * Initialize the ACLs of a new inode. 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; @@ -702,7 +702,7 @@ */ inode->i_default_acl = NULL; - default_acl = ntfs_get_acl_ex(mnt_userns, dir, ACL_TYPE_DEFAULT, 1); + default_acl = ntfs_get_acl_ex(dir, ACL_TYPE_DEFAULT, 1); if (!default_acl || default_acl == ERR_PTR(-EOPNOTSUPP)) { inode->i_mode &= ~current_umask(); @@ -730,13 +730,13 @@ } if (default_acl) - err = ntfs_set_acl_ex(mnt_userns, inode, default_acl, + err = ntfs_set_acl_ex(inode, default_acl, ACL_TYPE_DEFAULT, 1); if (!acl) inode->i_acl = NULL; else if (!err) - err = ntfs_set_acl_ex(mnt_userns, inode, acl, ACL_TYPE_ACCESS, + err = ntfs_set_acl_ex(inode, acl, ACL_TYPE_ACCESS, 1); posix_acl_release(acl); @@ -753,7 +753,7 @@ * * 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; @@ -763,7 +763,7 @@ 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); } /* @@ -771,7 +771,7 @@ * * 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.no_acs_rules) { @@ -779,7 +779,7 @@ return 0; } - return generic_permission(mnt_userns, inode, mask); + return generic_permission(inode, mask); } /* @@ -893,7 +893,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, @@ -914,7 +914,7 @@ * 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) @@ -1024,6 +1024,6 @@ 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,