Skip to content

Commit

Permalink
btrfs: unset reloc control if we fail to recover
Browse files Browse the repository at this point in the history
If we fail to load an fs root, or fail to start a transaction we can
bail without unsetting the reloc control, which leads to problems later
when we free the reloc control but still have it attached to the file
system.

In the normal path we'll end up calling unset_reloc_control() twice, but
all it does is set fs_info->reloc_control = NULL, and we can only have
one balance at a time so it's not racey.

CC: [email protected] # 5.4+
Reviewed-by: Qu Wenruo <[email protected]>
Signed-off-by: Josef Bacik <[email protected]>
Reviewed-by: David Sterba <[email protected]>
Signed-off-by: David Sterba <[email protected]>
  • Loading branch information
josefbacik authored and kdave committed Mar 23, 2020
1 parent 8e19c97 commit fb2d83e
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions fs/btrfs/relocation.c
Original file line number Diff line number Diff line change
Expand Up @@ -4460,9 +4460,8 @@ int btrfs_recover_relocation(struct btrfs_root *root)

trans = btrfs_join_transaction(rc->extent_root);
if (IS_ERR(trans)) {
unset_reloc_control(rc);
err = PTR_ERR(trans);
goto out_free;
goto out_unset;
}

rc->merge_reloc_tree = 1;
Expand All @@ -4482,7 +4481,7 @@ int btrfs_recover_relocation(struct btrfs_root *root)
if (IS_ERR(fs_root)) {
err = PTR_ERR(fs_root);
list_add_tail(&reloc_root->root_list, &reloc_roots);
goto out_free;
goto out_unset;
}

err = __add_reloc_root(reloc_root);
Expand All @@ -4493,7 +4492,7 @@ int btrfs_recover_relocation(struct btrfs_root *root)

err = btrfs_commit_transaction(trans);
if (err)
goto out_free;
goto out_unset;

merge_reloc_roots(rc);

Expand All @@ -4509,7 +4508,8 @@ int btrfs_recover_relocation(struct btrfs_root *root)
ret = clean_dirty_subvols(rc);
if (ret < 0 && !err)
err = ret;
out_free:
out_unset:
unset_reloc_control(rc);
kfree(rc);
out:
if (!list_empty(&reloc_roots))
Expand Down

0 comments on commit fb2d83e

Please sign in to comment.