aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index ba7042e2390b..17b052ae4653 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -9514,19 +9514,25 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
9514 list_move_tail(&em->list, &root->fs_info->pinned_chunks); 9514 list_move_tail(&em->list, &root->fs_info->pinned_chunks);
9515 } 9515 }
9516 spin_unlock(&block_group->lock); 9516 spin_unlock(&block_group->lock);
9517 unlock_chunks(root);
9518 9517
9519 if (remove_em) { 9518 if (remove_em) {
9520 struct extent_map_tree *em_tree; 9519 struct extent_map_tree *em_tree;
9521 9520
9522 em_tree = &root->fs_info->mapping_tree.map_tree; 9521 em_tree = &root->fs_info->mapping_tree.map_tree;
9523 write_lock(&em_tree->lock); 9522 write_lock(&em_tree->lock);
9523 /*
9524 * The em might be in the pending_chunks list, so make sure the
9525 * chunk mutex is locked, since remove_extent_mapping() will
9526 * delete us from that list.
9527 */
9524 remove_extent_mapping(em_tree, em); 9528 remove_extent_mapping(em_tree, em);
9525 write_unlock(&em_tree->lock); 9529 write_unlock(&em_tree->lock);
9526 /* once for the tree */ 9530 /* once for the tree */
9527 free_extent_map(em); 9531 free_extent_map(em);
9528 } 9532 }
9529 9533
9534 unlock_chunks(root);
9535
9530 btrfs_put_block_group(block_group); 9536 btrfs_put_block_group(block_group);
9531 btrfs_put_block_group(block_group); 9537 btrfs_put_block_group(block_group);
9532 9538