On 2024/12/24 14:45, Ojaswin Mujoo wrote: > On Mon, Dec 23, 2024 at 10:39:30AM +0800, Zhang Yi wrote: >> From: Zhang Yi <yi.zhang@xxxxxxxxxx> >> >> 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@xxxxxxxxxxxxxxx/ [1] >> Signed-off-by: Zhang Yi <yi.zhang@xxxxxxxxxx> >> --- >> tests/generic/567 | 50 +++++++++++++++++++++++++------------------ >> tests/generic/567.out | 18 ++++++++++++++++ >> 2 files changed, 47 insertions(+), 21 deletions(-) >> >> 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 > > Hey Zhang, > > While we are at it, can we generalize the test to work for > non-4k page sizes as well. > Hi, Ojaswin. Yeah, I suppose we can do it. Thanks, Yi.