Skip to content

Commit

Permalink
btrfs: do not do preemptive flushing if the majority is global rsv
Browse files Browse the repository at this point in the history
commit 1146239 upstream.

A common characteristic of the bug report where preemptive flushing was
going full tilt was the fact that the vast majority of the free metadata
space was used up by the global reserve.  The hard 90% threshold would
cover the majority of these cases, but to be even smarter we should take
into account how much of the outstanding reservations are covered by the
global block reserve.  If the global block reserve accounts for the vast
majority of outstanding reservations, skip preemptive flushing, as it
will likely just cause churn and pain.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=212185
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
josefbacik authored and gregkh committed Sep 18, 2021
1 parent d441fe4 commit 802a090
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions fs/btrfs/space-info.c
Expand Up @@ -741,6 +741,20 @@ static bool need_preemptive_reclaim(struct btrfs_fs_info *fs_info,
global_rsv_size) >= thresh)
return false;

used = space_info->bytes_may_use + space_info->bytes_pinned;

/* The total flushable belongs to the global rsv, don't flush. */
if (global_rsv_size >= used)
return false;

/*
* 128MiB is 1/4 of the maximum global rsv size. If we have less than
* that devoted to other reservations then there's no sense in flushing,
* we don't have a lot of things that need flushing.
*/
if (used - global_rsv_size <= SZ_128M)
return false;

/*
* We have tickets queued, bail so we don't compete with the async
* flushers.
Expand Down

0 comments on commit 802a090

Please sign in to comment.