btrfs: use struct fscrypt_str instead of struct qstr
authorSweet Tea Dorminy <sweettea-kernel@dorminy.me>
Thu, 20 Oct 2022 16:58:27 +0000 (12:58 -0400)
committerDavid Sterba <dsterba@suse.com>
Mon, 5 Dec 2022 17:00:43 +0000 (18:00 +0100)
While struct qstr is more natural without fscrypt, since it's provided
by dentries, struct fscrypt_str is provided by the fscrypt handlers
processing dentries, and is thus more natural in the fscrypt world.
Replace all of the struct qstr uses with struct fscrypt_str.

Signed-off-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
12 files changed:
fs/btrfs/ctree.h
fs/btrfs/dir-item.c
fs/btrfs/inode-item.c
fs/btrfs/inode-item.h
fs/btrfs/inode.c
fs/btrfs/ioctl.c
fs/btrfs/root-tree.c
fs/btrfs/send.c
fs/btrfs/super.c
fs/btrfs/transaction.c
fs/btrfs/tree-log.c
fs/btrfs/tree-log.h

index b2016c1..7c71089 100644 (file)
@@ -1518,10 +1518,10 @@ int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
 /* root-item.c */
 int btrfs_add_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
                       u64 ref_id, u64 dirid, u64 sequence,
-                      const struct qstr *name);
+                      const struct fscrypt_str *name);
 int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
                       u64 ref_id, u64 dirid, u64 *sequence,
-                      const struct qstr *name);
+                      const struct fscrypt_str *name);
 int btrfs_del_root(struct btrfs_trans_handle *trans,
                   const struct btrfs_key *key);
 int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root *root,
@@ -1550,23 +1550,23 @@ int btrfs_uuid_tree_iterate(struct btrfs_fs_info *fs_info);
 
 /* dir-item.c */
 int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
-                         const struct qstr *name);
+                         const struct fscrypt_str *name);
 int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
-                         const struct qstr *name, struct btrfs_inode *dir,
+                         const struct fscrypt_str *name, struct btrfs_inode *dir,
                          struct btrfs_key *location, u8 type, u64 index);
 struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
                                             struct btrfs_root *root,
                                             struct btrfs_path *path, u64 dir,
-                                            const struct qstr *name, int mod);
+                                            const struct fscrypt_str *name, int mod);
 struct btrfs_dir_item *
 btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
                            struct btrfs_root *root,
                            struct btrfs_path *path, u64 dir,
-                           u64 index, const struct qstr *name, int mod);
+                           u64 index, const struct fscrypt_str *name, int mod);
 struct btrfs_dir_item *
 btrfs_search_dir_index_item(struct btrfs_root *root,
                            struct btrfs_path *path, u64 dirid,
-                           const struct qstr *name);
+                           const struct fscrypt_str *name);
 int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans,
                              struct btrfs_root *root,
                              struct btrfs_path *path,
@@ -1647,10 +1647,10 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry);
 int btrfs_set_inode_index(struct btrfs_inode *dir, u64 *index);
 int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
                       struct btrfs_inode *dir, struct btrfs_inode *inode,
-                      const struct qstr *name);
+                      const struct fscrypt_str *name);
 int btrfs_add_link(struct btrfs_trans_handle *trans,
                   struct btrfs_inode *parent_inode, struct btrfs_inode *inode,
-                  const struct qstr *name, int add_backref, u64 index);
+                  const struct fscrypt_str *name, int add_backref, u64 index);
 int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry);
 int btrfs_truncate_block(struct btrfs_inode *inode, loff_t from, loff_t len,
                         int front);
@@ -1676,7 +1676,6 @@ struct btrfs_new_inode_args {
        struct posix_acl *default_acl;
        struct posix_acl *acl;
        struct fscrypt_name fname;
-       struct qstr name;
 };
 int btrfs_new_inode_prepare(struct btrfs_new_inode_args *args,
                            unsigned int *trans_num_items);
