diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2011-11-09 13:26:37 +0200 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2011-11-09 22:53:38 +0200 |
commit | 586e46e2813c589d26258a599580421fb6fb576b (patch) | |
tree | dfbdacfd14bec153909e13f8ab23480e292e41f6 /fs/btrfs | |
parent | 4d34b2789538befa45a68a191dc12e0886a69f7d (diff) | |
download | op-kernel-dev-586e46e2813c589d26258a599580421fb6fb576b.zip op-kernel-dev-586e46e2813c589d26258a599580421fb6fb576b.tar.gz |
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: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/disk-io.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 91db90b..b6a5c0d 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2460,21 +2460,20 @@ fail_sb_buffer: btrfs_stop_workers(&fs_info->caching_workers); fail_alloc: fail_iput: + btrfs_mapping_tree_free(&fs_info->mapping_tree); + invalidate_inode_pages2(fs_info->btree_inode->i_mapping); iput(fs_info->btree_inode); - - btrfs_close_devices(fs_info->fs_devices); - btrfs_mapping_tree_free(&fs_info->mapping_tree); fail_bdi: bdi_destroy(&fs_info->bdi); fail_srcu: cleanup_srcu_struct(&fs_info->subvol_srcu); fail: + btrfs_close_devices(fs_info->fs_devices); free_fs_info(fs_info); return ERR_PTR(err); recovery_tree_root: - if (!btrfs_test_opt(tree_root, RECOVERY)) goto fail_tree_roots; |