mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 02:19:54 -04:00
btrfs: hold a ref on the root in btrfs_recover_log_trees
We replay the log into arbitrary fs roots, hold a ref on the root while we're doing this. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
committed by
David Sterba
parent
5119cfc36f
commit
ca2037fba6
@@ -6163,6 +6163,10 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
|
||||
tmp_key.offset = (u64)-1;
|
||||
|
||||
wc.replay_dest = btrfs_get_fs_root(fs_info, &tmp_key, true);
|
||||
if (!IS_ERR(wc.replay_dest)) {
|
||||
if (!btrfs_grab_fs_root(wc.replay_dest))
|
||||
wc.replay_dest = ERR_PTR(-ENOENT);
|
||||
}
|
||||
if (IS_ERR(wc.replay_dest)) {
|
||||
ret = PTR_ERR(wc.replay_dest);
|
||||
|
||||
@@ -6219,6 +6223,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
|
||||
}
|
||||
|
||||
wc.replay_dest->log_root = NULL;
|
||||
btrfs_put_fs_root(wc.replay_dest);
|
||||
free_extent_buffer(log->node);
|
||||
free_extent_buffer(log->commit_root);
|
||||
kfree(log);
|
||||
|
||||
Reference in New Issue
Block a user