btrfs: don't include the global rsv size in the preemptive used amount
authorJosef Bacik <josef@toxicpanda.com>
Wed, 28 Apr 2021 17:38:46 +0000 (13:38 -0400)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Jun 2021 13:19:04 +0000 (15:19 +0200)
When deciding if we should preemptively flush space, we will add in the
amount of space used by all block rsvs.  However this also includes the
global block rsv, which isn't flushable so shouldn't be accounted for in
this calculation.  If we decide to use ->bytes_may_use in our used
calculation we need to subtract the global rsv size from this amount so
it most closely matches the flushable space.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/space-info.c

index fedf3440145a22212f2541ea306588a775720b77..0e88a1482624e4f42e9ea00020de012716566568 100644 (file)
@@ -871,7 +871,7 @@ static bool need_preemptive_reclaim(struct btrfs_fs_info *fs_info,
                used += fs_info->delayed_refs_rsv.reserved +
                        fs_info->delayed_block_rsv.reserved;
        else
-               used += space_info->bytes_may_use;
+               used += space_info->bytes_may_use - global_rsv_size;
 
        return (used >= thresh && !btrfs_fs_closing(fs_info) &&
                !test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state));