[PATCH 1/2] fstests: btrfs/348: test ambiguous generation handling on raid1 profile
Zhang Boyang <[email protected]>
| Newsgroups | org.kernel.vger.linux-btrfs |
|---|---|
| Message-ID | <[email protected]> |
This test simulates a ambiguous generation which can be caused by, for example, two successive power failures. Please note this is not related to degraded mounts or nodatacow. Unfortunately, there is currently no fix for this problem. Signed-off-by: Zhang Boyang <[email protected]> --- tests/btrfs/348 | 79 +++++++++++++++++++++++++ tests/btrfs/348.out | 141 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 220 insertions(+) create mode 100755 tests/btrfs/348 create mode 100644 tests/btrfs/348.out diff --git a/tests/btrfs/348 b/tests/btrfs/348 new file mode 100755 index 00000000..3fcaf744 --- /dev/null +++ b/tests/btrfs/348 @@ -0,0 +1,79 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2026 Zhang Boyang. All Rights Reserved. +# +# FS QA Test 348 +# +# Test btrfs ambiguous generation handling on raid1 profile. +# This can be caused by, for example, two successive power failures. +# +. ./common/preamble +_begin_fstest auto quick read_repair raid + +. ./common/filter +. ./common/fail_make_request +. ./common/dmdust + +_require_fail_make_request +_require_scratch_dev_pool 2 +_require_dm_target dust + +_scratch_dev_pool_get 2 +_check_minimal_fs_size $(( 1024 * 1024 * 1024 )) +# a strong checksum like sha256 can't protect you +_scratch_pool_mkfs "-m raid1 -d raid1 -b 1G -n 4K --csum sha256" >> $seqres.full 2>&1 +dev2=`echo $SCRATCH_DEV_POOL | $AWK_PROG '{print $2}'` +_allow_fail_make_request + +echo "Step 1: prepare filesystem" +_scratch_mount -o notreelog +# create a 2-level FS_TREE, this is not strictly necessary +# however this helps improve test result reproducibility (see below) +for ((i = 0; i < 1000; i++)); do + $XFS_IO_PROG -f -c "pwrite -S 0xff 0 2K" $SCRATCH_MNT/foobar$i >> $seqres.full 2>&1 +done +# the test file should reside in a leaf which is not read at mount time +# so we can control which mirror to use by using _btrfs_buffered_read_on_mirror +testfile="$SCRATCH_MNT/foobar42" +_scratch_unmount + +echo "Step 2: simulate failure #1" +_init_dust +_mount_dust -o notreelog +# simulate dev1 disappears just before writing superblock +for ((i = 0; i < 4096 / 512; i++)); do + $DMSETUP_PROG message $DUST_NAME 0 addbadblock $((0x10000 / 512 + $i)) 255 +done +$DMSETUP_PROG message $DUST_NAME 0 enable +# simulate dev2 disappears before writing anything +_bdev_fail_make_request $dev2 1 +# this write should fail +$XFS_IO_PROG -f -c "pwrite -W -S 0xaa 0 2K" "$testfile" | _filter_xfs_io +_cleanup_dust +_bdev_fail_make_request $dev2 0 + +echo "Step 3: simulate failure #2" +_scratch_mount -o notreelog +# simulate dev1 disappears before writing anything +_bdev_fail_make_request $SCRATCH_DEV 1 +# this write should success +$XFS_IO_PROG -f -c "pwrite -W -S 0xbb 0 2K" "$testfile" | _filter_xfs_io +# simulate dev2 disappears after writing superblock +_bdev_fail_make_request $dev2 1 +_scratch_unmount +_bdev_fail_make_request $SCRATCH_DEV 0 +_bdev_fail_make_request $dev2 0 + +echo "Step 4: simulate recovery" +_scratch_mount -o notreelog +# this read should trigger resync +_btrfs_buffered_read_on_mirror 0 2 "$testfile" 0 2K +echo "Step 5: verify written data" +# read data should be 0xbb +$XFS_IO_PROG -c "pread -v 0 2K" "$testfile" | _filter_xfs_io_offset +_scratch_unmount + +_disallow_fail_make_request +_scratch_dev_pool_put +# success, all done +_exit 0 diff --git a/tests/btrfs/348.out b/tests/btrfs/348.out new file mode 100644 index 00000000..645c8b36 --- /dev/null +++ b/tests/btrfs/348.out @@ -0,0 +1,141 @@ +QA output created by 348 +Allow global fail_make_request feature +Step 1: prepare filesystem +Step 2: simulate failure #1 +fsync: Input/output error +Step 3: simulate failure #2 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +Step 4: simulate recovery +Step 5: verify written data +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +XXXXXXXX: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ +read 2048/2048 bytes +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +Disallow global fail_make_request feature -- 2.53.0