From: Josef Bacik Date: Wed, 20 Nov 2019 20:34:12 +0000 (-0800) Subject: btrfs: hold a ref on the root in btrfs_recover_log_trees X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b25a4a1204e27ec909d5b5f9a2970f03e2222da9;p=linux 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 --- diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index a4321bdcbf3e..07e7fd508213 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6292,6 +6292,10 @@ again: 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); @@ -6348,6 +6352,7 @@ again: } 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);