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>
This commit is contained in:
parent
c6e308713a
commit
3dfdb9348a
|
@ -5952,9 +5952,11 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
|
||||||
path = btrfs_alloc_path();
|
path = btrfs_alloc_path();
|
||||||
BUG_ON(!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,
|
rb_erase(&block_group->cache_node,
|
||||||
&root->fs_info->block_group_cache_tree);
|
&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);
|
down_write(&block_group->space_info->groups_sem);
|
||||||
list_del(&block_group->list);
|
list_del(&block_group->list);
|
||||||
up_write(&block_group->space_info->groups_sem);
|
up_write(&block_group->space_info->groups_sem);
|
||||||
|
|
Loading…
Reference in New Issue