[05/43] btrfs: make relocation use btrfs_read_tree_root()
diff mbox series

Message ID 20200117212602.6737-6-josef@toxicpanda.com
State New
Headers show
Series
  • Cleanup how we handle root refs, part 1
Related show

Commit Message

Josef Bacik Jan. 17, 2020, 9:25 p.m. UTC
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_roo().  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.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
---
 fs/btrfs/relocation.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Nikolay Borisov Jan. 22, 2020, 9:22 a.m. UTC | #1
On 17.01.20 г. 23:25 ч., Josef Bacik wrote:
> 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_roo().  However the

btrfs_read_fs_root has really turned into a simple wrapper across
btrfs_read_tree_root so that's the main reason why you convert it.

> 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.
> 
> Signed-off-by: Josef Bacik <josef@toxicpanda.com>


The only thing that this sequence misses is calling
btrfs_check_and_init_root_item, but since it's used to work around a bug
in older btrfs versions We can simply ignore it. LGTM:

Reviewed-by: Nikolay Borisov <nborisov@suse.com>

> ---
>  fs/btrfs/relocation.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
> index 995d4b8b1cfd..aa3aa8e0c0ea 100644
> --- a/fs/btrfs/relocation.c
> +++ b/fs/btrfs/relocation.c
> @@ -1447,8 +1447,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;
>  }
> @@ -4537,12 +4538,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) {
>

Patch
diff mbox series

diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index 995d4b8b1cfd..aa3aa8e0c0ea 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -1447,8 +1447,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;
 }
@@ -4537,12 +4538,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) {