mirror of https://gitee.com/openkylin/linux.git
btrfs: remove no longer necessary chunk mutex locking cases
Initially when the 'removed' flag was added to a block group to avoid races between block group removal and fitrim, by commit04216820fe
("Btrfs: fix race between fs trimming and block group remove/allocation"), we had to lock the chunks mutex because we could be moving the block group from its current list, the pending chunks list, into the pinned chunks list, or we could just be adding it to the pinned chunks if it was not in the pending chunks list. Both lists were protected by the chunk mutex. However we no longer have those lists since commit1c11b63eff
("btrfs: replace pending/pinned chunks lists with io tree"), and locking the chunk mutex is no longer necessary because of that. The same happens at btrfs_unfreeze_block_group(), we lock the chunk mutex because the block group's extent map could be part of the pinned chunks list and the call to remove_extent_mapping() could be deleting it from that list, which used to be protected by that mutex. So just remove those lock and unlock calls as they are not needed anymore. Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
e3ba67a108
commit
f22f457a1a
|
@ -1111,7 +1111,6 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
mutex_lock(&fs_info->chunk_mutex);
|
|
||||||
spin_lock(&block_group->lock);
|
spin_lock(&block_group->lock);
|
||||||
block_group->removed = 1;
|
block_group->removed = 1;
|
||||||
/*
|
/*
|
||||||
|
@ -1143,8 +1142,6 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
|
||||||
remove_em = (atomic_read(&block_group->frozen) == 0);
|
remove_em = (atomic_read(&block_group->frozen) == 0);
|
||||||
spin_unlock(&block_group->lock);
|
spin_unlock(&block_group->lock);
|
||||||
|
|
||||||
mutex_unlock(&fs_info->chunk_mutex);
|
|
||||||
|
|
||||||
if (remove_em) {
|
if (remove_em) {
|
||||||
struct extent_map_tree *em_tree;
|
struct extent_map_tree *em_tree;
|
||||||
|
|
||||||
|
@ -3437,7 +3434,6 @@ void btrfs_unfreeze_block_group(struct btrfs_block_group *block_group)
|
||||||
spin_unlock(&block_group->lock);
|
spin_unlock(&block_group->lock);
|
||||||
|
|
||||||
if (cleanup) {
|
if (cleanup) {
|
||||||
mutex_lock(&fs_info->chunk_mutex);
|
|
||||||
em_tree = &fs_info->mapping_tree;
|
em_tree = &fs_info->mapping_tree;
|
||||||
write_lock(&em_tree->lock);
|
write_lock(&em_tree->lock);
|
||||||
em = lookup_extent_mapping(em_tree, block_group->start,
|
em = lookup_extent_mapping(em_tree, block_group->start,
|
||||||
|
@ -3445,7 +3441,6 @@ void btrfs_unfreeze_block_group(struct btrfs_block_group *block_group)
|
||||||
BUG_ON(!em); /* logic error, can't happen */
|
BUG_ON(!em); /* logic error, can't happen */
|
||||||
remove_extent_mapping(em_tree, em);
|
remove_extent_mapping(em_tree, em);
|
||||||
write_unlock(&em_tree->lock);
|
write_unlock(&em_tree->lock);
|
||||||
mutex_unlock(&fs_info->chunk_mutex);
|
|
||||||
|
|
||||||
/* once for us and once for the tree */
|
/* once for us and once for the tree */
|
||||||
free_extent_map(em);
|
free_extent_map(em);
|
||||||
|
|
Loading…
Reference in New Issue