index 48a15af..2377702 100644 (file)
@@ -106,7 +106,7 @@ int btrfs_insert_xattr_item(struct btrfs_trans_handle *trans,
  * Will return 0 or -ENOMEM
  */
 int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
-                         const struct qstr *name, struct btrfs_inode *dir,
+                         const struct fscrypt_str *name, struct btrfs_inode *dir,
                          struct btrfs_key *location, u8 type, u64 index)
 {
        int ret = 0;
@@ -208,7 +208,7 @@ static struct btrfs_dir_item *btrfs_lookup_match_dir(
 struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
                                             struct btrfs_root *root,
                                             struct btrfs_path *path, u64 dir,
-                                            const struct qstr *name,
+                                            const struct fscrypt_str *name,
                                             int mod)
 {
        struct btrfs_key key;
@@ -227,7 +227,7 @@ struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
 }
 
 int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
-                                  const struct qstr *name)
+                                  const struct fscrypt_str *name)
 {
        int ret;
        struct btrfs_key key;
@@ -304,7 +304,7 @@ struct btrfs_dir_item *
 btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
                            struct btrfs_root *root,
                            struct btrfs_path *path, u64 dir,
-                           u64 index, const struct qstr *name, int mod)
+                           u64 index, const struct fscrypt_str *name, int mod)
 {
        struct btrfs_dir_item *di;
        struct btrfs_key key;
@@ -323,7 +323,7 @@ btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
 
 struct btrfs_dir_item *
 btrfs_search_dir_index_item(struct btrfs_root *root, struct btrfs_path *path,
-                           u64 dirid, const struct qstr *name)
+                           u64 dirid, const struct fscrypt_str *name)
 {
        struct btrfs_dir_item *di;
        struct btrfs_key key;
index 577e39c..d66bdba 100644 (file)
@@ -15,7 +15,7 @@
 
 struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
                                                   int slot,
-                                                  const struct qstr *name)
+                                                  const struct fscrypt_str *name)
 {
        struct btrfs_inode_ref *ref;
        unsigned long ptr;
@@ -42,7 +42,7 @@ struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
 
 struct btrfs_inode_extref *btrfs_find_name_in_ext_backref(
                struct extent_buffer *leaf, int slot, u64 ref_objectid,
-               const struct qstr *name)
+               const struct fscrypt_str *name)
 {
        struct btrfs_inode_extref *extref;
        unsigned long ptr;
@@ -81,7 +81,7 @@ struct btrfs_inode_extref *
 btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,
                          struct btrfs_root *root,
                          struct btrfs_path *path,
-                         const struct qstr *name,
+                         const struct fscrypt_str *name,
                          u64 inode_objectid, u64 ref_objectid, int ins_len,
                          int cow)
 {
@@ -104,7 +104,7 @@ btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,
 
 static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,
                                  struct btrfs_root *root,
-                                 const struct qstr *name,
+                                 const struct fscrypt_str *name,
                                  u64 inode_objectid, u64 ref_objectid,
                                  u64 *index)
 {
@@ -174,7 +174,7 @@ out:
 }
 
 int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
-                       struct btrfs_root *root, const struct qstr *name,
+                       struct btrfs_root *root, const struct fscrypt_str *name,
                        u64 inode_objectid, u64 ref_objectid, u64 *index)
 {
        struct btrfs_path *path;
@@ -251,7 +251,7 @@ out:
  */
 static int btrfs_insert_inode_extref(struct btrfs_trans_handle *trans,
                                     struct btrfs_root *root,
-                                    const struct qstr *name,
+                                    const struct fscrypt_str *name,
                                     u64 inode_objectid, u64 ref_objectid,
                                     u64 index)
 {
@@ -306,7 +306,7 @@ out:
 
 /* Will return 0, -ENOMEM, -EMLINK, or -EEXIST or anything from the CoW path */
 int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
-                          struct btrfs_root *root, const struct qstr *name,
+                          struct btrfs_root *root, const struct fscrypt_str *name,
                           u64 inode_objectid, u64 ref_objectid, u64 index)
 {
        struct btrfs_fs_info *fs_info = root->fs_info;
index 3c657c6..b80aeb7 100644 (file)
@@ -64,10 +64,10 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
                               struct btrfs_root *root,
                               struct btrfs_truncate_control *control);
 int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
-                          struct btrfs_root *root, const struct qstr *name,
+                          struct btrfs_root *root, const struct fscrypt_str *name,
                           u64 inode_objectid, u64 ref_objectid, u64 index);
 int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
-                       struct btrfs_root *root, const struct qstr *name,
+                       struct btrfs_root *root, const struct fscrypt_str *name,
                        u64 inode_objectid, u64 ref_objectid, u64 *index);
 int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans,
                             struct btrfs_root *root,
@@ -80,15 +80,15 @@ struct btrfs_inode_extref *btrfs_lookup_inode_extref(
                          struct btrfs_trans_handle *trans,
                          struct btrfs_root *root,
                          struct btrfs_path *path,
-                         const struct qstr *name,
+                         const struct fscrypt_str *name,
                          u64 inode_objectid, u64 ref_objectid, int ins_len,
                          int cow);
 
 struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
                                                   int slot,
