Skip to content
Commit 302167c5 authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba
Browse files

btrfs: don't end the transaction for delayed refs in throttle



Previously callers to btrfs_end_transaction_throttle() would commit the
transaction if there wasn't enough delayed refs space.  This happens in
relocation, and if the fs is relatively empty we'll run out of delayed
refs space basically immediately, so we'll just be stuck in this loop of
committing the transaction over and over again.

This code existed because we didn't have a good feedback mechanism for
running delayed refs, but with the delayed refs rsv we do now.  Delete
this throttling code and let the btrfs_start_transaction() in relocation
deal with putting pressure on the delayed refs infrastructure.  With
this patch we no longer take 5 minutes to balance a metadata only fs.

Qu has submitted a fstest to catch slow balance or excessive transaction
commits. Steps to reproduce:

* create subvolume
* create many (eg. 16000) inlined files, of size 2KiB
* iteratively snapshot and touch several files to trigger metadata
  updates
* start balance -m

Reported-by: default avatarQu Wenruo <wqu@suse.com>
Fixes: 64403612 ("btrfs: rework btrfs_check_space_for_delayed_refs")
Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
[ add tags and steps to reproduce ]
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent a6279470
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment