All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Sterba <dsterba@suse.com>
To: fstests@vger.kernel.org
Cc: Josef Bacik <josef@toxicpanda.com>, linux-btrfs@vger.kernel.org
Subject: [PATCH 5/8] btrfs/271: adjust failure condition
Date: Tue,  5 Mar 2024 19:52:17 +0100	[thread overview]
Message-ID: <9c31107be9800792b528614e57b075d7e76010b9.1709664047.git.dsterba@suse.com> (raw)
In-Reply-To: <cover.1709664047.git.dsterba@suse.com>

From: Josef Bacik <josef@toxicpanda.com>

btrfs/271 was failing with the subpage blocksize VM's.  This is because
there's an assumption made that the device error counters are
per-sector, but they're per-io.  With a 16kib pagesize and a 4k
sectorsize/nodesize the threshold was expecting 16 failed IO's, but
instead we were getting 5.

This other gotcha here is that with the tree log we will write the log
tree first, and then update the log root tree with the location of the
log tree root node.  With pagesize == nodesize this is fine, we will
only write the log tree root node.  However with subpage blocksize both
of these nodes could be on the same page, and thus they are both written
out during that initial write.  When we update the pointer for the log
root tree we will COW the log root tree root node and submit another IO,
resulting in 3 metadata IO's instead of 2.

Fix the failure case to be < 4 blocks, which is the minimum number of
IO's we should be seeing.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
---
 tests/btrfs/271 | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/tests/btrfs/271 b/tests/btrfs/271
index 273799f17924c0..a342af3aed44cf 100755
--- a/tests/btrfs/271
+++ b/tests/btrfs/271
@@ -25,10 +25,6 @@ _scratch_mount
 
 dev2=`echo $SCRATCH_DEV_POOL | $AWK_PROG '{print $2}'`
 
-pagesize=$(_get_page_size)
-blocksize=$(_get_block_size $SCRATCH_MNT)
-sectors_per_page=$(($pagesize / $blocksize))
-
 _allow_fail_make_request
 
 echo "Step 1: writing with one failing mirror:"
@@ -36,9 +32,14 @@ _bdev_fail_make_request $SCRATCH_DEV 1
 $XFS_IO_PROG -f -c "pwrite -W -S 0xaa 0 8K" $SCRATCH_MNT/foobar | _filter_xfs_io
 _bdev_fail_make_request $SCRATCH_DEV 0
 
+# btrfs counts errors per IO, assuming the data is merged that'll be 1 IO, then
+# the log tree block and then the log root tree block and then the super block.
+# We should see at least 4 failed IO's, but with subpage blocksize we could see
+# more if the log blocks end up on the same page, or if the data IO gets split
+# at all.
 errs=$($BTRFS_UTIL_PROG device stats $SCRATCH_DEV | \
 	$AWK_PROG '/write_io_errs/ { print $2 }')
-if [ $errs -ne $((4 * $sectors_per_page)) ]; then
+if [ $errs -lt 4 ]; then
         _fail "Errors: $errs expected: 4"
 fi
 
-- 
2.42.1


  parent reply	other threads:[~2024-03-05 18:59 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-05 18:51 [PATCH 0/8] Btrfs fstests fixups David Sterba
2024-03-05 18:52 ` [PATCH 1/8] btrfs/011: increase the runtime for replace cancel David Sterba
2024-03-05 18:52 ` [PATCH 2/8] btrfs/012: adjust how we populate the fs to convert David Sterba
2024-03-07  8:04   ` Anand Jain
2024-03-05 18:52 ` [PATCH 3/8] btrfs/131: don't run with subpage blocksizes David Sterba
2024-03-05 18:52 ` [PATCH 4/8] btrfs/213: make the test more reliable David Sterba
2024-03-05 18:52 ` David Sterba [this message]
2024-03-05 18:52 ` [PATCH 6/8] btrfs/287,btrfs/293: filter all btrfs subvolume delete calls David Sterba
2024-03-05 18:52 ` [PATCH 7/8] btrfs/291: remove image file after teardown David Sterba
2024-03-05 18:52 ` [PATCH 8/8] btrfs/400: test normal qgroup operations in a compress friendly way David Sterba
2024-03-07 12:28 ` [PATCH 0/8] Btrfs fstests fixups Anand Jain

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=9c31107be9800792b528614e57b075d7e76010b9.1709664047.git.dsterba@suse.com \
    --to=dsterba@suse.com \
    --cc=fstests@vger.kernel.org \
    --cc=josef@toxicpanda.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.