-                                                  const struct qstr *name);
+                                                  const struct fscrypt_str *name);
 struct btrfs_inode_extref *btrfs_find_name_in_ext_backref(
                struct extent_buffer *leaf, int slot, u64 ref_objectid,
-               const struct qstr *name);
+               const struct fscrypt_str *name);
 
 #endif
index fa4b101..7e76d5e 100644 (file)
@@ -4286,7 +4286,7 @@ int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans,
 static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans,
                                struct btrfs_inode *dir,
                                struct btrfs_inode *inode,
-                               const struct qstr *name,
+                               const struct fscrypt_str *name,
                                struct btrfs_rename_ctx *rename_ctx)
 {
        struct btrfs_root *root = dir->root;
@@ -4389,7 +4389,7 @@ out:
 
 int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
                       struct btrfs_inode *dir, struct btrfs_inode *inode,
-                      const struct qstr *name)
+                      const struct fscrypt_str *name)
 {
        int ret;
 
@@ -4430,12 +4430,10 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
        struct inode *inode = d_inode(dentry);
        int ret;
        struct fscrypt_name fname;
-       struct qstr name;
 
        ret = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
        if (ret)
                return ret;
-       name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
 
        /* This needs to handle no-key deletions later on */
 
@@ -4449,7 +4447,7 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
                        0);
 
        ret = btrfs_unlink_inode(trans, BTRFS_I(dir), BTRFS_I(d_inode(dentry)),
-                                &name);
+                                &fname.disk_name);
        if (ret)
                goto end_trans;
 
@@ -4476,7 +4474,6 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
        struct extent_buffer *leaf;
        struct btrfs_dir_item *di;
        struct btrfs_key key;
-       struct qstr name;
        u64 index;
        int ret;
        u64 objectid;
@@ -4486,7 +4483,6 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
        ret = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
        if (ret)
                return ret;
-       name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
 
        /* This needs to handle no-key deletions later on */
 
@@ -4506,7 +4502,8 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
                goto out;
        }
 
-       di = btrfs_lookup_dir_item(trans, root, path, dir_ino, &name, -1);
+       di = btrfs_lookup_dir_item(trans, root, path, dir_ino,
+                                  &fname.disk_name, -1);
        if (IS_ERR_OR_NULL(di)) {
                ret = di ? PTR_ERR(di) : -ENOENT;
                goto out;
@@ -4532,7 +4529,7 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
         * call btrfs_del_root_ref, and it _shouldn't_ fail.
         */
        if (btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID) {
-               di = btrfs_search_dir_index_item(root, path, dir_ino, &name);
+               di = btrfs_search_dir_index_item(root, path, dir_ino, &fname.disk_name);
                if (IS_ERR_OR_NULL(di)) {
                        if (!di)
                                ret = -ENOENT;
@@ -4549,7 +4546,7 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
        } else {
                ret = btrfs_del_root_ref(trans, objectid,
                                         root->root_key.objectid, dir_ino,
-                                        &index, &name);
+                                        &index, &fname.disk_name);
                if (ret) {
                        btrfs_abort_transaction(trans, ret);
                        goto out;
@@ -4562,7 +4559,7 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
                goto out;
        }
 
-       btrfs_i_size_write(BTRFS_I(dir), dir->i_size - name.len * 2);
+       btrfs_i_size_write(BTRFS_I(dir), dir->i_size - fname.disk_name.len * 2);
        inode_inc_iversion(dir);
        dir->i_mtime = current_time(dir);
        dir->i_ctime = dir->i_mtime;
@@ -4585,7 +4582,7 @@ static noinline int may_destroy_subvol(struct btrfs_root *root)
        struct btrfs_path *path;
        struct btrfs_dir_item *di;
        struct btrfs_key key;
-       struct qstr name = QSTR_INIT("default", 7);
+       struct fscrypt_str name = FSTR_INIT("default", 7);
        u64 dir_id;
        int ret;
 
@@ -4836,7 +4833,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
        struct btrfs_trans_handle *trans;
        u64 last_unlink_trans;
        struct fscrypt_name fname;
-       struct qstr name;
 
        if (inode->i_size > BTRFS_EMPTY_DIR_SIZE)
                return -ENOTEMPTY;
@@ -4852,7 +4848,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
        err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
        if (err)
                return err;
-       name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
 
        /* This needs to handle no-key deletions later on */
 
@@ -4875,7 +4870,7 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
 
        /* now the directory is empty */
        err = btrfs_unlink_inode(trans, BTRFS_I(dir), BTRFS_I(d_inode(dentry)),
-                                &name);
+                                &fname.disk_name);
        if (!err) {
                btrfs_i_size_write(BTRFS_I(inode), 0);
                /*
@@ -5569,7 +5564,6 @@ no_delete:
 static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
                               struct btrfs_key *location, u8 *type)
 {
-       struct qstr name;
        struct btrfs_dir_item *di;
        struct btrfs_path *path;
        struct btrfs_root *root = BTRFS_I(dir)->root;
@@ -5584,12 +5578,10 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
        if (ret)
                goto out;
 
-       name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
-
        /* This needs to handle no-key deletions later on */
 
        di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(BTRFS_I(dir)),
-                                  &name, 0);
+                                  &fname.disk_name, 0);
        if (IS_ERR_OR_NULL(di)) {
                ret = di ? PTR_ERR(di) : -ENOENT;
                goto out;
@@ -5601,7 +5593,7 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
                ret = -EUCLEAN;
                btrfs_warn(root->fs_info,
 "%s gets something invalid in DIR_ITEM (name %s, directory ino %llu, location(%llu %u %llu))",
-                          __func__, name.name, btrfs_ino(BTRFS_I(dir)),
+                          __func__, fname.disk_name.name, btrfs_ino(BTRFS_I(dir)),
                           location->objectid, location->type, location->offset);
        }
        if (!ret)
