diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2011-11-09 06:26:37 -0500 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2011-11-09 15:53:38 -0500 |
commit | 586e46e2813c589d26258a599580421fb6fb576b (patch) | |
tree | dfbdacfd14bec153909e13f8ab23480e292e41f6 /fs/btrfs/disk-io.c | |
parent | 4d34b2789538befa45a68a191dc12e0886a69f7d (diff) |
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/disk-io.c')
-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 91db90b526c2..b6a5c0dd0dd8 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -2460,21 +2460,20 @@ fail_sb_buffer: | |||
2460 | btrfs_stop_workers(&fs_info->caching_workers); | 2460 | btrfs_stop_workers(&fs_info->caching_workers); |
2461 | fail_alloc: | 2461 | fail_alloc: |
2462 | fail_iput: | 2462 | fail_iput: |
2463 | btrfs_mapping_tree_free(&fs_info->mapping_tree); | ||
2464 | |||
2463 | invalidate_inode_pages2(fs_info->btree_inode->i_mapping); | 2465 | invalidate_inode_pages2(fs_info->btree_inode->i_mapping); |
2464 | iput(fs_info->btree_inode); | 2466 | iput(fs_info->btree_inode); |
2465 | |||
2466 | btrfs_close_devices(fs_info->fs_devices); | ||
2467 | btrfs_mapping_tree_free(&fs_info->mapping_tree); | ||
2468 | fail_bdi: | 2467 | fail_bdi: |
2469 | bdi_destroy(&fs_info->bdi); | 2468 | bdi_destroy(&fs_info->bdi); |
2470 | fail_srcu: | 2469 | fail_srcu: |
2471 | cleanup_srcu_struct(&fs_info->subvol_srcu); | 2470 | cleanup_srcu_struct(&fs_info->subvol_srcu); |
2472 | fail: | 2471 | fail: |
2472 | btrfs_close_devices(fs_info->fs_devices); | ||
2473 | free_fs_info(fs_info); | 2473 | free_fs_info(fs_info); |
2474 | return ERR_PTR(err); | 2474 | return ERR_PTR(err); |
2475 | 2475 | ||
2476 | recovery_tree_root: | 2476 | recovery_tree_root: |
2477 | |||
2478 | if (!btrfs_test_opt(tree_root, RECOVERY)) | 2477 | if (!btrfs_test_opt(tree_root, RECOVERY)) |
2479 | goto fail_tree_roots; | 2478 | goto fail_tree_roots; |
2480 | 2479 | ||