Commit 586e46e2 authored by Ilya Dryomov's avatar Ilya Dryomov

Btrfs: close devices on all error paths in open_ctree()

Fix a bug introduced by 7e662854 where we would leave devices busy on
certain error paths in open_ctree().  fs_info is guaranteed to be
non-NULL now so it's safe to dereference it on all error paths.
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 4d34b278
...@@ -2460,21 +2460,20 @@ struct btrfs_root *open_ctree(struct super_block *sb, ...@@ -2460,21 +2460,20 @@ struct btrfs_root *open_ctree(struct super_block *sb,
btrfs_stop_workers(&fs_info->caching_workers); btrfs_stop_workers(&fs_info->caching_workers);
fail_alloc: fail_alloc:
fail_iput: fail_iput:
btrfs_mapping_tree_free(&fs_info->mapping_tree);
invalidate_inode_pages2(fs_info->btree_inode->i_mapping); invalidate_inode_pages2(fs_info->btree_inode->i_mapping);
iput(fs_info->btree_inode); iput(fs_info->btree_inode);
btrfs_close_devices(fs_info->fs_devices);
btrfs_mapping_tree_free(&fs_info->mapping_tree);
fail_bdi: fail_bdi:
bdi_destroy(&fs_info->bdi); bdi_destroy(&fs_info->bdi);
fail_srcu: fail_srcu:
cleanup_srcu_struct(&fs_info->subvol_srcu); cleanup_srcu_struct(&fs_info->subvol_srcu);
fail: fail:
btrfs_close_devices(fs_info->fs_devices);
free_fs_info(fs_info); free_fs_info(fs_info);
return ERR_PTR(err); return ERR_PTR(err);
recovery_tree_root: recovery_tree_root:
if (!btrfs_test_opt(tree_root, RECOVERY)) if (!btrfs_test_opt(tree_root, RECOVERY))
goto fail_tree_roots; goto fail_tree_roots;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment