diff options
author | Yan Zheng <zheng.yan@oracle.com> | 2009-01-21 16:49:16 +0100 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2009-01-21 16:49:16 +0100 |
commit | 3dfdb9348ada18c74c39b9ae7b115e0594792281 (patch) | |
tree | 0ae829011d6c29f61035982bfc115dd037e8242c /fs/btrfs | |
parent | Btrfs: simplify iteration codes (diff) | |
download | linux-3dfdb9348ada18c74c39b9ae7b115e0594792281.tar.xz linux-3dfdb9348ada18c74c39b9ae7b115e0594792281.zip |
Btrfs: fix locking issue in btrfs_remove_block_group
We should hold the block_group_cache_lock while modifying the
block groups red-black tree. Thank you,
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/extent-tree.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index a4e36c38b81e..3bed6a7e4b22 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5952,9 +5952,11 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, path = btrfs_alloc_path(); BUG_ON(!path); - btrfs_remove_free_space_cache(block_group); + spin_lock(&root->fs_info->block_group_cache_lock); rb_erase(&block_group->cache_node, &root->fs_info->block_group_cache_tree); + spin_unlock(&root->fs_info->block_group_cache_lock); + btrfs_remove_free_space_cache(block_group); down_write(&block_group->space_info->groups_sem); list_del(&block_group->list); up_write(&block_group->space_info->groups_sem); |