@@ -5631,14 +5623,11 @@ static int fixup_tree_root_location(struct btrfs_fs_info *fs_info,
        int ret;
        int err = 0;
        struct fscrypt_name fname;
-       struct qstr name;
 
        ret = fscrypt_setup_filename(dir, &dentry->d_name, 0, &fname);
        if (ret)
                return ret;
 
-       name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
-
        path = btrfs_alloc_path();
        if (!path) {
                err = -ENOMEM;
@@ -5660,11 +5649,11 @@ static int fixup_tree_root_location(struct btrfs_fs_info *fs_info,
        leaf = path->nodes[0];
        ref = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_root_ref);
        if (btrfs_root_ref_dirid(leaf, ref) != btrfs_ino(BTRFS_I(dir)) ||
-           btrfs_root_ref_name_len(leaf, ref) != name.len)
+           btrfs_root_ref_name_len(leaf, ref) != fname.disk_name.len)
                goto out;
 
-       ret = memcmp_extent_buffer(leaf, name.name, (unsigned long)(ref + 1),
-                                  name.len);
+       ret = memcmp_extent_buffer(leaf, fname.disk_name.name,
+                                  (unsigned long)(ref + 1), fname.disk_name.len);
        if (ret)
                goto out;
 
@@ -6297,7 +6286,6 @@ int btrfs_new_inode_prepare(struct btrfs_new_inode_args *args,
                                             &args->fname);
                if (ret)
                        return ret;
-               args->name = (struct qstr)FSTR_TO_QSTR(&args->fname.disk_name);
        }
 
        ret = posix_acl_create(dir, &inode->i_mode, &args->default_acl, &args->acl);
@@ -6380,7 +6368,7 @@ int btrfs_create_new_inode(struct btrfs_trans_handle *trans,
 {
        struct inode *dir = args->dir;
        struct inode *inode = args->inode;
-       const struct qstr *name = args->orphan ? NULL : &args->dentry->d_name;
+       const struct fscrypt_str *name = args->orphan ? NULL : &args->fname.disk_name;
        struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
        struct btrfs_root *root;
        struct btrfs_inode_item *inode_item;
@@ -6615,7 +6603,7 @@ out:
  */
 int btrfs_add_link(struct btrfs_trans_handle *trans,
                   struct btrfs_inode *parent_inode, struct btrfs_inode *inode,
-                  const struct qstr *name, int add_backref, u64 index)
+                  const struct fscrypt_str *name, int add_backref, u64 index)
 {
        int ret = 0;
        struct btrfs_key key;
@@ -6771,7 +6759,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
        struct inode *inode = d_inode(old_dentry);
        struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
        struct fscrypt_name fname;
-       struct qstr name;
        u64 index;
        int err;
        int drop_inode = 0;
@@ -6787,8 +6774,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
        if (err)
                goto fail;
 
-       name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
-
        err = btrfs_set_inode_index(BTRFS_I(dir), &index);
        if (err)
                goto fail;
@@ -6815,7 +6800,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
        set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags);
 
        err = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode),
