aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorIlya Dryomov <idryomov@gmail.com>2011-11-09 06:26:37 -0500
committerIlya Dryomov <idryomov@gmail.com>2011-11-09 15:53:38 -0500
commit586e46e2813c589d26258a599580421fb6fb576b (patch)
treedfbdacfd14bec153909e13f8ab23480e292e41f6 /fs/btrfs/disk-io.c
parent4d34b2789538befa45a68a191dc12e0886a69f7d (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.c7
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);
2461fail_alloc: 2461fail_alloc:
2462fail_iput: 2462fail_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);
2468fail_bdi: 2467fail_bdi:
2469 bdi_destroy(&fs_info->bdi); 2468 bdi_destroy(&fs_info->bdi);
2470fail_srcu: 2469fail_srcu:
2471 cleanup_srcu_struct(&fs_info->subvol_srcu); 2470 cleanup_srcu_struct(&fs_info->subvol_srcu);
2472fail: 2471fail:
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
2476recovery_tree_root: 2476recovery_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