OSDN Git Service

btrfs: hold a ref on the root in prepare_to_merge
authorJosef Bacik <josef@toxicpanda.com>
Fri, 24 Jan 2020 14:32:39 +0000 (09:32 -0500)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:29 +0000 (17:01 +0100)
We look up the reloc roots corresponding root, we need to hold a ref on
that root.

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 83fd74c..b858508 100644 (file)
@@ -2521,6 +2521,7 @@ again:
 
                root = read_fs_root(fs_info, reloc_root->root_key.offset);
                BUG_ON(IS_ERR(root));
+               BUG_ON(!btrfs_grab_fs_root(root));
                BUG_ON(root->reloc_root != reloc_root);
 
                /*
@@ -2532,6 +2533,7 @@ again:
                btrfs_update_reloc_root(trans, root);
 
                list_add(&reloc_root->root_list, &reloc_roots);
+               btrfs_put_fs_root(root);
        }
 
        list_splice(&reloc_roots, &rc->reloc_roots);