-                            &name, 1, index);
+                            &fname.disk_name, 1, index);
 
        if (err) {
                drop_inode = 1;
@@ -9080,7 +9065,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
        int ret2;
        bool need_abort = false;
        struct fscrypt_name old_fname, new_fname;
-       struct qstr old_name, new_name;
+       struct fscrypt_str *old_name, *new_name;
 
        /*
         * For non-subvolumes allow exchange only within one subvolume, in the
@@ -9102,8 +9087,8 @@ static int btrfs_rename_exchange(struct inode *old_dir,
                return ret;
        }
 
-       old_name = (struct qstr)FSTR_TO_QSTR(&old_fname.disk_name);
-       new_name = (struct qstr)FSTR_TO_QSTR(&new_fname.disk_name);
+       old_name = &old_fname.disk_name;
+       new_name = &new_fname.disk_name;
 
        /* close the race window with snapshot create/destroy ioctl */
        if (old_ino == BTRFS_FIRST_FREE_OBJECTID ||
@@ -9172,7 +9157,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
                /* force full log commit if subvolume involved. */
                btrfs_set_log_full_commit(trans);
        } else {
-               ret = btrfs_insert_inode_ref(trans, dest, &new_name, old_ino,
+               ret = btrfs_insert_inode_ref(trans, dest, new_name, old_ino,
                                             btrfs_ino(BTRFS_I(new_dir)),
                                             old_idx);
                if (ret)
@@ -9185,7 +9170,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
                /* force full log commit if subvolume involved. */
                btrfs_set_log_full_commit(trans);
        } else {
-               ret = btrfs_insert_inode_ref(trans, root, &old_name, new_ino,
+               ret = btrfs_insert_inode_ref(trans, root, old_name, new_ino,
                                             btrfs_ino(BTRFS_I(old_dir)),
                                             new_idx);
                if (ret) {
@@ -9220,7 +9205,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
        } else { /* src is an inode */
                ret = __btrfs_unlink_inode(trans, BTRFS_I(old_dir),
                                           BTRFS_I(old_dentry->d_inode),
-                                          &old_name, &old_rename_ctx);
+                                          old_name, &old_rename_ctx);
                if (!ret)
                        ret = btrfs_update_inode(trans, root, BTRFS_I(old_inode));
        }
@@ -9235,7 +9220,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
        } else { /* dest is an inode */
                ret = __btrfs_unlink_inode(trans, BTRFS_I(new_dir),
                                           BTRFS_I(new_dentry->d_inode),
-                                          &new_name, &new_rename_ctx);
+                                          new_name, &new_rename_ctx);
                if (!ret)
                        ret = btrfs_update_inode(trans, dest, BTRFS_I(new_inode));
        }
@@ -9245,14 +9230,14 @@ static int btrfs_rename_exchange(struct inode *old_dir,
        }
 
        ret = btrfs_add_link(trans, BTRFS_I(new_dir), BTRFS_I(old_inode),
-                            &new_name, 0, old_idx);
+                            new_name, 0, old_idx);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
                goto out_fail;
        }
 
        ret = btrfs_add_link(trans, BTRFS_I(old_dir), BTRFS_I(new_inode),
-                            &old_name, 0, new_idx);
+                            old_name, 0, new_idx);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
                goto out_fail;
@@ -9337,7 +9322,6 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
        int ret2;
        u64 old_ino = btrfs_ino(BTRFS_I(old_inode));
        struct fscrypt_name old_fname, new_fname;
-       struct qstr old_name, new_name;
 
        if (btrfs_ino(BTRFS_I(new_dir)) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
                return -EPERM;
@@ -9364,12 +9348,8 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
                return ret;
        }
 
-       old_name = (struct qstr)FSTR_TO_QSTR(&old_fname.disk_name);
-       new_name = (struct qstr)FSTR_TO_QSTR(&new_fname.disk_name);
-
        /* check for collisions, even if the  name isn't there */
-       ret = btrfs_check_dir_item_collision(dest, new_dir->i_ino, &new_name);
-
+       ret = btrfs_check_dir_item_collision(dest, new_dir->i_ino, &new_fname.disk_name);
        if (ret) {
                if (ret == -EEXIST) {
                        /* we shouldn't get
@@ -9462,8 +9442,9 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
                /* force full log commit if subvolume involved. */
                btrfs_set_log_full_commit(trans);
        } else {
-               ret = btrfs_insert_inode_ref(trans, dest, &new_name, old_ino,
-                                            btrfs_ino(BTRFS_I(new_dir)), index);
+               ret = btrfs_insert_inode_ref(trans, dest, &new_fname.disk_name,
+                                            old_ino, btrfs_ino(BTRFS_I(new_dir)),
+                                            index);
                if (ret)
                        goto out_fail;
        }
@@ -9486,7 +9467,7 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
        } else {
                ret = __btrfs_unlink_inode(trans, BTRFS_I(old_dir),
                                           BTRFS_I(d_inode(old_dentry)),
-                                          &old_name, &rename_ctx);
+                                          &old_fname.disk_name, &rename_ctx);
                if (!ret)
                        ret = btrfs_update_inode(trans, root, BTRFS_I(old_inode));
        }
