From: Qu Wenruo <wqu@suse.com>
To: Leo Martins <loemra.dev@gmail.com>, fstests@vger.kernel.org
Cc: linux-btrfs@vger.kernel.org, Filipe Manana <fdmanana@suse.com>,
"Darrick J . Wong" <djwong@kernel.org>
Subject: Re: [RFC] generic/301: flaky failure on btrfs after metadata overcommit change
Date: Tue, 24 Mar 2026 13:33:16 +1030 [thread overview]
Message-ID: <4a10806f-27ce-4162-a2df-142e6b670d15@suse.com> (raw)
In-Reply-To: <20260323201533.2648753-1-loemra.dev@gmail.com>
在 2026/3/24 06:45, Leo Martins 写道:
> Hi,
>
> generic/301 has become flaky on btrfs after commit 0dc118b3c327 ("btrfs:
> be less aggressive with metadata overcommit when we can do full
> flushing") which landed in btrfs/for-next. Out of 30 runs, 8 fail with:
>
> +file2 badly fragmented
>
> I bisected this to the above commit, which reduces the metadata
> overcommit limit from 1/8th to 1/64th of available space for
> full-flushing contexts. This is a legitimate fix for -ENOSPC transaction
> aborts on small filesystems, but as a side effect it causes more
> frequent transaction commits during writeback. The reduced batching
> means the extent allocator has less opportunity to coalesce adjacent CoW
> extents, resulting in higher extent counts that sometimes cross the
> test's threshold.
>
> The fragmentation check in question is:
>
> test $new_extents -lt $((internal_blks * 2 / 3)) || echo "file2 badly fragmented"
>
> The 2/3 threshold was introduced in 9184ca155d7c ("xfs: test
> fragmentation characteristics of copy-on-write") as part of a series
> testing XFS's CoW extent size hint (cowextsize) mechanism. For btrfs,
> this threshold is arbitrary — btrfs doesn't have XFS's cowextsize hint,
> and its CoW extent allocation depends on factors like transaction commit
> frequency and metadata reservation behavior, which is exactly what the
> overcommit commit changed.
>
> I see two possible fixes and would appreciate input on which is
> preferred:
>
> Option A: _notrun for btrfs
> ----------------------------
>
> Skip the entire test since the fragmentation threshold is not applicable
> to btrfs:
>
> test $FSTYP = "btrfs" && \
> _notrun "CoW fragmentation threshold not applicable to btrfs"
>
> Option B: Skip only the extent count assertion for btrfs
> ---------------------------------------------------------
>
> Keep the CoW + data integrity portion of the test (the md5sum checks
> after random CoW writes and remount are still useful) and only skip the
> fragmentation assertion:
>
> if [ "$FSTYP" != "btrfs" ]; then
> test $new_extents -lt $((internal_blks * 2 / 3)) || \
> echo "file2 badly fragmented"
> fi
>
> I lean towards option B since the CoW write + remount + md5sum
> verification is still a reasonable smoke test, but option A is cleaner
> if the consensus is that this test isn't adding value for btrfs.
I also agree on the option B.
The fragmentation behavior is really specific to each fs, thus leaving
the number of extents test to xfs, and keeping the contents check looks
good to me.
Thanks,
Qu
>
> Thoughts?
>
> Thanks,
> Leo Martins
>
prev parent reply other threads:[~2026-03-24 3:03 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-23 20:15 [RFC] generic/301: flaky failure on btrfs after metadata overcommit change Leo Martins
2026-03-23 22:51 ` Darrick J. Wong
2026-03-24 3:03 ` Qu Wenruo [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4a10806f-27ce-4162-a2df-142e6b670d15@suse.com \
--to=wqu@suse.com \
--cc=djwong@kernel.org \
--cc=fdmanana@suse.com \
--cc=fstests@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=loemra.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox