From: Josef Bacik Date: Fri, 24 Jan 2020 14:32:42 +0000 (-0500) Subject: btrfs: hold a ref on the root in find_data_references X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=3d7babdcf2cc87367e694f9b67460dde22c48319;p=openwrt%2Fstaging%2Fblogic.git btrfs: hold a ref on the root in find_data_references We're looking up the data references for the bytenr in a root, we need to hold a ref on that root while we're doing that. Signed-off-by: Josef Bacik Reviewed-by: David Sterba Signed-off-by: David Sterba --- diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 0336a48d7d96..976917ca412a 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3751,7 +3751,11 @@ static int find_data_references(struct reloc_control *rc, root = read_fs_root(fs_info, ref_root); if (IS_ERR(root)) { err = PTR_ERR(root); - goto out; + goto out_free; + } + if (!btrfs_grab_fs_root(root)) { + err = -ENOENT; + goto out_free; } key.objectid = ref_objectid; @@ -3864,6 +3868,8 @@ next: } out: + btrfs_put_fs_root(root); +out_free: btrfs_free_path(path); return err; }