@@ -9505,7 +9486,7 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
                } else {
                        ret = btrfs_unlink_inode(trans, BTRFS_I(new_dir),
                                                 BTRFS_I(d_inode(new_dentry)),
-                                                &new_name);
+                                                &new_fname.disk_name);
                }
                if (!ret && new_inode->i_nlink == 0)
                        ret = btrfs_orphan_add(trans,
@@ -9517,7 +9498,7 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
        }
 
        ret = btrfs_add_link(trans, BTRFS_I(new_dir), BTRFS_I(old_inode),
-                            &new_name, 0, index);
+                            &new_fname.disk_name, 0, index);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
                goto out_fail;
index fde55d0..2132e3e 100644 (file)
@@ -951,7 +951,7 @@ static noinline int btrfs_mksubvol(const struct path *parent,
        struct inode *dir = d_inode(parent->dentry);
        struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
        struct dentry *dentry;
-       struct qstr name_str = QSTR_INIT(name, namelen);
+       struct fscrypt_str name_str = FSTR_INIT((char *)name, namelen);
        int error;
 
        error = down_write_killable_nested(&dir->i_rwsem, I_MUTEX_PARENT);
@@ -3779,7 +3779,7 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp)
        struct btrfs_trans_handle *trans;
        struct btrfs_path *path = NULL;
        struct btrfs_disk_key disk_key;
-       struct qstr name = QSTR_INIT("default", 7);
+       struct fscrypt_str name = FSTR_INIT("default", 7);
        u64 objectid = 0;
        u64 dir_id;
        int ret;
index 848a720..6aab981 100644 (file)
@@ -331,7 +331,7 @@ out:
 
 int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
                       u64 ref_id, u64 dirid, u64 *sequence,
