btrfs: reduce block group critical section in pin_down_extent()

There's no need to update the bytes_reserved and bytes_may_use fields of
the space_info while holding the block group's spinlock. We are only
making the critical section longer than necessary. So move the space_info
updates outside of the block group's critical section.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Filipe Manana 2025-10-20 13:37:32 +01:00 committed by David Sterba
parent c0d0b13d27
commit 585416766d

View File

@ -2594,15 +2594,15 @@ static int pin_down_extent(struct btrfs_trans_handle *trans,
struct btrfs_block_group *cache,
u64 bytenr, u64 num_bytes, int reserved)
{
const u64 reserved_bytes = (reserved ? num_bytes : 0);
spin_lock(&cache->space_info->lock);
spin_lock(&cache->lock);
cache->pinned += num_bytes;
btrfs_space_info_update_bytes_pinned(cache->space_info, num_bytes);
if (reserved) {
cache->reserved -= num_bytes;
cache->space_info->bytes_reserved -= num_bytes;
}
cache->reserved -= reserved_bytes;
spin_unlock(&cache->lock);
cache->space_info->bytes_reserved -= reserved_bytes;
btrfs_space_info_update_bytes_pinned(cache->space_info, num_bytes);
spin_unlock(&cache->space_info->lock);
btrfs_set_extent_bit(&trans->transaction->pinned_extents, bytenr,