Linux Btrfs filesystem development
 help / color / mirror / Atom feed
* [PATCH v2] fstests: btrfs: add a new test case to verify degraded RMW writes
@ 2026-10-02  9:21 Qu Wenruo
  2026-10-06  9:52 ` Anand Jain
  0 siblings, 1 reply; 2+ messages in thread
From: Qu Wenruo @ 2026-10-02  9:21 UTC (permalink / raw)
  To: linux-btrfs, fstests; +Cc: Filipe Manana

This is a regression test for a recent reported bug.

The test workload is pretty straightforward:

- Create a 4 disks RAID5 or RAID6 btrfs

- Destroy one disk and mount the btrfs degraded

- Use fio to do a workload meeting all the following conditions
  * Triggering a RMW write
    This is done by using buffered write with 8 4K writes.
    The total write will not fulfill a full stripe, thus it will
    always go through RMW.

  * Some blocks of the full stripe have csum and some do not
    This is done by pre-allocating the target file before testing, so
    every full stripe does not have any csum by default.

    Then after some writes, there will be checksum for those new writes,
    resulting blocks with mixed data checksum.

  * Detect RMW failure
    This is done through fsync.

For unpatched kernels, the fio will always fail pretty early, meanwhile
patched kernels can finish the full 15 seconds runs on both RAID5 and
RAID6 profiles.

Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
Changelog:
v2:
- Use fsync= option for the fio workload
  The fdatasync= is no different than fsync= on btrfs.
---
 tests/btrfs/357     | 65 +++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/357.out |  2 ++
 2 files changed, 67 insertions(+)
 create mode 100755 tests/btrfs/357
 create mode 100644 tests/btrfs/357.out

diff --git a/tests/btrfs/357 b/tests/btrfs/357
new file mode 100755
index 00000000..b68d03b5
--- /dev/null
+++ b/tests/btrfs/357
@@ -0,0 +1,65 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2026 SUSE S.A.  All Rights Reserved.
+#
+# FS QA Test 357
+#
+# Make sure on degraded RAID5/6, RMW writes won't return false errors
+# when some blocks do not have checksums.
+#
+. ./common/preamble
+
+_begin_fstest auto raid volume
+
+_fixed_by_kernel_commit xxxxxxxxxxxx \
+	"btrfs: raid56: do not verify the content if there is no data checksum"
+
+_require_command "$WIPEFS_PROG" wipefs
+_require_scratch_dev_pool 4
+_scratch_dev_pool_get 4
+
+fio_job_file=$tmp.fio
+cat > $fio_job_file << EOF
+[sync_randwrite]
+directory=$SCRATCH_MNT
+rw=randwrite
+filesize=512M
+bs=4K
+fsync=8
+time_based
+fallocate=posix
+runtime=15
+EOF
+
+_require_fio "$fio_job_file"
+
+# The target to remove for degraded mount.
+dev2="${SCRATCH_DEV_NAME[1]}"
+
+workload()
+{
+	local profile=$1
+	_scratch_pool_mkfs "-m raid1 -d $profile" >> $seqres.full 2>&1
+	$WIPEFS_PROG -fa "$dev2" >> $seqres.full 2>&1
+	_scratch_mount -o degraded
+
+	# The fio job will do fsync after 8 4K writes, which is not enough to
+	# fill a full stripe and always trigger RMW.
+	# And the target file is preallocated, after some writes a full stripe
+	# can have blocks with csum and some blocks without csum.
+	#
+	# Unpatched kernels will try to verify the checksum even if there is no
+	# csum and fail the RMW, causing fio to fail.
+	$FIO_PROG $fio_job_file >> $seqres.full 2>&1
+	if [ $? -ne 0 ]; then
+		echo "fio failed on degraded $profile"
+	fi
+	_scratch_unmount
+}
+
+workload raid5
+workload raid6
+
+_scratch_dev_pool_put
+echo "Silence is golden"
+_exit 0
diff --git a/tests/btrfs/357.out b/tests/btrfs/357.out
new file mode 100644
index 00000000..25875c6d
--- /dev/null
+++ b/tests/btrfs/357.out
@@ -0,0 +1,2 @@
+QA output created by 357
+Silence is golden
-- 
2.51.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] fstests: btrfs: add a new test case to verify degraded RMW writes
  2026-10-02  9:21 [PATCH v2] fstests: btrfs: add a new test case to verify degraded RMW writes Qu Wenruo
@ 2026-10-06  9:52 ` Anand Jain
  0 siblings, 0 replies; 2+ messages in thread
From: Anand Jain @ 2026-10-06  9:52 UTC (permalink / raw)
  To: Qu Wenruo, fstests; +Cc: Filipe Manana, linux-btrfs

LGTM


Reviewed-by: Anand Jain <asj@kernel.org>



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-10-06  9:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-02  9:21 [PATCH v2] fstests: btrfs: add a new test case to verify degraded RMW writes Qu Wenruo
2026-10-06  9:52 ` Anand Jain

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox