From: Filipe Manana Date: Mon, 20 Oct 2025 12:37:32 +0000 (+0100) Subject: btrfs: reduce block group critical section in pin_down_extent() X-Git-Tag: v6.19-rc1~167^2~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=585416766d2711d0bcc328f54bff392f5e865ffa;p=thirdparty%2Fkernel%2Flinux.git 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 Signed-off-by: Filipe Manana Signed-off-by: David Sterba --- diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index ae2c3dc9957e6..70b77fe21b9fd 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -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,