Btrfs: try to avoid acquiring free space ctl's lock
We don't need to take the lock if the block group has not been cached. Signed-off-by: Liu Bo <bo.li.liu@oracle.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
6f6b643e44
commit
0c9b36e0d7
|
@ -7714,18 +7714,20 @@ unclustered_alloc:
|
||||||
last_ptr->fragmented = 1;
|
last_ptr->fragmented = 1;
|
||||||
spin_unlock(&last_ptr->lock);
|
spin_unlock(&last_ptr->lock);
|
||||||
}
|
}
|
||||||
spin_lock(&block_group->free_space_ctl->tree_lock);
|
if (cached) {
|
||||||
if (cached &&
|
struct btrfs_free_space_ctl *ctl =
|
||||||
block_group->free_space_ctl->free_space <
|
block_group->free_space_ctl;
|
||||||
num_bytes + empty_cluster + empty_size) {
|
|
||||||
if (block_group->free_space_ctl->free_space >
|
spin_lock(&ctl->tree_lock);
|
||||||
max_extent_size)
|
if (ctl->free_space <
|
||||||
max_extent_size =
|
num_bytes + empty_cluster + empty_size) {
|
||||||
block_group->free_space_ctl->free_space;
|
if (ctl->free_space > max_extent_size)
|
||||||
spin_unlock(&block_group->free_space_ctl->tree_lock);
|
max_extent_size = ctl->free_space;
|
||||||
goto loop;
|
spin_unlock(&ctl->tree_lock);
|
||||||
|
goto loop;
|
||||||
|
}
|
||||||
|
spin_unlock(&ctl->tree_lock);
|
||||||
}
|
}
|
||||||
spin_unlock(&block_group->free_space_ctl->tree_lock);
|
|
||||||
|
|
||||||
offset = btrfs_find_space_for_alloc(block_group, search_start,
|
offset = btrfs_find_space_for_alloc(block_group, search_start,
|
||||||
num_bytes, empty_size,
|
num_bytes, empty_size,
|
||||||
|
|
Loading…
Reference in a new issue