On 2020/2/12 上午5: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 Reviewed-by: Qu Wenruo Just one off-topic idea, can we have test cases in fstests to do specific error injection test? For your fix, we can inject ENOMEM error with call chain btrfs_read_fs_root_no_name()->open_ctree() to get a 100% reproducible test, which looks to be a solid test case. Thanks, Qu > --- > fs/btrfs/disk-io.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c > index eb441fa3711b..5b6140482cef 100644 > --- a/fs/btrfs/disk-io.c > +++ b/fs/btrfs/disk-io.c > @@ -3260,6 +3260,7 @@ int __cold open_ctree(struct super_block *sb, > if (IS_ERR(fs_info->fs_root)) { > err = PTR_ERR(fs_info->fs_root); > btrfs_warn(fs_info, "failed to read fs tree: %d", err); > + fs_info->fs_root = NULL; > goto fail_qgroup; > } > >