From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH 0/3] btrfs-progs: allow tree-checker to be triggered more frequently for btrfs-convert
Date: Sat, 13 Jan 2024 19:15:28 +1030 [thread overview]
Message-ID: <cover.1705135055.git.wqu@suse.com> (raw)
We have issue #731, which is a large ext4 fs, and triggered tree-checker
very reliably.
The root cause is the bad write behavior of btrfs-convert, which always
insert inode refs/file extents/xattrs first, then the inode item.
Such bad behavior would normally trigger tree-checker, but for our
regular convert tests, it doesn't get trigger because:
- We have metadata cache
The default size is system memory / 4, which can be very very large.
And written tree blocks would still be cached thus no tree-checker
triggered for those cached tree blocks.
- We won't commit transaction for every copied inodes
This means for a lot of cases, we may just commit a large transaction
for all inodes, further reduce the chance to trigger tree checker.
This patchset would introduce two debug environment variables:
- BTRFS_PROGS_DEBUG_METADATA_CACHE_SIZE
Global metadata cache size, affecting all btrfs-progs tools that opens
an unmounted btrfs.
- BTRFS_PROGS_DEBUG_BLOCKS_USED_THRESHOLD
This only affects ext2 conversion, which determine how many bytes of
dirty tree blocks we need before commit a transaction.
Those two variables would affect the speed of btrfs-convert greatly, and
we mostly use them for the selftests, thus they won't be documented
anyway but the source code.
With those new debug environment variables, we can reduce those values
to minimal, so that the existing convert tests are enough to trigger the
bug of issue #731.
Although the cost is, we make btrfs-convert test case 001 and 003 much
slower than usual (due to much frequent commit transaction commitment
and more IO to read tree blocks).
But I'd say, it's still worthy, as long as it can detect bad
btrfs-convert behaviors.
Qu Wenruo (3):
btrfs-progs: convert/ext2: new debug environment variable to finetune
transaction size
btrfs-progs: new debug environment variable to finetune metadata cache
size
btrfs-progs: convert-tests: trigger tree-checker more frequently
common/utils.c | 62 ++++++++++++++++++++++
common/utils.h | 1 +
convert/source-ext2.c | 9 +++-
kernel-shared/extent_io.c | 5 +-
tests/convert-tests/001-ext2-basic/test.sh | 7 +++
tests/convert-tests/003-ext4-basic/test.sh | 7 +++
6 files changed, 89 insertions(+), 2 deletions(-)
--
2.43.0
next reply other threads:[~2024-01-13 8:45 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-13 8:45 Qu Wenruo [this message]
2024-01-13 8:45 ` [PATCH 1/3] btrfs-progs: convert/ext2: new debug environment variable to finetune transaction size Qu Wenruo
2024-01-16 18:31 ` David Sterba
2024-01-16 20:20 ` Qu Wenruo
2024-01-17 1:08 ` David Sterba
2024-01-17 2:26 ` Qu Wenruo
2024-01-13 8:45 ` [PATCH 2/3] btrfs-progs: new debug environment variable to finetune metadata cache size Qu Wenruo
2024-01-13 8:45 ` [PATCH 3/3] btrfs-progs: convert-tests: trigger tree-checker more frequently Qu Wenruo
2024-01-16 18:37 ` [PATCH 0/3] btrfs-progs: allow tree-checker to be triggered more frequently for btrfs-convert David Sterba
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=cover.1705135055.git.wqu@suse.com \
--to=wqu@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/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