On 2/13/20 5:48 AM, Nikolay Borisov wrote:
On 11.02.20 г. 23:40 ч., Josef Bacik wrote:
While running my error injection script I hit a panic when we tried to
clean up the fs_root when free'ing the fs_root. This is because
fs_info->fs_root == PTR_ERR(-EIO), which isn't great. Fix this by
setting fs_info->fs_root = NULL; if we fail to read the root.
Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
While looking to see how ->fs_root (git grep "\->fs_root\W" fs/btrfs) is
used I realized we almost never query it through that member. It's
cleaned up via the btrfs_free_fs_roots which queries the root radix.
Given this I fail to see how the presence of a bogus value in
fs_info->fs_root would cause a crash (it's certainly wrong so your patch
per-se is fine). Can you provide an example call trace?
We do a btrfs_put_root(fs_info->fs_root); in btrfs_free_fs_info. There's for
sure an argument to be made for getting rid of fs_info->fs_root, and just using
the radix lookup. Once all of my root ref patches are merged I'll take a run at
that. Thanks,
Josef