From: Josef Bacik <josef@xxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxx> --- 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