]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: avoid unnecessary reclaim calculation in priority_reclaim_metadata_space()
authorFilipe Manana <fdmanana@suse.com>
Fri, 17 Oct 2025 16:14:11 +0000 (17:14 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 24 Nov 2025 21:10:18 +0000 (22:10 +0100)
If the given ticket was already served (its ->bytes is 0), then we wasted
time calculating the metadata reclaim size. So calculate it only after we
checked the ticket was not yet served.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/space-info.c

index 9a072009eec8fe777c15243406d77d5664937588..b03c015d5d51daa92f575ca63d2f1b28749e1176 100644 (file)
@@ -1501,7 +1501,6 @@ static void priority_reclaim_metadata_space(struct btrfs_space_info *space_info,
        int flush_state = 0;
 
        spin_lock(&space_info->lock);
-       to_reclaim = btrfs_calc_reclaim_metadata_size(space_info);
        /*
         * This is the priority reclaim path, so to_reclaim could be >0 still
         * because we may have only satisfied the priority tickets and still
@@ -1513,6 +1512,8 @@ static void priority_reclaim_metadata_space(struct btrfs_space_info *space_info,
                return;
        }
 
+       to_reclaim = btrfs_calc_reclaim_metadata_size(space_info);
+
        while (flush_state < states_nr) {
                spin_unlock(&space_info->lock);
                flush_space(space_info, to_reclaim, states[flush_state], false);