btrfs: make relocation use btrfs_read_tree_root()
authorJosef Bacik <josef@toxicpanda.com>
Fri, 24 Jan 2020 14:32:22 +0000 (09:32 -0500)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:25 +0000 (17:01 +0100)
Relocation has it's special roots, we don't want to save these in the
root cache either, so swap it to use btrfs_read_tree_root().  However
the reloc root does need REF_COWS set, so make sure we set it everywhere
we use this helper, as it no longer does the REF_COWS setting.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/relocation.c

index 35873254d901fc384b555e8a60b186c3edac877d..2056b0e643bb9d1f8fda7e8589bb5534a696f324 100644 (file)
@@ -1494,8 +1494,9 @@ static struct btrfs_root *create_reloc_root(struct btrfs_trans_handle *trans,
        BUG_ON(ret);
        kfree(root_item);
 
-       reloc_root = btrfs_read_fs_root(fs_info->tree_root, &root_key);
+       reloc_root = btrfs_read_tree_root(fs_info->tree_root, &root_key);
        BUG_ON(IS_ERR(reloc_root));
+       set_bit(BTRFS_ROOT_REF_COWS, &reloc_root->state);
        reloc_root->last_trans = trans->transid;
        return reloc_root;
 }
@@ -4584,12 +4585,13 @@ int btrfs_recover_relocation(struct btrfs_root *root)
                    key.type != BTRFS_ROOT_ITEM_KEY)
                        break;
 
-               reloc_root = btrfs_read_fs_root(root, &key);
+               reloc_root = btrfs_read_tree_root(root, &key);
                if (IS_ERR(reloc_root)) {
                        err = PTR_ERR(reloc_root);
                        goto out;
                }
 
+               set_bit(BTRFS_ROOT_REF_COWS, &reloc_root->state);
                list_add(&reloc_root->root_list, &reloc_roots);
 
                if (btrfs_root_refs(&reloc_root->root_item) > 0) {