diff mbox series

[xfstests] generic/567: add partial pages zeroing out case

Message ID 20241223023930.2328634-1-yi.zhang@huaweicloud.com (mailing list archive)
State New
Headers show
Series [xfstests] generic/567: add partial pages zeroing out case | expand

Commit Message

Zhang Yi Dec. 23, 2024, 2:39 a.m. UTC
From: Zhang Yi <yi.zhang@huawei.com>

This addresses a data corruption issue encountered during partial page
zeroing in ext4 which the block size is smaller than the page size [1].
Expand this test to include a zeroing range test that spans two partial
pages to cover this case.

Link: https://lore.kernel.org/linux-ext4/20241220011637.1157197-2-yi.zhang@huaweicloud.com/ [1]
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
---
 tests/generic/567     | 50 +++++++++++++++++++++++++------------------
 tests/generic/567.out | 18 ++++++++++++++++
 2 files changed, 47 insertions(+), 21 deletions(-)
diff mbox series

Patch

diff --git a/tests/generic/567 b/tests/generic/567
index fc109d0d..756280e8 100755
--- a/tests/generic/567
+++ b/tests/generic/567
@@ -4,43 +4,51 @@ 
 #
 # FS QA Test No. generic/567
 #
-# Test mapped writes against punch-hole to ensure we get the data
-# correctly written. This can expose data corruption bugs on filesystems
-# where the block size is smaller than the page size.
+# Test mapped writes against punch-hole and zero-range to ensure we get
+# the data correctly written. This can expose data corruption bugs on
+# filesystems where the block size is smaller than the page size.
 #
 # (generic/029 is a similar test but for truncate.)
 #
 . ./common/preamble
-_begin_fstest auto quick rw punch
+_begin_fstest auto quick rw punch zero
 
 # Import common functions.
 . ./common/filter
 
 _require_scratch
 _require_xfs_io_command "fpunch"
+_require_xfs_io_command "fzero"
 
 testfile=$SCRATCH_MNT/testfile
 
 _scratch_mkfs > /dev/null 2>&1
 _scratch_mount
 
-# Punch a hole straddling two pages to check that the mapped write after the
-# hole-punching is correctly handled.
-
-$XFS_IO_PROG -t -f \
--c "pwrite -S 0x58 0 12288" \
--c "mmap -rw 0 12288" \
--c "mwrite -S 0x5a 2048 8192" \
--c "fpunch 2048 8192" \
--c "mwrite -S 0x59 2048 8192" \
--c "close"      \
-$testfile | _filter_xfs_io
-
-echo "==== Pre-Remount ==="
-_hexdump $testfile
-_scratch_cycle_mount
-echo "==== Post-Remount =="
-_hexdump $testfile
+# Punch a hole and zero out straddling two pages to check that the mapped
+# write after the hole-punching and range-zeroing are correctly handled.
+_straddling_test()
+{
+	local test_cmd=$1
+
+	$XFS_IO_PROG -t -f \
+		-c "pwrite -S 0x58 0 12288" \
+		-c "mmap -rw 0 12288" \
+		-c "mwrite -S 0x5a 2048 8192" \
+		-c "$test_cmd 2048 8192" \
+		-c "mwrite -S 0x59 2048 8192" \
+		-c "close"      \
+	$testfile | _filter_xfs_io
+
+	echo "==== Pre-Remount ==="
+	_hexdump $testfile
+	_scratch_cycle_mount
+	echo "==== Post-Remount =="
+	_hexdump $testfile
+}
+
+_straddling_test "fpunch"
+_straddling_test "fzero"
 
 status=0
 exit
diff --git a/tests/generic/567.out b/tests/generic/567.out
index 0e826ed3..df89b8f3 100644
--- a/tests/generic/567.out
+++ b/tests/generic/567.out
@@ -17,3 +17,21 @@  XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 002800 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58  >XXXXXXXXXXXXXXXX<
 *
 003000
+wrote 12288/12288 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+==== Pre-Remount ===
+000000 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58  >XXXXXXXXXXXXXXXX<
+*
+000800 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59  >YYYYYYYYYYYYYYYY<
+*
+002800 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58  >XXXXXXXXXXXXXXXX<
+*
+003000
+==== Post-Remount ==
+000000 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58  >XXXXXXXXXXXXXXXX<
+*
+000800 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59  >YYYYYYYYYYYYYYYY<
+*
+002800 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58  >XXXXXXXXXXXXXXXX<
+*
+003000