-                      const struct qstr *name)
+                      const struct fscrypt_str *name)
 {
        struct btrfs_root *tree_root = trans->fs_info->tree_root;
        struct btrfs_path *path;
@@ -403,7 +403,7 @@ out:
  */
 int btrfs_add_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
                       u64 ref_id, u64 dirid, u64 sequence,
-                      const struct qstr *name)
+                      const struct fscrypt_str *name)
 {
        struct btrfs_root *tree_root = trans->fs_info->tree_root;
        struct btrfs_key key;
index d0feeea..0ebca9d 100644 (file)
@@ -1597,7 +1597,7 @@ static int gen_unique_name(struct send_ctx *sctx,
                return -ENOMEM;
 
        while (1) {
-               struct qstr tmp_name;
+               struct fscrypt_str tmp_name;
 
                len = snprintf(tmp, sizeof(tmp), "o%llu-%llu-%llu",
                                ino, gen, idx);
@@ -1757,7 +1757,7 @@ static int lookup_dir_item_inode(struct btrfs_root *root,
        struct btrfs_dir_item *di;
        struct btrfs_key key;
        struct btrfs_path *path;
-       struct qstr name_str = QSTR_INIT(name, name_len);
+       struct fscrypt_str name_str = FSTR_INIT((char *)name, name_len);
 
        path = alloc_path_for_send();
        if (!path)
index 13d33e5..33bf211 100644 (file)
@@ -1423,7 +1423,7 @@ static int get_default_subvol_objectid(struct btrfs_fs_info *fs_info, u64 *objec
        struct btrfs_dir_item *di;
        struct btrfs_path *path;
        struct btrfs_key location;
-       struct qstr name = QSTR_INIT("default", 7);
+       struct fscrypt_str name = FSTR_INIT("default", 7);
        u64 dir_id;
 
        path = btrfs_alloc_path();
index 3751b15..0d44d50 100644 (file)
@@ -1625,7 +1625,6 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
        u64 root_flags;
        unsigned int nofs_flags;
        struct fscrypt_name fname;
-       struct qstr name;
 
        ASSERT(pending->path);
        path = pending->path;
@@ -1645,7 +1644,6 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
        memalloc_nofs_restore(nofs_flags);
        if (pending->error)
                goto free_pending;
-       name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
 
        pending->error = btrfs_get_free_objectid(tree_root, &objectid);
        if (pending->error)
@@ -1693,7 +1691,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
        /* check if there is a file/dir which has the same name. */
        dir_item = btrfs_lookup_dir_item(NULL, parent_root, path,
                                         btrfs_ino(BTRFS_I(parent_inode)),
-                                        &name, 0);
+                                        &fname.disk_name, 0);
        if (dir_item != NULL && !IS_ERR(dir_item)) {
                pending->error = -EEXIST;
                goto dir_item_existed;
@@ -1788,7 +1786,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
        ret = btrfs_add_root_ref(trans, objectid,
                                 parent_root->root_key.objectid,
                                 btrfs_ino(BTRFS_I(parent_inode)), index,
-                                &name);
+                                &fname.disk_name);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
                goto fail;
@@ -1820,8 +1818,9 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
        if (ret < 0)
                goto fail;
 
-       ret = btrfs_insert_dir_item(trans, &name, BTRFS_I(parent_inode), &key,
-                                   BTRFS_FT_DIR, index);
+       ret = btrfs_insert_dir_item(trans, &fname.disk_name,
+                                   BTRFS_I(parent_inode), &key, BTRFS_FT_DIR,
+                                   index);
        /* We have check then name at the beginning, so it is impossible. */
        BUG_ON(ret == -EEXIST || ret == -EOVERFLOW);
        if (ret) {
@@ -1830,7 +1829,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
        }
 
        btrfs_i_size_write(BTRFS_I(parent_inode), parent_inode->i_size +
-                                                 name.len * 2);
+                                                 fname.disk_name.len * 2);
        parent_inode->i_mtime = current_time(parent_inode);
        parent_inode->i_ctime = parent_inode->i_mtime;
        ret = btrfs_update_inode_fallback(trans, parent_root, BTRFS_I(parent_inode));
index 3f3d10a..7002cc3 100644 (file)
@@ -598,7 +598,7 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 }
 
 static int read_alloc_one_name(struct extent_buffer *eb, void *start, int len,
-                              struct qstr *name)
+                              struct fscrypt_str *name)
 {
        char *buf;
 
@@ -917,7 +917,7 @@ out:
 static int unlink_inode_for_log_replay(struct btrfs_trans_handle *trans,
                                       struct btrfs_inode *dir,
                                       struct btrfs_inode *inode,
-                                      const struct qstr *name)
+                                      const struct fscrypt_str *name)
 {
        int ret;
 
@@ -948,7 +948,7 @@ static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,
 {
        struct btrfs_root *root = dir->root;
        struct inode *inode;
-       struct qstr name;
+       struct fscrypt_str name;
        struct extent_buffer *leaf;
        struct btrfs_key location;
        int ret;
@@ -989,7 +989,7 @@ out:
 static noinline int inode_in_dir(struct btrfs_root *root,
                                 struct btrfs_path *path,
                                 u64 dirid, u64 objectid, u64 index,
-                                struct qstr *name)
+                                struct fscrypt_str *name)
 {
        struct btrfs_dir_item *di;
        struct btrfs_key location;
@@ -1036,7 +1036,7 @@ out:
 static noinline int backref_in_log(struct btrfs_root *log,
                                   struct btrfs_key *key,
                                   u64 ref_objectid,
-                                  const struct qstr *name)
+                                  const struct fscrypt_str *name)
 {
        struct btrfs_path *path;
        int ret;
@@ -1072,7 +1072,7 @@ static inline int __add_inode_ref(struct btrfs_trans_handle *trans,
                                  struct btrfs_inode *dir,
                                  struct btrfs_inode *inode,
                                  u64 inode_objectid, u64 parent_objectid,
-                                 u64 ref_index, struct qstr *name)
+                                 u64 ref_index, struct fscrypt_str *name)
 {
        int ret;
        struct extent_buffer *leaf;
@@ -1106,7 +1106,7 @@ again:
                ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
                ptr_end = ptr + btrfs_item_size(leaf, path->slots[0]);
                while (ptr < ptr_end) {
-                       struct qstr victim_name;
+                       struct fscrypt_str victim_name;
 
                        victim_ref = (struct btrfs_inode_ref *)ptr;
                        ret = read_alloc_one_name(leaf, (victim_ref + 1),
@@ -1156,7 +1156,7 @@ again:
                base = btrfs_item_ptr_offset(leaf, path->slots[0]);
 
                while (cur_offset < item_size) {
-                       struct qstr victim_name;
+                       struct fscrypt_str victim_name;
 
                        extref = (struct btrfs_inode_extref *)(base + cur_offset);
 
@@ -1231,7 +1231,7 @@ next:
 }
 
 static int extref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
-                            struct qstr *name, u64 *index,
+                            struct fscrypt_str *name, u64 *index,
                             u64 *parent_objectid)
 {
        struct btrfs_inode_extref *extref;
@@ -1253,7 +1253,7 @@ static int extref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
 }
 
 static int ref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
-                         struct qstr *name, u64 *index)
+                         struct fscrypt_str *name, u64 *index)
 {
        struct btrfs_inode_ref *ref;
        int ret;
@@ -1305,7 +1305,7 @@ again:
        ref_ptr = btrfs_item_ptr_offset(eb, path->slots[0]);
        ref_end = ref_ptr + btrfs_item_size(eb, path->slots[0]);
        while (ref_ptr < ref_end) {
-               struct qstr name;
+               struct fscrypt_str name;
                u64 parent_id;
 
                if (key->type == BTRFS_INODE_EXTREF_KEY) {
@@ -1373,7 +1373,7 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans,
        struct inode *inode = NULL;
        unsigned long ref_ptr;
        unsigned long ref_end;
-       struct qstr name;
+       struct fscrypt_str name;
        int ret;
        int log_ref_ver = 0;
        u64 parent_objectid;
@@ -1767,7 +1767,7 @@ static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans,
 static noinline int insert_one_name(struct btrfs_trans_handle *trans,
                                    struct btrfs_root *root,
                                    u64 dirid, u64 index,
-                                   const struct qstr *name,
+                                   const struct fscrypt_str *name,
                                    struct btrfs_key *location)
 {
        struct inode *inode;
@@ -1845,7 +1845,7 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans,
                                    struct btrfs_dir_item *di,
                                    struct btrfs_key *key)
 {
-       struct qstr name;
+       struct fscrypt_str name;
        struct btrfs_dir_item *dir_dst_di;
        struct btrfs_dir_item *index_dst_di;
        bool dir_dst_matches = false;
@@ -2125,7 +2125,7 @@ static noinline int check_item_in_log(struct btrfs_trans_handle *trans,
        struct extent_buffer *eb;
        int slot;
        struct btrfs_dir_item *di;
-       struct qstr name;
+       struct fscrypt_str name;
        struct inode *inode = NULL;
        struct btrfs_key location;
 
@@ -3423,7 +3423,7 @@ static int del_logged_dentry(struct btrfs_trans_handle *trans,
                             struct btrfs_root *log,
                             struct btrfs_path *path,
                             u64 dir_ino,
-                            const struct qstr *name,
+                            const struct fscrypt_str *name,
                             u64 index)
 {
        struct btrfs_dir_item *di;
@@ -3470,7 +3470,7 @@ static int del_logged_dentry(struct btrfs_trans_handle *trans,
  */
 void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
                                  struct btrfs_root *root,
-                                 const struct qstr *name,
+                                 const struct fscrypt_str *name,
                                  struct btrfs_inode *dir, u64 index)
 {
        struct btrfs_path *path;
@@ -3509,7 +3509,7 @@ out_unlock:
 /* see comments for btrfs_del_dir_entries_in_log */
 void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
                                struct btrfs_root *root,
-                               const struct qstr *name,
+                               const struct fscrypt_str *name,
                                struct btrfs_inode *inode, u64 dirid)
 {
        struct btrfs_root *log;
@@ -5244,7 +5244,7 @@ static int btrfs_check_ref_name_override(struct extent_buffer *eb,
                u32 this_len;
                unsigned long name_ptr;
                struct btrfs_dir_item *di;
-               struct qstr name_str;
+               struct fscrypt_str name_str;
 
                if (key->type == BTRFS_INODE_REF_KEY) {
                        struct btrfs_inode_ref *iref;
@@ -7447,7 +7447,6 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
                struct btrfs_root *log = old_dir->root->log_root;
                struct btrfs_path *path;
                struct fscrypt_name fname;
-               struct qstr name;
 
                ASSERT(old_dir_index >= BTRFS_DIR_START_INDEX);
 
@@ -7455,7 +7454,6 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
                                             &old_dentry->d_name, 0, &fname);
                if (ret)
                        goto out;
-               name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
                /*
                 * We have two inodes to update in the log, the old directory and
                 * the inode that got renamed, so we must pin the log to prevent
@@ -7491,7 +7489,7 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
                 */
                mutex_lock(&old_dir->log_mutex);
                ret = del_logged_dentry(trans, log, path, btrfs_ino(old_dir),
-                                       &name, old_dir_index);
+                                       &fname.disk_name, old_dir_index);
                if (ret > 0) {
                        /*
                         * The dentry does not exist in the log, so record its
index 8c9a387..85b4307 100644 (file)
@@ -87,11 +87,11 @@ int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,
                          struct btrfs_log_ctx *ctx);
 void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
                                  struct btrfs_root *root,
-                                 const struct qstr *name,
+                                 const struct fscrypt_str *name,
                                  struct btrfs_inode *dir, u64 index);
 void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
                                struct btrfs_root *root,
-                               const struct qstr *name,
+                               const struct fscrypt_str *name,
                                struct btrfs_inode *inode, u64 dirid);
 void btrfs_end_log_trans(struct btrfs_root *root);
 void btrfs_pin_log_trans(struct btrfs_root *root);