* [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster @ 2025-08-14 9:07 ` Chao Yu via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Chao Yu @ 2025-08-14 9:07 UTC (permalink / raw) To: Zorro Lang, fstests; +Cc: jaegeuk, linux-f2fs-devel, Chao Yu This is a regression testcase, it is added to check below case and its variants: - write 16k data into compressed file (data will be compressed) - truncate file to 12k (truncate partial data in compressed cluster) - truncate file to 20k - verify data in range of [12k, 16k] to see whether data is all zero or not Cc: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Chao Yu <chao@kernel.org> --- v2: - add missing _require_xfs_io_command "truncate" - add missing _require_fio $fio_config - use $XFS_IO_PROG instead of xfs_io - avoid mkfs&mount .. umount for each round test tests/f2fs/018 | 77 ++++++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/018.out | 2 ++ 2 files changed, 79 insertions(+) create mode 100755 tests/f2fs/018 create mode 100644 tests/f2fs/018.out diff --git a/tests/f2fs/018 b/tests/f2fs/018 new file mode 100755 index 00000000..e1047f78 --- /dev/null +++ b/tests/f2fs/018 @@ -0,0 +1,77 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Chao Yu. All Rights Reserved. +# +# FS QA Test No. f2fs/018 +# +# This is a regression test to check whether page eof will be +# zero or not after we truncate partial data in compressed +# cluster. +# +. ./common/preamble +_begin_fstest auto quick rw compress + +_fixed_by_kernel_commit ba8dac350faf \ + "f2fs: fix to zero post-eof page" +_fixed_by_kernel_commit xxxxxxxxxxxx \ + "f2fs: fix to zero data after EOF for compressed file correctly" + +_require_xfs_io_command "truncate" +_require_scratch + +testfile=$SCRATCH_MNT/testfile +fio_config=$tmp.fio + +cat >$fio_config <<EOF +[global] +filename=$testfile +rw=read +verify=pattern +verify_pattern=0x00 +do_verify=1 +verify_only +offset=0 +size=4k +numjobs=1 +EOF +_require_fio $fio_config + +_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed" +_scratch_mount "-o compress_extension=*" >> $seqres.full + +check_data_eof() +{ + local eof_start=$1 + local eof_size=$2 + local filesize=$3 + local offset1=$4 + local offset2=$5 + local offset3=$6 + + + $XFS_IO_PROG -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full + $XFS_IO_PROG -c "truncate $offset1" $testfile + $XFS_IO_PROG -c "truncate $offset2" $testfile + + if [ "$offset3" ]; then + xfs_io -c "truncate $offset3" $testfile + fi + + $FIO_PROG --name=verify-data --filename=$testfile --rw=read --verify=pattern \ + --verify_pattern=0x00 --do_verify=1 --verify_only --offset=$eof_start \ + --size=$eof_size >> $seqres.full 2>&1 || _fail "eof data is not zero" + + rm -f $testfile +} + +check_data_eof 12k 4k 16k 12k 20k +check_data_eof 10k 6k 16k 10k 20k +check_data_eof 12k 4k 16k 8k 12k 20k +check_data_eof 10k 6k 16k 8k 10k 20k + +_scratch_unmount + +echo "Silence is golden" + +status=0 +exit diff --git a/tests/f2fs/018.out b/tests/f2fs/018.out new file mode 100644 index 00000000..8849e303 --- /dev/null +++ b/tests/f2fs/018.out @@ -0,0 +1,2 @@ +QA output created by 018 +Silence is golden -- 2.49.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster @ 2025-08-14 9:07 ` Chao Yu via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Chao Yu via Linux-f2fs-devel @ 2025-08-14 9:07 UTC (permalink / raw) To: Zorro Lang, fstests; +Cc: jaegeuk, linux-f2fs-devel This is a regression testcase, it is added to check below case and its variants: - write 16k data into compressed file (data will be compressed) - truncate file to 12k (truncate partial data in compressed cluster) - truncate file to 20k - verify data in range of [12k, 16k] to see whether data is all zero or not Cc: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Chao Yu <chao@kernel.org> --- v2: - add missing _require_xfs_io_command "truncate" - add missing _require_fio $fio_config - use $XFS_IO_PROG instead of xfs_io - avoid mkfs&mount .. umount for each round test tests/f2fs/018 | 77 ++++++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/018.out | 2 ++ 2 files changed, 79 insertions(+) create mode 100755 tests/f2fs/018 create mode 100644 tests/f2fs/018.out diff --git a/tests/f2fs/018 b/tests/f2fs/018 new file mode 100755 index 00000000..e1047f78 --- /dev/null +++ b/tests/f2fs/018 @@ -0,0 +1,77 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Chao Yu. All Rights Reserved. +# +# FS QA Test No. f2fs/018 +# +# This is a regression test to check whether page eof will be +# zero or not after we truncate partial data in compressed +# cluster. +# +. ./common/preamble +_begin_fstest auto quick rw compress + +_fixed_by_kernel_commit ba8dac350faf \ + "f2fs: fix to zero post-eof page" +_fixed_by_kernel_commit xxxxxxxxxxxx \ + "f2fs: fix to zero data after EOF for compressed file correctly" + +_require_xfs_io_command "truncate" +_require_scratch + +testfile=$SCRATCH_MNT/testfile +fio_config=$tmp.fio + +cat >$fio_config <<EOF +[global] +filename=$testfile +rw=read +verify=pattern +verify_pattern=0x00 +do_verify=1 +verify_only +offset=0 +size=4k +numjobs=1 +EOF +_require_fio $fio_config + +_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed" +_scratch_mount "-o compress_extension=*" >> $seqres.full + +check_data_eof() +{ + local eof_start=$1 + local eof_size=$2 + local filesize=$3 + local offset1=$4 + local offset2=$5 + local offset3=$6 + + + $XFS_IO_PROG -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full + $XFS_IO_PROG -c "truncate $offset1" $testfile + $XFS_IO_PROG -c "truncate $offset2" $testfile + + if [ "$offset3" ]; then + xfs_io -c "truncate $offset3" $testfile + fi + + $FIO_PROG --name=verify-data --filename=$testfile --rw=read --verify=pattern \ + --verify_pattern=0x00 --do_verify=1 --verify_only --offset=$eof_start \ + --size=$eof_size >> $seqres.full 2>&1 || _fail "eof data is not zero" + + rm -f $testfile +} + +check_data_eof 12k 4k 16k 12k 20k +check_data_eof 10k 6k 16k 10k 20k +check_data_eof 12k 4k 16k 8k 12k 20k +check_data_eof 10k 6k 16k 8k 10k 20k + +_scratch_unmount + +echo "Silence is golden" + +status=0 +exit diff --git a/tests/f2fs/018.out b/tests/f2fs/018.out new file mode 100644 index 00000000..8849e303 --- /dev/null +++ b/tests/f2fs/018.out @@ -0,0 +1,2 @@ +QA output created by 018 +Silence is golden -- 2.49.0 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 2/3] f2fs/019: do sanity check on mapping table 2025-08-14 9:07 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel @ 2025-08-14 9:07 ` Chao Yu via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Chao Yu @ 2025-08-14 9:07 UTC (permalink / raw) To: Zorro Lang, fstests; +Cc: jaegeuk, linux-f2fs-devel, Chao Yu This is a regression test: 1. create a file 2. write file to create a direct node at special offset 3. use inject.f2fs to inject nid of direct node w/ ino of the inode 4. check whether f2fs kernel module will detect and report such corruption in the fil Cc: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Chao Yu <chao@kernel.org> --- v2: - use _require_scratch_nocheck instead of _require_scratch - use $XFS_IO_PROG instead of xfs_io - add comments for why exporting MKFS_OPTIONS="" tests/f2fs/019 | 42 ++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/019.out | 2 ++ 2 files changed, 44 insertions(+) create mode 100755 tests/f2fs/019 create mode 100644 tests/f2fs/019.out diff --git a/tests/f2fs/019 b/tests/f2fs/019 new file mode 100755 index 00000000..2307bd96 --- /dev/null +++ b/tests/f2fs/019 @@ -0,0 +1,42 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Chao Yu. All Rights Reserved. +# +# FS QA Test No. f2fs/019 +# +# This is a regression test: +# 1. create a file +# 2. write file to create a direct node at special offset +# 3. use inject.f2fs to inject nid of direct node w/ ino of the inode +# 4. check whether f2fs kernel module will detect and report such +# corruption in the file +# +. ./common/preamble +_begin_fstest auto quick rw + +_fixed_by_kernel_commit 77de19b6867f \ + "f2fs: fix to avoid out-of-boundary access in dnode page" + +_require_scratch_nocheck +_require_command "$F2FS_INJECT_PROG" inject.f2fs + +# remove all mkfs options to avoid layout change of on-disk inode +export MKFS_OPTIONS="" + +testfile=$SCRATCH_MNT/testfile + +_scratch_mkfs >> $seqres.full +_scratch_mount + +$XFS_IO_PROG -f -c "pwrite 3738M 1M" -c "fsync" $testfile >> $seqres.full + +_scratch_unmount + +$F2FS_INJECT_PROG --node --mb addr --nid 5 --idx 937 --val 4 $SCRATCH_DEV >> $seqres.full + +_scratch_mount +$XFS_IO_PROG -c "pread 3700M 40M" $testfile +_scratch_unmount + +status=0 +exit diff --git a/tests/f2fs/019.out b/tests/f2fs/019.out new file mode 100644 index 00000000..2f7469e2 --- /dev/null +++ b/tests/f2fs/019.out @@ -0,0 +1,2 @@ +QA output created by 019 +pread: Structure needs cleaning -- 2.49.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table @ 2025-08-14 9:07 ` Chao Yu via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Chao Yu via Linux-f2fs-devel @ 2025-08-14 9:07 UTC (permalink / raw) To: Zorro Lang, fstests; +Cc: jaegeuk, linux-f2fs-devel This is a regression test: 1. create a file 2. write file to create a direct node at special offset 3. use inject.f2fs to inject nid of direct node w/ ino of the inode 4. check whether f2fs kernel module will detect and report such corruption in the fil Cc: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Chao Yu <chao@kernel.org> --- v2: - use _require_scratch_nocheck instead of _require_scratch - use $XFS_IO_PROG instead of xfs_io - add comments for why exporting MKFS_OPTIONS="" tests/f2fs/019 | 42 ++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/019.out | 2 ++ 2 files changed, 44 insertions(+) create mode 100755 tests/f2fs/019 create mode 100644 tests/f2fs/019.out diff --git a/tests/f2fs/019 b/tests/f2fs/019 new file mode 100755 index 00000000..2307bd96 --- /dev/null +++ b/tests/f2fs/019 @@ -0,0 +1,42 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Chao Yu. All Rights Reserved. +# +# FS QA Test No. f2fs/019 +# +# This is a regression test: +# 1. create a file +# 2. write file to create a direct node at special offset +# 3. use inject.f2fs to inject nid of direct node w/ ino of the inode +# 4. check whether f2fs kernel module will detect and report such +# corruption in the file +# +. ./common/preamble +_begin_fstest auto quick rw + +_fixed_by_kernel_commit 77de19b6867f \ + "f2fs: fix to avoid out-of-boundary access in dnode page" + +_require_scratch_nocheck +_require_command "$F2FS_INJECT_PROG" inject.f2fs + +# remove all mkfs options to avoid layout change of on-disk inode +export MKFS_OPTIONS="" + +testfile=$SCRATCH_MNT/testfile + +_scratch_mkfs >> $seqres.full +_scratch_mount + +$XFS_IO_PROG -f -c "pwrite 3738M 1M" -c "fsync" $testfile >> $seqres.full + +_scratch_unmount + +$F2FS_INJECT_PROG --node --mb addr --nid 5 --idx 937 --val 4 $SCRATCH_DEV >> $seqres.full + +_scratch_mount +$XFS_IO_PROG -c "pread 3700M 40M" $testfile +_scratch_unmount + +status=0 +exit diff --git a/tests/f2fs/019.out b/tests/f2fs/019.out new file mode 100644 index 00000000..2f7469e2 --- /dev/null +++ b/tests/f2fs/019.out @@ -0,0 +1,2 @@ +QA output created by 019 +pread: Structure needs cleaning -- 2.49.0 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v2 2/3] f2fs/019: do sanity check on mapping table 2025-08-14 9:07 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel @ 2025-08-14 21:15 ` Zorro Lang via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Zorro Lang @ 2025-08-14 21:15 UTC (permalink / raw) To: Chao Yu; +Cc: Zorro Lang, fstests, jaegeuk, linux-f2fs-devel On Thu, Aug 14, 2025 at 05:07:11PM +0800, Chao Yu wrote: > This is a regression test: > 1. create a file > 2. write file to create a direct node at special offset > 3. use inject.f2fs to inject nid of direct node w/ ino of the inode > 4. check whether f2fs kernel module will detect and report such > corruption in the fil > > Cc: Jaegeuk Kim <jaegeuk@kernel.org> > Signed-off-by: Chao Yu <chao@kernel.org> > --- This version looks good to me, thanks for this new test coverage :) Reviewed-by: Zorro Lang <zlang@redhat.com> > v2: > - use _require_scratch_nocheck instead of _require_scratch > - use $XFS_IO_PROG instead of xfs_io > - add comments for why exporting MKFS_OPTIONS="" > tests/f2fs/019 | 42 ++++++++++++++++++++++++++++++++++++++++++ > tests/f2fs/019.out | 2 ++ > 2 files changed, 44 insertions(+) > create mode 100755 tests/f2fs/019 > create mode 100644 tests/f2fs/019.out > > diff --git a/tests/f2fs/019 b/tests/f2fs/019 > new file mode 100755 > index 00000000..2307bd96 > --- /dev/null > +++ b/tests/f2fs/019 > @@ -0,0 +1,42 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2025 Chao Yu. All Rights Reserved. > +# > +# FS QA Test No. f2fs/019 > +# > +# This is a regression test: > +# 1. create a file > +# 2. write file to create a direct node at special offset > +# 3. use inject.f2fs to inject nid of direct node w/ ino of the inode > +# 4. check whether f2fs kernel module will detect and report such > +# corruption in the file > +# > +. ./common/preamble > +_begin_fstest auto quick rw > + > +_fixed_by_kernel_commit 77de19b6867f \ > + "f2fs: fix to avoid out-of-boundary access in dnode page" > + > +_require_scratch_nocheck > +_require_command "$F2FS_INJECT_PROG" inject.f2fs > + > +# remove all mkfs options to avoid layout change of on-disk inode > +export MKFS_OPTIONS="" > + > +testfile=$SCRATCH_MNT/testfile > + > +_scratch_mkfs >> $seqres.full > +_scratch_mount > + > +$XFS_IO_PROG -f -c "pwrite 3738M 1M" -c "fsync" $testfile >> $seqres.full > + > +_scratch_unmount > + > +$F2FS_INJECT_PROG --node --mb addr --nid 5 --idx 937 --val 4 $SCRATCH_DEV >> $seqres.full > + > +_scratch_mount > +$XFS_IO_PROG -c "pread 3700M 40M" $testfile > +_scratch_unmount > + > +status=0 > +exit > diff --git a/tests/f2fs/019.out b/tests/f2fs/019.out > new file mode 100644 > index 00000000..2f7469e2 > --- /dev/null > +++ b/tests/f2fs/019.out > @@ -0,0 +1,2 @@ > +QA output created by 019 > +pread: Structure needs cleaning > -- > 2.49.0 > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table @ 2025-08-14 21:15 ` Zorro Lang via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Zorro Lang via Linux-f2fs-devel @ 2025-08-14 21:15 UTC (permalink / raw) To: Chao Yu; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel On Thu, Aug 14, 2025 at 05:07:11PM +0800, Chao Yu wrote: > This is a regression test: > 1. create a file > 2. write file to create a direct node at special offset > 3. use inject.f2fs to inject nid of direct node w/ ino of the inode > 4. check whether f2fs kernel module will detect and report such > corruption in the fil > > Cc: Jaegeuk Kim <jaegeuk@kernel.org> > Signed-off-by: Chao Yu <chao@kernel.org> > --- This version looks good to me, thanks for this new test coverage :) Reviewed-by: Zorro Lang <zlang@redhat.com> > v2: > - use _require_scratch_nocheck instead of _require_scratch > - use $XFS_IO_PROG instead of xfs_io > - add comments for why exporting MKFS_OPTIONS="" > tests/f2fs/019 | 42 ++++++++++++++++++++++++++++++++++++++++++ > tests/f2fs/019.out | 2 ++ > 2 files changed, 44 insertions(+) > create mode 100755 tests/f2fs/019 > create mode 100644 tests/f2fs/019.out > > diff --git a/tests/f2fs/019 b/tests/f2fs/019 > new file mode 100755 > index 00000000..2307bd96 > --- /dev/null > +++ b/tests/f2fs/019 > @@ -0,0 +1,42 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2025 Chao Yu. All Rights Reserved. > +# > +# FS QA Test No. f2fs/019 > +# > +# This is a regression test: > +# 1. create a file > +# 2. write file to create a direct node at special offset > +# 3. use inject.f2fs to inject nid of direct node w/ ino of the inode > +# 4. check whether f2fs kernel module will detect and report such > +# corruption in the file > +# > +. ./common/preamble > +_begin_fstest auto quick rw > + > +_fixed_by_kernel_commit 77de19b6867f \ > + "f2fs: fix to avoid out-of-boundary access in dnode page" > + > +_require_scratch_nocheck > +_require_command "$F2FS_INJECT_PROG" inject.f2fs > + > +# remove all mkfs options to avoid layout change of on-disk inode > +export MKFS_OPTIONS="" > + > +testfile=$SCRATCH_MNT/testfile > + > +_scratch_mkfs >> $seqres.full > +_scratch_mount > + > +$XFS_IO_PROG -f -c "pwrite 3738M 1M" -c "fsync" $testfile >> $seqres.full > + > +_scratch_unmount > + > +$F2FS_INJECT_PROG --node --mb addr --nid 5 --idx 937 --val 4 $SCRATCH_DEV >> $seqres.full > + > +_scratch_mount > +$XFS_IO_PROG -c "pread 3700M 40M" $testfile > +_scratch_unmount > + > +status=0 > +exit > diff --git a/tests/f2fs/019.out b/tests/f2fs/019.out > new file mode 100644 > index 00000000..2f7469e2 > --- /dev/null > +++ b/tests/f2fs/019.out > @@ -0,0 +1,2 @@ > +QA output created by 019 > +pread: Structure needs cleaning > -- > 2.49.0 > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid 2025-08-14 9:07 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel @ 2025-08-14 9:07 ` Chao Yu via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Chao Yu @ 2025-08-14 9:07 UTC (permalink / raw) To: Zorro Lang, fstests; +Cc: jaegeuk, linux-f2fs-devel, Chao Yu This is a regression test: 1. create directory 2. add a new xattr entry to create xattr node 3. use inject.f2fs to inject nid of xattr node w/ ino in a file 4. check whether f2fs kernel module will detect and report such corruption in the file Cc: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Chao Yu <chao@kernel.org> --- v3: - use _require_scratch_nocheck instead of _require_scratch - add missing _require_attrs user - add comments for why exporting MKFS_OPTIONS="" tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/020.out | 2 ++ 2 files changed, 53 insertions(+) create mode 100755 tests/f2fs/020 create mode 100644 tests/f2fs/020.out diff --git a/tests/f2fs/020 b/tests/f2fs/020 new file mode 100755 index 00000000..7ce1f92f --- /dev/null +++ b/tests/f2fs/020 @@ -0,0 +1,51 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Chao Yu. All Rights Reserved. +# +# FS QA Test No. f2fs/020 +# +# This is a regression test: +# 1. create directory +# 2. add a new xattr entry to create xattr node +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file +# 4. check whether f2fs kernel module will detect and report such +# corruption in the file +# +. ./common/preamble +_begin_fstest auto quick rw + +. ./common/attr + +_fixed_by_kernel_commit 061cf3a84bde \ + "f2fs: fix to do sanity check on ino and xnid" + +_require_scratch_nocheck +_require_command "$F2FS_INJECT_PROG" inject.f2fs +_require_attrs user + +# remove all mkfs options to avoid layout change of on-disk inode +export MKFS_OPTIONS="" + +testdir=$SCRATCH_MNT/testdir + +_scratch_mkfs >> $seqres.full +_scratch_mount "-o user_xattr,noinline_xattr" + +mkdir $testdir +# add a new xattr entry to create xattr node +$SETFATTR_PROG -n user.abc -v 123 $testdir + +_scratch_unmount + +# inject i_xattr_nid w/ nid of inode node +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full + +_scratch_mount +# may potentially trigger a deadlock w/ double inode_lock on parent's inode +mkdir $testdir/dir >> $seqres.full 2>&1 +_scratch_unmount + +echo "Silence is golden" + +status=0 +exit diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out new file mode 100644 index 00000000..20d7944e --- /dev/null +++ b/tests/f2fs/020.out @@ -0,0 +1,2 @@ +QA output created by 020 +Silence is golden -- 2.49.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid @ 2025-08-14 9:07 ` Chao Yu via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Chao Yu via Linux-f2fs-devel @ 2025-08-14 9:07 UTC (permalink / raw) To: Zorro Lang, fstests; +Cc: jaegeuk, linux-f2fs-devel This is a regression test: 1. create directory 2. add a new xattr entry to create xattr node 3. use inject.f2fs to inject nid of xattr node w/ ino in a file 4. check whether f2fs kernel module will detect and report such corruption in the file Cc: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Chao Yu <chao@kernel.org> --- v3: - use _require_scratch_nocheck instead of _require_scratch - add missing _require_attrs user - add comments for why exporting MKFS_OPTIONS="" tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/020.out | 2 ++ 2 files changed, 53 insertions(+) create mode 100755 tests/f2fs/020 create mode 100644 tests/f2fs/020.out diff --git a/tests/f2fs/020 b/tests/f2fs/020 new file mode 100755 index 00000000..7ce1f92f --- /dev/null +++ b/tests/f2fs/020 @@ -0,0 +1,51 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Chao Yu. All Rights Reserved. +# +# FS QA Test No. f2fs/020 +# +# This is a regression test: +# 1. create directory +# 2. add a new xattr entry to create xattr node +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file +# 4. check whether f2fs kernel module will detect and report such +# corruption in the file +# +. ./common/preamble +_begin_fstest auto quick rw + +. ./common/attr + +_fixed_by_kernel_commit 061cf3a84bde \ + "f2fs: fix to do sanity check on ino and xnid" + +_require_scratch_nocheck +_require_command "$F2FS_INJECT_PROG" inject.f2fs +_require_attrs user + +# remove all mkfs options to avoid layout change of on-disk inode +export MKFS_OPTIONS="" + +testdir=$SCRATCH_MNT/testdir + +_scratch_mkfs >> $seqres.full +_scratch_mount "-o user_xattr,noinline_xattr" + +mkdir $testdir +# add a new xattr entry to create xattr node +$SETFATTR_PROG -n user.abc -v 123 $testdir + +_scratch_unmount + +# inject i_xattr_nid w/ nid of inode node +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full + +_scratch_mount +# may potentially trigger a deadlock w/ double inode_lock on parent's inode +mkdir $testdir/dir >> $seqres.full 2>&1 +_scratch_unmount + +echo "Silence is golden" + +status=0 +exit diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out new file mode 100644 index 00000000..20d7944e --- /dev/null +++ b/tests/f2fs/020.out @@ -0,0 +1,2 @@ +QA output created by 020 +Silence is golden -- 2.49.0 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid 2025-08-14 9:07 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel @ 2025-08-14 21:18 ` Zorro Lang via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Zorro Lang @ 2025-08-14 21:18 UTC (permalink / raw) To: Chao Yu; +Cc: Zorro Lang, fstests, jaegeuk, linux-f2fs-devel On Thu, Aug 14, 2025 at 05:07:12PM +0800, Chao Yu wrote: > This is a regression test: > 1. create directory > 2. add a new xattr entry to create xattr node > 3. use inject.f2fs to inject nid of xattr node w/ ino in a file > 4. check whether f2fs kernel module will detect and report such > corruption in the file > > Cc: Jaegeuk Kim <jaegeuk@kernel.org> > Signed-off-by: Chao Yu <chao@kernel.org> > --- > v3: > - use _require_scratch_nocheck instead of _require_scratch > - add missing _require_attrs user > - add comments for why exporting MKFS_OPTIONS="" > tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ > tests/f2fs/020.out | 2 ++ > 2 files changed, 53 insertions(+) > create mode 100755 tests/f2fs/020 > create mode 100644 tests/f2fs/020.out > > diff --git a/tests/f2fs/020 b/tests/f2fs/020 > new file mode 100755 > index 00000000..7ce1f92f > --- /dev/null > +++ b/tests/f2fs/020 > @@ -0,0 +1,51 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2025 Chao Yu. All Rights Reserved. > +# > +# FS QA Test No. f2fs/020 > +# > +# This is a regression test: > +# 1. create directory > +# 2. add a new xattr entry to create xattr node > +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file > +# 4. check whether f2fs kernel module will detect and report such > +# corruption in the file > +# > +. ./common/preamble > +_begin_fstest auto quick rw > + > +. ./common/attr > + > +_fixed_by_kernel_commit 061cf3a84bde \ > + "f2fs: fix to do sanity check on ino and xnid" > + > +_require_scratch_nocheck > +_require_command "$F2FS_INJECT_PROG" inject.f2fs > +_require_attrs user > + > +# remove all mkfs options to avoid layout change of on-disk inode > +export MKFS_OPTIONS="" > + > +testdir=$SCRATCH_MNT/testdir > + > +_scratch_mkfs >> $seqres.full > +_scratch_mount "-o user_xattr,noinline_xattr" > + > +mkdir $testdir > +# add a new xattr entry to create xattr node > +$SETFATTR_PROG -n user.abc -v 123 $testdir > + > +_scratch_unmount > + > +# inject i_xattr_nid w/ nid of inode node > +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full > + > +_scratch_mount > +# may potentially trigger a deadlock w/ double inode_lock on parent's inode > +mkdir $testdir/dir >> $seqres.full 2>&1 > +_scratch_unmount Can you provide a test result to prove this test case trigger a failure on general kernel (not debug kernel). If it can, then this version is good to me :) Thanks, Zorro > + > +echo "Silence is golden" > + > +status=0 > +exit > diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out > new file mode 100644 > index 00000000..20d7944e > --- /dev/null > +++ b/tests/f2fs/020.out > @@ -0,0 +1,2 @@ > +QA output created by 020 > +Silence is golden > -- > 2.49.0 > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid @ 2025-08-14 21:18 ` Zorro Lang via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Zorro Lang via Linux-f2fs-devel @ 2025-08-14 21:18 UTC (permalink / raw) To: Chao Yu; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel On Thu, Aug 14, 2025 at 05:07:12PM +0800, Chao Yu wrote: > This is a regression test: > 1. create directory > 2. add a new xattr entry to create xattr node > 3. use inject.f2fs to inject nid of xattr node w/ ino in a file > 4. check whether f2fs kernel module will detect and report such > corruption in the file > > Cc: Jaegeuk Kim <jaegeuk@kernel.org> > Signed-off-by: Chao Yu <chao@kernel.org> > --- > v3: > - use _require_scratch_nocheck instead of _require_scratch > - add missing _require_attrs user > - add comments for why exporting MKFS_OPTIONS="" > tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ > tests/f2fs/020.out | 2 ++ > 2 files changed, 53 insertions(+) > create mode 100755 tests/f2fs/020 > create mode 100644 tests/f2fs/020.out > > diff --git a/tests/f2fs/020 b/tests/f2fs/020 > new file mode 100755 > index 00000000..7ce1f92f > --- /dev/null > +++ b/tests/f2fs/020 > @@ -0,0 +1,51 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2025 Chao Yu. All Rights Reserved. > +# > +# FS QA Test No. f2fs/020 > +# > +# This is a regression test: > +# 1. create directory > +# 2. add a new xattr entry to create xattr node > +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file > +# 4. check whether f2fs kernel module will detect and report such > +# corruption in the file > +# > +. ./common/preamble > +_begin_fstest auto quick rw > + > +. ./common/attr > + > +_fixed_by_kernel_commit 061cf3a84bde \ > + "f2fs: fix to do sanity check on ino and xnid" > + > +_require_scratch_nocheck > +_require_command "$F2FS_INJECT_PROG" inject.f2fs > +_require_attrs user > + > +# remove all mkfs options to avoid layout change of on-disk inode > +export MKFS_OPTIONS="" > + > +testdir=$SCRATCH_MNT/testdir > + > +_scratch_mkfs >> $seqres.full > +_scratch_mount "-o user_xattr,noinline_xattr" > + > +mkdir $testdir > +# add a new xattr entry to create xattr node > +$SETFATTR_PROG -n user.abc -v 123 $testdir > + > +_scratch_unmount > + > +# inject i_xattr_nid w/ nid of inode node > +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full > + > +_scratch_mount > +# may potentially trigger a deadlock w/ double inode_lock on parent's inode > +mkdir $testdir/dir >> $seqres.full 2>&1 > +_scratch_unmount Can you provide a test result to prove this test case trigger a failure on general kernel (not debug kernel). If it can, then this version is good to me :) Thanks, Zorro > + > +echo "Silence is golden" > + > +status=0 > +exit > diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out > new file mode 100644 > index 00000000..20d7944e > --- /dev/null > +++ b/tests/f2fs/020.out > @@ -0,0 +1,2 @@ > +QA output created by 020 > +Silence is golden > -- > 2.49.0 > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid 2025-08-14 21:18 ` [f2fs-dev] " Zorro Lang via Linux-f2fs-devel @ 2025-08-15 8:02 ` Chao Yu via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Chao Yu @ 2025-08-15 8:02 UTC (permalink / raw) To: Zorro Lang; +Cc: chao, Zorro Lang, fstests, jaegeuk, linux-f2fs-devel On 8/15/25 05:18, Zorro Lang wrote: > On Thu, Aug 14, 2025 at 05:07:12PM +0800, Chao Yu wrote: >> This is a regression test: >> 1. create directory >> 2. add a new xattr entry to create xattr node >> 3. use inject.f2fs to inject nid of xattr node w/ ino in a file >> 4. check whether f2fs kernel module will detect and report such >> corruption in the file >> >> Cc: Jaegeuk Kim <jaegeuk@kernel.org> >> Signed-off-by: Chao Yu <chao@kernel.org> >> --- >> v3: >> - use _require_scratch_nocheck instead of _require_scratch >> - add missing _require_attrs user >> - add comments for why exporting MKFS_OPTIONS="" >> tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ >> tests/f2fs/020.out | 2 ++ >> 2 files changed, 53 insertions(+) >> create mode 100755 tests/f2fs/020 >> create mode 100644 tests/f2fs/020.out >> >> diff --git a/tests/f2fs/020 b/tests/f2fs/020 >> new file mode 100755 >> index 00000000..7ce1f92f >> --- /dev/null >> +++ b/tests/f2fs/020 >> @@ -0,0 +1,51 @@ >> +#! /bin/bash >> +# SPDX-License-Identifier: GPL-2.0 >> +# Copyright (c) 2025 Chao Yu. All Rights Reserved. >> +# >> +# FS QA Test No. f2fs/020 >> +# >> +# This is a regression test: >> +# 1. create directory >> +# 2. add a new xattr entry to create xattr node >> +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file >> +# 4. check whether f2fs kernel module will detect and report such >> +# corruption in the file >> +# >> +. ./common/preamble >> +_begin_fstest auto quick rw >> + >> +. ./common/attr >> + >> +_fixed_by_kernel_commit 061cf3a84bde \ >> + "f2fs: fix to do sanity check on ino and xnid" >> + >> +_require_scratch_nocheck >> +_require_command "$F2FS_INJECT_PROG" inject.f2fs >> +_require_attrs user >> + >> +# remove all mkfs options to avoid layout change of on-disk inode >> +export MKFS_OPTIONS="" >> + >> +testdir=$SCRATCH_MNT/testdir >> + >> +_scratch_mkfs >> $seqres.full >> +_scratch_mount "-o user_xattr,noinline_xattr" >> + >> +mkdir $testdir >> +# add a new xattr entry to create xattr node >> +$SETFATTR_PROG -n user.abc -v 123 $testdir >> + >> +_scratch_unmount >> + >> +# inject i_xattr_nid w/ nid of inode node >> +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full Zorro, I missed one thing, this testcase relies on a f2fs-tools patch, please apply this before running the testcase. https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?h=dev-test&id=2174461cdd0a22edc5e7d172605bff4740582438 Do I need to create a _require_* function for f2fs to verify whether f2fs-tools support the required feature or not? >> + >> +_scratch_mount Oh, I may missed to add "-o acl,user_xattr" here. >> +# may potentially trigger a deadlock w/ double inode_lock on parent's inode >> +mkdir $testdir/dir >> $seqres.full 2>&1 >> +_scratch_unmount > > Can you provide a test result to prove this test case trigger a failure > on general kernel (not debug kernel). If it can, then this version is good > to me :) Well, expectation is it will hang kernel, so that the f2fs/020 will stop here once we encounter the issue. Thanks, > > Thanks, > Zorro > >> + >> +echo "Silence is golden" >> + >> +status=0 >> +exit >> diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out >> new file mode 100644 >> index 00000000..20d7944e >> --- /dev/null >> +++ b/tests/f2fs/020.out >> @@ -0,0 +1,2 @@ >> +QA output created by 020 >> +Silence is golden >> -- >> 2.49.0 >> > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid @ 2025-08-15 8:02 ` Chao Yu via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Chao Yu via Linux-f2fs-devel @ 2025-08-15 8:02 UTC (permalink / raw) To: Zorro Lang; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel On 8/15/25 05:18, Zorro Lang wrote: > On Thu, Aug 14, 2025 at 05:07:12PM +0800, Chao Yu wrote: >> This is a regression test: >> 1. create directory >> 2. add a new xattr entry to create xattr node >> 3. use inject.f2fs to inject nid of xattr node w/ ino in a file >> 4. check whether f2fs kernel module will detect and report such >> corruption in the file >> >> Cc: Jaegeuk Kim <jaegeuk@kernel.org> >> Signed-off-by: Chao Yu <chao@kernel.org> >> --- >> v3: >> - use _require_scratch_nocheck instead of _require_scratch >> - add missing _require_attrs user >> - add comments for why exporting MKFS_OPTIONS="" >> tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ >> tests/f2fs/020.out | 2 ++ >> 2 files changed, 53 insertions(+) >> create mode 100755 tests/f2fs/020 >> create mode 100644 tests/f2fs/020.out >> >> diff --git a/tests/f2fs/020 b/tests/f2fs/020 >> new file mode 100755 >> index 00000000..7ce1f92f >> --- /dev/null >> +++ b/tests/f2fs/020 >> @@ -0,0 +1,51 @@ >> +#! /bin/bash >> +# SPDX-License-Identifier: GPL-2.0 >> +# Copyright (c) 2025 Chao Yu. All Rights Reserved. >> +# >> +# FS QA Test No. f2fs/020 >> +# >> +# This is a regression test: >> +# 1. create directory >> +# 2. add a new xattr entry to create xattr node >> +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file >> +# 4. check whether f2fs kernel module will detect and report such >> +# corruption in the file >> +# >> +. ./common/preamble >> +_begin_fstest auto quick rw >> + >> +. ./common/attr >> + >> +_fixed_by_kernel_commit 061cf3a84bde \ >> + "f2fs: fix to do sanity check on ino and xnid" >> + >> +_require_scratch_nocheck >> +_require_command "$F2FS_INJECT_PROG" inject.f2fs >> +_require_attrs user >> + >> +# remove all mkfs options to avoid layout change of on-disk inode >> +export MKFS_OPTIONS="" >> + >> +testdir=$SCRATCH_MNT/testdir >> + >> +_scratch_mkfs >> $seqres.full >> +_scratch_mount "-o user_xattr,noinline_xattr" >> + >> +mkdir $testdir >> +# add a new xattr entry to create xattr node >> +$SETFATTR_PROG -n user.abc -v 123 $testdir >> + >> +_scratch_unmount >> + >> +# inject i_xattr_nid w/ nid of inode node >> +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full Zorro, I missed one thing, this testcase relies on a f2fs-tools patch, please apply this before running the testcase. https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?h=dev-test&id=2174461cdd0a22edc5e7d172605bff4740582438 Do I need to create a _require_* function for f2fs to verify whether f2fs-tools support the required feature or not? >> + >> +_scratch_mount Oh, I may missed to add "-o acl,user_xattr" here. >> +# may potentially trigger a deadlock w/ double inode_lock on parent's inode >> +mkdir $testdir/dir >> $seqres.full 2>&1 >> +_scratch_unmount > > Can you provide a test result to prove this test case trigger a failure > on general kernel (not debug kernel). If it can, then this version is good > to me :) Well, expectation is it will hang kernel, so that the f2fs/020 will stop here once we encounter the issue. Thanks, > > Thanks, > Zorro > >> + >> +echo "Silence is golden" >> + >> +status=0 >> +exit >> diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out >> new file mode 100644 >> index 00000000..20d7944e >> --- /dev/null >> +++ b/tests/f2fs/020.out >> @@ -0,0 +1,2 @@ >> +QA output created by 020 >> +Silence is golden >> -- >> 2.49.0 >> > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid 2025-08-15 8:02 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel @ 2025-08-15 15:12 ` Zorro Lang via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Zorro Lang @ 2025-08-15 15:12 UTC (permalink / raw) To: Chao Yu; +Cc: Zorro Lang, fstests, jaegeuk, linux-f2fs-devel On Fri, Aug 15, 2025 at 04:02:12PM +0800, Chao Yu wrote: > On 8/15/25 05:18, Zorro Lang wrote: > > On Thu, Aug 14, 2025 at 05:07:12PM +0800, Chao Yu wrote: > >> This is a regression test: > >> 1. create directory > >> 2. add a new xattr entry to create xattr node > >> 3. use inject.f2fs to inject nid of xattr node w/ ino in a file > >> 4. check whether f2fs kernel module will detect and report such > >> corruption in the file > >> > >> Cc: Jaegeuk Kim <jaegeuk@kernel.org> > >> Signed-off-by: Chao Yu <chao@kernel.org> > >> --- > >> v3: > >> - use _require_scratch_nocheck instead of _require_scratch > >> - add missing _require_attrs user > >> - add comments for why exporting MKFS_OPTIONS="" > >> tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ > >> tests/f2fs/020.out | 2 ++ > >> 2 files changed, 53 insertions(+) > >> create mode 100755 tests/f2fs/020 > >> create mode 100644 tests/f2fs/020.out > >> > >> diff --git a/tests/f2fs/020 b/tests/f2fs/020 > >> new file mode 100755 > >> index 00000000..7ce1f92f > >> --- /dev/null > >> +++ b/tests/f2fs/020 > >> @@ -0,0 +1,51 @@ > >> +#! /bin/bash > >> +# SPDX-License-Identifier: GPL-2.0 > >> +# Copyright (c) 2025 Chao Yu. All Rights Reserved. > >> +# > >> +# FS QA Test No. f2fs/020 > >> +# > >> +# This is a regression test: > >> +# 1. create directory > >> +# 2. add a new xattr entry to create xattr node > >> +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file > >> +# 4. check whether f2fs kernel module will detect and report such > >> +# corruption in the file > >> +# > >> +. ./common/preamble > >> +_begin_fstest auto quick rw > >> + > >> +. ./common/attr > >> + > >> +_fixed_by_kernel_commit 061cf3a84bde \ > >> + "f2fs: fix to do sanity check on ino and xnid" > >> + > >> +_require_scratch_nocheck > >> +_require_command "$F2FS_INJECT_PROG" inject.f2fs > >> +_require_attrs user > >> + > >> +# remove all mkfs options to avoid layout change of on-disk inode > >> +export MKFS_OPTIONS="" > >> + > >> +testdir=$SCRATCH_MNT/testdir > >> + > >> +_scratch_mkfs >> $seqres.full > >> +_scratch_mount "-o user_xattr,noinline_xattr" > >> + > >> +mkdir $testdir > >> +# add a new xattr entry to create xattr node > >> +$SETFATTR_PROG -n user.abc -v 123 $testdir > >> + > >> +_scratch_unmount > >> + > >> +# inject i_xattr_nid w/ nid of inode node > >> +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full > > Zorro, I missed one thing, this testcase relies on a f2fs-tools patch, please apply > this before running the testcase. > > https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?h=dev-test&id=2174461cdd0a22edc5e7d172605bff4740582438 > > Do I need to create a _require_* function for f2fs to verify whether f2fs-tools > support the required feature or not? Actually for further f2fs testing (depends on injection), we'd better to have related functions, you can refer to: _require_xfs_db_command Or more xfs_db related functions in common/xfs if you need. If you don't want to add this _require_ function in this patch (this's not the only one f2fs case uses inject.f2fs), I think you can send another patchset to do that later (just let this case fails on old f2fs temporarily :). Thanks, Zorro > > >> + > >> +_scratch_mount > > Oh, I may missed to add "-o acl,user_xattr" here. > > >> +# may potentially trigger a deadlock w/ double inode_lock on parent's inode > >> +mkdir $testdir/dir >> $seqres.full 2>&1 > >> +_scratch_unmount > > > > Can you provide a test result to prove this test case trigger a failure > > on general kernel (not debug kernel). If it can, then this version is good > > to me :) > > Well, expectation is it will hang kernel, so that the f2fs/020 will stop here > once we encounter the issue. > > Thanks, > > > > > Thanks, > > Zorro > > > >> + > >> +echo "Silence is golden" > >> + > >> +status=0 > >> +exit > >> diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out > >> new file mode 100644 > >> index 00000000..20d7944e > >> --- /dev/null > >> +++ b/tests/f2fs/020.out > >> @@ -0,0 +1,2 @@ > >> +QA output created by 020 > >> +Silence is golden > >> -- > >> 2.49.0 > >> > > > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid @ 2025-08-15 15:12 ` Zorro Lang via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Zorro Lang via Linux-f2fs-devel @ 2025-08-15 15:12 UTC (permalink / raw) To: Chao Yu; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel On Fri, Aug 15, 2025 at 04:02:12PM +0800, Chao Yu wrote: > On 8/15/25 05:18, Zorro Lang wrote: > > On Thu, Aug 14, 2025 at 05:07:12PM +0800, Chao Yu wrote: > >> This is a regression test: > >> 1. create directory > >> 2. add a new xattr entry to create xattr node > >> 3. use inject.f2fs to inject nid of xattr node w/ ino in a file > >> 4. check whether f2fs kernel module will detect and report such > >> corruption in the file > >> > >> Cc: Jaegeuk Kim <jaegeuk@kernel.org> > >> Signed-off-by: Chao Yu <chao@kernel.org> > >> --- > >> v3: > >> - use _require_scratch_nocheck instead of _require_scratch > >> - add missing _require_attrs user > >> - add comments for why exporting MKFS_OPTIONS="" > >> tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ > >> tests/f2fs/020.out | 2 ++ > >> 2 files changed, 53 insertions(+) > >> create mode 100755 tests/f2fs/020 > >> create mode 100644 tests/f2fs/020.out > >> > >> diff --git a/tests/f2fs/020 b/tests/f2fs/020 > >> new file mode 100755 > >> index 00000000..7ce1f92f > >> --- /dev/null > >> +++ b/tests/f2fs/020 > >> @@ -0,0 +1,51 @@ > >> +#! /bin/bash > >> +# SPDX-License-Identifier: GPL-2.0 > >> +# Copyright (c) 2025 Chao Yu. All Rights Reserved. > >> +# > >> +# FS QA Test No. f2fs/020 > >> +# > >> +# This is a regression test: > >> +# 1. create directory > >> +# 2. add a new xattr entry to create xattr node > >> +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file > >> +# 4. check whether f2fs kernel module will detect and report such > >> +# corruption in the file > >> +# > >> +. ./common/preamble > >> +_begin_fstest auto quick rw > >> + > >> +. ./common/attr > >> + > >> +_fixed_by_kernel_commit 061cf3a84bde \ > >> + "f2fs: fix to do sanity check on ino and xnid" > >> + > >> +_require_scratch_nocheck > >> +_require_command "$F2FS_INJECT_PROG" inject.f2fs > >> +_require_attrs user > >> + > >> +# remove all mkfs options to avoid layout change of on-disk inode > >> +export MKFS_OPTIONS="" > >> + > >> +testdir=$SCRATCH_MNT/testdir > >> + > >> +_scratch_mkfs >> $seqres.full > >> +_scratch_mount "-o user_xattr,noinline_xattr" > >> + > >> +mkdir $testdir > >> +# add a new xattr entry to create xattr node > >> +$SETFATTR_PROG -n user.abc -v 123 $testdir > >> + > >> +_scratch_unmount > >> + > >> +# inject i_xattr_nid w/ nid of inode node > >> +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full > > Zorro, I missed one thing, this testcase relies on a f2fs-tools patch, please apply > this before running the testcase. > > https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?h=dev-test&id=2174461cdd0a22edc5e7d172605bff4740582438 > > Do I need to create a _require_* function for f2fs to verify whether f2fs-tools > support the required feature or not? Actually for further f2fs testing (depends on injection), we'd better to have related functions, you can refer to: _require_xfs_db_command Or more xfs_db related functions in common/xfs if you need. If you don't want to add this _require_ function in this patch (this's not the only one f2fs case uses inject.f2fs), I think you can send another patchset to do that later (just let this case fails on old f2fs temporarily :). Thanks, Zorro > > >> + > >> +_scratch_mount > > Oh, I may missed to add "-o acl,user_xattr" here. > > >> +# may potentially trigger a deadlock w/ double inode_lock on parent's inode > >> +mkdir $testdir/dir >> $seqres.full 2>&1 > >> +_scratch_unmount > > > > Can you provide a test result to prove this test case trigger a failure > > on general kernel (not debug kernel). If it can, then this version is good > > to me :) > > Well, expectation is it will hang kernel, so that the f2fs/020 will stop here > once we encounter the issue. > > Thanks, > > > > > Thanks, > > Zorro > > > >> + > >> +echo "Silence is golden" > >> + > >> +status=0 > >> +exit > >> diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out > >> new file mode 100644 > >> index 00000000..20d7944e > >> --- /dev/null > >> +++ b/tests/f2fs/020.out > >> @@ -0,0 +1,2 @@ > >> +QA output created by 020 > >> +Silence is golden > >> -- > >> 2.49.0 > >> > > > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid 2025-08-15 15:12 ` [f2fs-dev] " Zorro Lang via Linux-f2fs-devel @ 2025-08-16 7:08 ` Chao Yu via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Chao Yu @ 2025-08-16 7:08 UTC (permalink / raw) To: Zorro Lang; +Cc: chao, Zorro Lang, fstests, jaegeuk, linux-f2fs-devel On 2025/8/15 23:12, Zorro Lang wrote: > On Fri, Aug 15, 2025 at 04:02:12PM +0800, Chao Yu wrote: >> On 8/15/25 05:18, Zorro Lang wrote: >>> On Thu, Aug 14, 2025 at 05:07:12PM +0800, Chao Yu wrote: >>>> This is a regression test: >>>> 1. create directory >>>> 2. add a new xattr entry to create xattr node >>>> 3. use inject.f2fs to inject nid of xattr node w/ ino in a file >>>> 4. check whether f2fs kernel module will detect and report such >>>> corruption in the file >>>> >>>> Cc: Jaegeuk Kim <jaegeuk@kernel.org> >>>> Signed-off-by: Chao Yu <chao@kernel.org> >>>> --- >>>> v3: >>>> - use _require_scratch_nocheck instead of _require_scratch >>>> - add missing _require_attrs user >>>> - add comments for why exporting MKFS_OPTIONS="" >>>> tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ >>>> tests/f2fs/020.out | 2 ++ >>>> 2 files changed, 53 insertions(+) >>>> create mode 100755 tests/f2fs/020 >>>> create mode 100644 tests/f2fs/020.out >>>> >>>> diff --git a/tests/f2fs/020 b/tests/f2fs/020 >>>> new file mode 100755 >>>> index 00000000..7ce1f92f >>>> --- /dev/null >>>> +++ b/tests/f2fs/020 >>>> @@ -0,0 +1,51 @@ >>>> +#! /bin/bash >>>> +# SPDX-License-Identifier: GPL-2.0 >>>> +# Copyright (c) 2025 Chao Yu. All Rights Reserved. >>>> +# >>>> +# FS QA Test No. f2fs/020 >>>> +# >>>> +# This is a regression test: >>>> +# 1. create directory >>>> +# 2. add a new xattr entry to create xattr node >>>> +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file >>>> +# 4. check whether f2fs kernel module will detect and report such >>>> +# corruption in the file >>>> +# >>>> +. ./common/preamble >>>> +_begin_fstest auto quick rw >>>> + >>>> +. ./common/attr >>>> + >>>> +_fixed_by_kernel_commit 061cf3a84bde \ >>>> + "f2fs: fix to do sanity check on ino and xnid" >>>> + >>>> +_require_scratch_nocheck >>>> +_require_command "$F2FS_INJECT_PROG" inject.f2fs >>>> +_require_attrs user >>>> + >>>> +# remove all mkfs options to avoid layout change of on-disk inode >>>> +export MKFS_OPTIONS="" >>>> + >>>> +testdir=$SCRATCH_MNT/testdir >>>> + >>>> +_scratch_mkfs >> $seqres.full >>>> +_scratch_mount "-o user_xattr,noinline_xattr" >>>> + >>>> +mkdir $testdir >>>> +# add a new xattr entry to create xattr node >>>> +$SETFATTR_PROG -n user.abc -v 123 $testdir >>>> + >>>> +_scratch_unmount >>>> + >>>> +# inject i_xattr_nid w/ nid of inode node >>>> +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full >> >> Zorro, I missed one thing, this testcase relies on a f2fs-tools patch, please apply >> this before running the testcase. >> >> https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?h=dev-test&id=2174461cdd0a22edc5e7d172605bff4740582438 >> >> Do I need to create a _require_* function for f2fs to verify whether f2fs-tools >> support the required feature or not? > > Actually for further f2fs testing (depends on injection), we'd better to have related > functions, you can refer to: > > _require_xfs_db_command > > Or more xfs_db related functions in common/xfs if you need. Thanks for the information. > > If you don't want to add this _require_ function in this patch (this's not the only > one f2fs case uses inject.f2fs), I think you can send another patchset to do that > later (just let this case fails on old f2fs temporarily :). Okay, will introduce _require_ function in separated patch. :) Thanks, > > Thanks, > Zorro > >> >>>> + >>>> +_scratch_mount >> >> Oh, I may missed to add "-o acl,user_xattr" here. >> >>>> +# may potentially trigger a deadlock w/ double inode_lock on parent's inode >>>> +mkdir $testdir/dir >> $seqres.full 2>&1 >>>> +_scratch_unmount >>> >>> Can you provide a test result to prove this test case trigger a failure >>> on general kernel (not debug kernel). If it can, then this version is good >>> to me :) >> >> Well, expectation is it will hang kernel, so that the f2fs/020 will stop here >> once we encounter the issue. >> >> Thanks, >> >>> >>> Thanks, >>> Zorro >>> >>>> + >>>> +echo "Silence is golden" >>>> + >>>> +status=0 >>>> +exit >>>> diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out >>>> new file mode 100644 >>>> index 00000000..20d7944e >>>> --- /dev/null >>>> +++ b/tests/f2fs/020.out >>>> @@ -0,0 +1,2 @@ >>>> +QA output created by 020 >>>> +Silence is golden >>>> -- >>>> 2.49.0 >>>> >>> >> > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid @ 2025-08-16 7:08 ` Chao Yu via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Chao Yu via Linux-f2fs-devel @ 2025-08-16 7:08 UTC (permalink / raw) To: Zorro Lang; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel On 2025/8/15 23:12, Zorro Lang wrote: > On Fri, Aug 15, 2025 at 04:02:12PM +0800, Chao Yu wrote: >> On 8/15/25 05:18, Zorro Lang wrote: >>> On Thu, Aug 14, 2025 at 05:07:12PM +0800, Chao Yu wrote: >>>> This is a regression test: >>>> 1. create directory >>>> 2. add a new xattr entry to create xattr node >>>> 3. use inject.f2fs to inject nid of xattr node w/ ino in a file >>>> 4. check whether f2fs kernel module will detect and report such >>>> corruption in the file >>>> >>>> Cc: Jaegeuk Kim <jaegeuk@kernel.org> >>>> Signed-off-by: Chao Yu <chao@kernel.org> >>>> --- >>>> v3: >>>> - use _require_scratch_nocheck instead of _require_scratch >>>> - add missing _require_attrs user >>>> - add comments for why exporting MKFS_OPTIONS="" >>>> tests/f2fs/020 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ >>>> tests/f2fs/020.out | 2 ++ >>>> 2 files changed, 53 insertions(+) >>>> create mode 100755 tests/f2fs/020 >>>> create mode 100644 tests/f2fs/020.out >>>> >>>> diff --git a/tests/f2fs/020 b/tests/f2fs/020 >>>> new file mode 100755 >>>> index 00000000..7ce1f92f >>>> --- /dev/null >>>> +++ b/tests/f2fs/020 >>>> @@ -0,0 +1,51 @@ >>>> +#! /bin/bash >>>> +# SPDX-License-Identifier: GPL-2.0 >>>> +# Copyright (c) 2025 Chao Yu. All Rights Reserved. >>>> +# >>>> +# FS QA Test No. f2fs/020 >>>> +# >>>> +# This is a regression test: >>>> +# 1. create directory >>>> +# 2. add a new xattr entry to create xattr node >>>> +# 3. use inject.f2fs to inject nid of xattr node w/ ino in a file >>>> +# 4. check whether f2fs kernel module will detect and report such >>>> +# corruption in the file >>>> +# >>>> +. ./common/preamble >>>> +_begin_fstest auto quick rw >>>> + >>>> +. ./common/attr >>>> + >>>> +_fixed_by_kernel_commit 061cf3a84bde \ >>>> + "f2fs: fix to do sanity check on ino and xnid" >>>> + >>>> +_require_scratch_nocheck >>>> +_require_command "$F2FS_INJECT_PROG" inject.f2fs >>>> +_require_attrs user >>>> + >>>> +# remove all mkfs options to avoid layout change of on-disk inode >>>> +export MKFS_OPTIONS="" >>>> + >>>> +testdir=$SCRATCH_MNT/testdir >>>> + >>>> +_scratch_mkfs >> $seqres.full >>>> +_scratch_mount "-o user_xattr,noinline_xattr" >>>> + >>>> +mkdir $testdir >>>> +# add a new xattr entry to create xattr node >>>> +$SETFATTR_PROG -n user.abc -v 123 $testdir >>>> + >>>> +_scratch_unmount >>>> + >>>> +# inject i_xattr_nid w/ nid of inode node >>>> +$F2FS_INJECT_PROG --node --mb i_xattr_nid --nid 4 --val 4 $SCRATCH_DEV >> $seqres.full >> >> Zorro, I missed one thing, this testcase relies on a f2fs-tools patch, please apply >> this before running the testcase. >> >> https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?h=dev-test&id=2174461cdd0a22edc5e7d172605bff4740582438 >> >> Do I need to create a _require_* function for f2fs to verify whether f2fs-tools >> support the required feature or not? > > Actually for further f2fs testing (depends on injection), we'd better to have related > functions, you can refer to: > > _require_xfs_db_command > > Or more xfs_db related functions in common/xfs if you need. Thanks for the information. > > If you don't want to add this _require_ function in this patch (this's not the only > one f2fs case uses inject.f2fs), I think you can send another patchset to do that > later (just let this case fails on old f2fs temporarily :). Okay, will introduce _require_ function in separated patch. :) Thanks, > > Thanks, > Zorro > >> >>>> + >>>> +_scratch_mount >> >> Oh, I may missed to add "-o acl,user_xattr" here. >> >>>> +# may potentially trigger a deadlock w/ double inode_lock on parent's inode >>>> +mkdir $testdir/dir >> $seqres.full 2>&1 >>>> +_scratch_unmount >>> >>> Can you provide a test result to prove this test case trigger a failure >>> on general kernel (not debug kernel). If it can, then this version is good >>> to me :) >> >> Well, expectation is it will hang kernel, so that the f2fs/020 will stop here >> once we encounter the issue. >> >> Thanks, >> >>> >>> Thanks, >>> Zorro >>> >>>> + >>>> +echo "Silence is golden" >>>> + >>>> +status=0 >>>> +exit >>>> diff --git a/tests/f2fs/020.out b/tests/f2fs/020.out >>>> new file mode 100644 >>>> index 00000000..20d7944e >>>> --- /dev/null >>>> +++ b/tests/f2fs/020.out >>>> @@ -0,0 +1,2 @@ >>>> +QA output created by 020 >>>> +Silence is golden >>>> -- >>>> 2.49.0 >>>> >>> >> > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster 2025-08-14 9:07 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel @ 2025-08-14 20:53 ` Zorro Lang via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Zorro Lang @ 2025-08-14 20:53 UTC (permalink / raw) To: Chao Yu; +Cc: Zorro Lang, fstests, jaegeuk, linux-f2fs-devel On Thu, Aug 14, 2025 at 05:07:10PM +0800, Chao Yu wrote: > This is a regression testcase, it is added to check below case > and its variants: > - write 16k data into compressed file (data will be compressed) > - truncate file to 12k (truncate partial data in compressed cluster) > - truncate file to 20k > - verify data in range of [12k, 16k] to see whether data is all zero > or not > > Cc: Jaegeuk Kim <jaegeuk@kernel.org> > Signed-off-by: Chao Yu <chao@kernel.org> > --- > v2: > - add missing _require_xfs_io_command "truncate" > - add missing _require_fio $fio_config > - use $XFS_IO_PROG instead of xfs_io > - avoid mkfs&mount .. umount for each round test > tests/f2fs/018 | 77 ++++++++++++++++++++++++++++++++++++++++++++++ > tests/f2fs/018.out | 2 ++ > 2 files changed, 79 insertions(+) > create mode 100755 tests/f2fs/018 > create mode 100644 tests/f2fs/018.out > > diff --git a/tests/f2fs/018 b/tests/f2fs/018 > new file mode 100755 > index 00000000..e1047f78 > --- /dev/null > +++ b/tests/f2fs/018 > @@ -0,0 +1,77 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2025 Chao Yu. All Rights Reserved. > +# > +# FS QA Test No. f2fs/018 > +# > +# This is a regression test to check whether page eof will be > +# zero or not after we truncate partial data in compressed > +# cluster. > +# > +. ./common/preamble > +_begin_fstest auto quick rw compress > + > +_fixed_by_kernel_commit ba8dac350faf \ > + "f2fs: fix to zero post-eof page" > +_fixed_by_kernel_commit xxxxxxxxxxxx \ > + "f2fs: fix to zero data after EOF for compressed file correctly" > + > +_require_xfs_io_command "truncate" > +_require_scratch > + > +testfile=$SCRATCH_MNT/testfile > +fio_config=$tmp.fio > + > +cat >$fio_config <<EOF > +[global] > +filename=$testfile > +rw=read > +verify=pattern > +verify_pattern=0x00 > +do_verify=1 > +verify_only > +offset=0 > +size=4k > +numjobs=1 > +EOF > +_require_fio $fio_config Hmm... that looks strange if you create fio config file but don't use it later :-D How about: build_fio_config() { local offset=$1 local size=$2 cat >$fio_config <<EOF [global] filename=$testfile rw=read verify=pattern verify_pattern=0x00 do_verify=1 verify_only offset=$offset size=$size numjobs=1 EOF } build_fio_config 0 4k _require_fio $fio_config > + > +_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed" > +_scratch_mount "-o compress_extension=*" >> $seqres.full > + > +check_data_eof() > +{ > + local eof_start=$1 > + local eof_size=$2 > + local filesize=$3 > + local offset1=$4 > + local offset2=$5 > + local offset3=$6 > + > + rm -f $testfile > + $XFS_IO_PROG -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full > + $XFS_IO_PROG -c "truncate $offset1" $testfile > + $XFS_IO_PROG -c "truncate $offset2" $testfile > + > + if [ "$offset3" ]; then > + xfs_io -c "truncate $offset3" $testfile ^^^^^^ $XFS_IO_PROG > + fi > + > + $FIO_PROG --name=verify-data --filename=$testfile --rw=read --verify=pattern \ > + --verify_pattern=0x00 --do_verify=1 --verify_only --offset=$eof_start \ > + --size=$eof_size >> $seqres.full 2>&1 || _fail "eof data is not zero" build_fio_config $eof_start $eof_size $FIO_PROG $fio_config >> $seqres.full 2>&1 > + > + rm -f $testfile Move this line to above, then return $? > +} > + > +check_data_eof 12k 4k 16k 12k 20k > +check_data_eof 10k 6k 16k 10k 20k > +check_data_eof 12k 4k 16k 8k 12k 20k > +check_data_eof 10k 6k 16k 8k 10k 20k run_check check_data_eof 12k 4k 16k 12k 20k run_check check_data_eof 10k 6k 16k 10k 20k run_check check_data_eof 12k 4k 16k 8k 12k 20k run_check check_data_eof 10k 6k 16k 8k 10k 20k This can help you to know which line fails if one of them is failed. Or you always get "eof data is not zero", no matter which line fails :) > + > +_scratch_unmount This unmount looks useless, due to SCRATCH_DEV is always unmounted after a test done. Thanks, Zorro > + > +echo "Silence is golden" > + > +status=0 > +exit > diff --git a/tests/f2fs/018.out b/tests/f2fs/018.out > new file mode 100644 > index 00000000..8849e303 > --- /dev/null > +++ b/tests/f2fs/018.out > @@ -0,0 +1,2 @@ > +QA output created by 018 > +Silence is golden > -- > 2.49.0 > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster @ 2025-08-14 20:53 ` Zorro Lang via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Zorro Lang via Linux-f2fs-devel @ 2025-08-14 20:53 UTC (permalink / raw) To: Chao Yu; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel On Thu, Aug 14, 2025 at 05:07:10PM +0800, Chao Yu wrote: > This is a regression testcase, it is added to check below case > and its variants: > - write 16k data into compressed file (data will be compressed) > - truncate file to 12k (truncate partial data in compressed cluster) > - truncate file to 20k > - verify data in range of [12k, 16k] to see whether data is all zero > or not > > Cc: Jaegeuk Kim <jaegeuk@kernel.org> > Signed-off-by: Chao Yu <chao@kernel.org> > --- > v2: > - add missing _require_xfs_io_command "truncate" > - add missing _require_fio $fio_config > - use $XFS_IO_PROG instead of xfs_io > - avoid mkfs&mount .. umount for each round test > tests/f2fs/018 | 77 ++++++++++++++++++++++++++++++++++++++++++++++ > tests/f2fs/018.out | 2 ++ > 2 files changed, 79 insertions(+) > create mode 100755 tests/f2fs/018 > create mode 100644 tests/f2fs/018.out > > diff --git a/tests/f2fs/018 b/tests/f2fs/018 > new file mode 100755 > index 00000000..e1047f78 > --- /dev/null > +++ b/tests/f2fs/018 > @@ -0,0 +1,77 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2025 Chao Yu. All Rights Reserved. > +# > +# FS QA Test No. f2fs/018 > +# > +# This is a regression test to check whether page eof will be > +# zero or not after we truncate partial data in compressed > +# cluster. > +# > +. ./common/preamble > +_begin_fstest auto quick rw compress > + > +_fixed_by_kernel_commit ba8dac350faf \ > + "f2fs: fix to zero post-eof page" > +_fixed_by_kernel_commit xxxxxxxxxxxx \ > + "f2fs: fix to zero data after EOF for compressed file correctly" > + > +_require_xfs_io_command "truncate" > +_require_scratch > + > +testfile=$SCRATCH_MNT/testfile > +fio_config=$tmp.fio > + > +cat >$fio_config <<EOF > +[global] > +filename=$testfile > +rw=read > +verify=pattern > +verify_pattern=0x00 > +do_verify=1 > +verify_only > +offset=0 > +size=4k > +numjobs=1 > +EOF > +_require_fio $fio_config Hmm... that looks strange if you create fio config file but don't use it later :-D How about: build_fio_config() { local offset=$1 local size=$2 cat >$fio_config <<EOF [global] filename=$testfile rw=read verify=pattern verify_pattern=0x00 do_verify=1 verify_only offset=$offset size=$size numjobs=1 EOF } build_fio_config 0 4k _require_fio $fio_config > + > +_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed" > +_scratch_mount "-o compress_extension=*" >> $seqres.full > + > +check_data_eof() > +{ > + local eof_start=$1 > + local eof_size=$2 > + local filesize=$3 > + local offset1=$4 > + local offset2=$5 > + local offset3=$6 > + > + rm -f $testfile > + $XFS_IO_PROG -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full > + $XFS_IO_PROG -c "truncate $offset1" $testfile > + $XFS_IO_PROG -c "truncate $offset2" $testfile > + > + if [ "$offset3" ]; then > + xfs_io -c "truncate $offset3" $testfile ^^^^^^ $XFS_IO_PROG > + fi > + > + $FIO_PROG --name=verify-data --filename=$testfile --rw=read --verify=pattern \ > + --verify_pattern=0x00 --do_verify=1 --verify_only --offset=$eof_start \ > + --size=$eof_size >> $seqres.full 2>&1 || _fail "eof data is not zero" build_fio_config $eof_start $eof_size $FIO_PROG $fio_config >> $seqres.full 2>&1 > + > + rm -f $testfile Move this line to above, then return $? > +} > + > +check_data_eof 12k 4k 16k 12k 20k > +check_data_eof 10k 6k 16k 10k 20k > +check_data_eof 12k 4k 16k 8k 12k 20k > +check_data_eof 10k 6k 16k 8k 10k 20k run_check check_data_eof 12k 4k 16k 12k 20k run_check check_data_eof 10k 6k 16k 10k 20k run_check check_data_eof 12k 4k 16k 8k 12k 20k run_check check_data_eof 10k 6k 16k 8k 10k 20k This can help you to know which line fails if one of them is failed. Or you always get "eof data is not zero", no matter which line fails :) > + > +_scratch_unmount This unmount looks useless, due to SCRATCH_DEV is always unmounted after a test done. Thanks, Zorro > + > +echo "Silence is golden" > + > +status=0 > +exit > diff --git a/tests/f2fs/018.out b/tests/f2fs/018.out > new file mode 100644 > index 00000000..8849e303 > --- /dev/null > +++ b/tests/f2fs/018.out > @@ -0,0 +1,2 @@ > +QA output created by 018 > +Silence is golden > -- > 2.49.0 > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster 2025-08-14 20:53 ` [f2fs-dev] " Zorro Lang via Linux-f2fs-devel @ 2025-08-15 7:24 ` Chao Yu via Linux-f2fs-devel -1 siblings, 0 replies; 20+ messages in thread From: Chao Yu @ 2025-08-15 7:24 UTC (permalink / raw) To: Zorro Lang; +Cc: chao, Zorro Lang, fstests, jaegeuk, linux-f2fs-devel On 8/15/25 04:53, Zorro Lang wrote: > On Thu, Aug 14, 2025 at 05:07:10PM +0800, Chao Yu wrote: >> This is a regression testcase, it is added to check below case >> and its variants: >> - write 16k data into compressed file (data will be compressed) >> - truncate file to 12k (truncate partial data in compressed cluster) >> - truncate file to 20k >> - verify data in range of [12k, 16k] to see whether data is all zero >> or not >> >> Cc: Jaegeuk Kim <jaegeuk@kernel.org> >> Signed-off-by: Chao Yu <chao@kernel.org> >> --- >> v2: >> - add missing _require_xfs_io_command "truncate" >> - add missing _require_fio $fio_config >> - use $XFS_IO_PROG instead of xfs_io >> - avoid mkfs&mount .. umount for each round test >> tests/f2fs/018 | 77 ++++++++++++++++++++++++++++++++++++++++++++++ >> tests/f2fs/018.out | 2 ++ >> 2 files changed, 79 insertions(+) >> create mode 100755 tests/f2fs/018 >> create mode 100644 tests/f2fs/018.out >> >> diff --git a/tests/f2fs/018 b/tests/f2fs/018 >> new file mode 100755 >> index 00000000..e1047f78 >> --- /dev/null >> +++ b/tests/f2fs/018 >> @@ -0,0 +1,77 @@ >> +#! /bin/bash >> +# SPDX-License-Identifier: GPL-2.0 >> +# Copyright (c) 2025 Chao Yu. All Rights Reserved. >> +# >> +# FS QA Test No. f2fs/018 >> +# >> +# This is a regression test to check whether page eof will be >> +# zero or not after we truncate partial data in compressed >> +# cluster. >> +# >> +. ./common/preamble >> +_begin_fstest auto quick rw compress >> + >> +_fixed_by_kernel_commit ba8dac350faf \ >> + "f2fs: fix to zero post-eof page" >> +_fixed_by_kernel_commit xxxxxxxxxxxx \ >> + "f2fs: fix to zero data after EOF for compressed file correctly" >> + >> +_require_xfs_io_command "truncate" >> +_require_scratch >> + >> +testfile=$SCRATCH_MNT/testfile >> +fio_config=$tmp.fio >> + >> +cat >$fio_config <<EOF >> +[global] I updated task name from global to verify-data to avoid "No job(s) defined" error from fio. >> +filename=$testfile >> +rw=read >> +verify=pattern >> +verify_pattern=0x00 >> +do_verify=1 >> +verify_only >> +offset=0 >> +size=4k >> +numjobs=1 >> +EOF >> +_require_fio $fio_config > > Hmm... that looks strange if you create fio config file but don't use it later :-D > > How about: > > build_fio_config() > { > local offset=$1 > local size=$2 > > cat >$fio_config <<EOF > [global] > filename=$testfile > rw=read > verify=pattern > verify_pattern=0x00 > do_verify=1 > verify_only > offset=$offset > size=$size > numjobs=1 > EOF cat $fio_config >> $seqres.full To record fio config in seqres.full > } > > build_fio_config 0 4k > _require_fio $fio_config Add _cleanup() to remove $testfile created in last testcase. > >> + >> +_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed" >> +_scratch_mount "-o compress_extension=*" >> $seqres.full >> + >> +check_data_eof() >> +{ >> + local eof_start=$1 >> + local eof_size=$2 >> + local filesize=$3 >> + local offset1=$4 >> + local offset2=$5 >> + local offset3=$6 >> + >> + > > rm -f $testfile > >> + $XFS_IO_PROG -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full >> + $XFS_IO_PROG -c "truncate $offset1" $testfile >> + $XFS_IO_PROG -c "truncate $offset2" $testfile >> + >> + if [ "$offset3" ]; then >> + xfs_io -c "truncate $offset3" $testfile > ^^^^^^ > $XFS_IO_PROG > >> + fi >> + >> + $FIO_PROG --name=verify-data --filename=$testfile --rw=read --verify=pattern \ >> + --verify_pattern=0x00 --do_verify=1 --verify_only --offset=$eof_start \ >> + --size=$eof_size >> $seqres.full 2>&1 || _fail "eof data is not zero" > > build_fio_config $eof_start $eof_size > $FIO_PROG $fio_config >> $seqres.full 2>&1 > >> + >> + rm -f $testfile > > Move this line to above, then > > return $? > >> +} >> + >> +check_data_eof 12k 4k 16k 12k 20k >> +check_data_eof 10k 6k 16k 10k 20k >> +check_data_eof 12k 4k 16k 8k 12k 20k >> +check_data_eof 10k 6k 16k 8k 10k 20k > > run_check check_data_eof 12k 4k 16k 12k 20k > run_check check_data_eof 10k 6k 16k 10k 20k > run_check check_data_eof 12k 4k 16k 8k 12k 20k > run_check check_data_eof 10k 6k 16k 8k 10k 20k > > This can help you to know which line fails if one of them is failed. Or you > always get "eof data is not zero", no matter which line fails :) Looks nice! > >> + >> +_scratch_unmount > > This unmount looks useless, due to SCRATCH_DEV is always unmounted after a test done. Thanks for all your suggestion, will update v3. Thanks, > > Thanks, > Zorro > >> + >> +echo "Silence is golden" >> + >> +status=0 >> +exit >> diff --git a/tests/f2fs/018.out b/tests/f2fs/018.out >> new file mode 100644 >> index 00000000..8849e303 >> --- /dev/null >> +++ b/tests/f2fs/018.out >> @@ -0,0 +1,2 @@ >> +QA output created by 018 >> +Silence is golden >> -- >> 2.49.0 >> > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster @ 2025-08-15 7:24 ` Chao Yu via Linux-f2fs-devel 0 siblings, 0 replies; 20+ messages in thread From: Chao Yu via Linux-f2fs-devel @ 2025-08-15 7:24 UTC (permalink / raw) To: Zorro Lang; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel On 8/15/25 04:53, Zorro Lang wrote: > On Thu, Aug 14, 2025 at 05:07:10PM +0800, Chao Yu wrote: >> This is a regression testcase, it is added to check below case >> and its variants: >> - write 16k data into compressed file (data will be compressed) >> - truncate file to 12k (truncate partial data in compressed cluster) >> - truncate file to 20k >> - verify data in range of [12k, 16k] to see whether data is all zero >> or not >> >> Cc: Jaegeuk Kim <jaegeuk@kernel.org> >> Signed-off-by: Chao Yu <chao@kernel.org> >> --- >> v2: >> - add missing _require_xfs_io_command "truncate" >> - add missing _require_fio $fio_config >> - use $XFS_IO_PROG instead of xfs_io >> - avoid mkfs&mount .. umount for each round test >> tests/f2fs/018 | 77 ++++++++++++++++++++++++++++++++++++++++++++++ >> tests/f2fs/018.out | 2 ++ >> 2 files changed, 79 insertions(+) >> create mode 100755 tests/f2fs/018 >> create mode 100644 tests/f2fs/018.out >> >> diff --git a/tests/f2fs/018 b/tests/f2fs/018 >> new file mode 100755 >> index 00000000..e1047f78 >> --- /dev/null >> +++ b/tests/f2fs/018 >> @@ -0,0 +1,77 @@ >> +#! /bin/bash >> +# SPDX-License-Identifier: GPL-2.0 >> +# Copyright (c) 2025 Chao Yu. All Rights Reserved. >> +# >> +# FS QA Test No. f2fs/018 >> +# >> +# This is a regression test to check whether page eof will be >> +# zero or not after we truncate partial data in compressed >> +# cluster. >> +# >> +. ./common/preamble >> +_begin_fstest auto quick rw compress >> + >> +_fixed_by_kernel_commit ba8dac350faf \ >> + "f2fs: fix to zero post-eof page" >> +_fixed_by_kernel_commit xxxxxxxxxxxx \ >> + "f2fs: fix to zero data after EOF for compressed file correctly" >> + >> +_require_xfs_io_command "truncate" >> +_require_scratch >> + >> +testfile=$SCRATCH_MNT/testfile >> +fio_config=$tmp.fio >> + >> +cat >$fio_config <<EOF >> +[global] I updated task name from global to verify-data to avoid "No job(s) defined" error from fio. >> +filename=$testfile >> +rw=read >> +verify=pattern >> +verify_pattern=0x00 >> +do_verify=1 >> +verify_only >> +offset=0 >> +size=4k >> +numjobs=1 >> +EOF >> +_require_fio $fio_config > > Hmm... that looks strange if you create fio config file but don't use it later :-D > > How about: > > build_fio_config() > { > local offset=$1 > local size=$2 > > cat >$fio_config <<EOF > [global] > filename=$testfile > rw=read > verify=pattern > verify_pattern=0x00 > do_verify=1 > verify_only > offset=$offset > size=$size > numjobs=1 > EOF cat $fio_config >> $seqres.full To record fio config in seqres.full > } > > build_fio_config 0 4k > _require_fio $fio_config Add _cleanup() to remove $testfile created in last testcase. > >> + >> +_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed" >> +_scratch_mount "-o compress_extension=*" >> $seqres.full >> + >> +check_data_eof() >> +{ >> + local eof_start=$1 >> + local eof_size=$2 >> + local filesize=$3 >> + local offset1=$4 >> + local offset2=$5 >> + local offset3=$6 >> + >> + > > rm -f $testfile > >> + $XFS_IO_PROG -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full >> + $XFS_IO_PROG -c "truncate $offset1" $testfile >> + $XFS_IO_PROG -c "truncate $offset2" $testfile >> + >> + if [ "$offset3" ]; then >> + xfs_io -c "truncate $offset3" $testfile > ^^^^^^ > $XFS_IO_PROG > >> + fi >> + >> + $FIO_PROG --name=verify-data --filename=$testfile --rw=read --verify=pattern \ >> + --verify_pattern=0x00 --do_verify=1 --verify_only --offset=$eof_start \ >> + --size=$eof_size >> $seqres.full 2>&1 || _fail "eof data is not zero" > > build_fio_config $eof_start $eof_size > $FIO_PROG $fio_config >> $seqres.full 2>&1 > >> + >> + rm -f $testfile > > Move this line to above, then > > return $? > >> +} >> + >> +check_data_eof 12k 4k 16k 12k 20k >> +check_data_eof 10k 6k 16k 10k 20k >> +check_data_eof 12k 4k 16k 8k 12k 20k >> +check_data_eof 10k 6k 16k 8k 10k 20k > > run_check check_data_eof 12k 4k 16k 12k 20k > run_check check_data_eof 10k 6k 16k 10k 20k > run_check check_data_eof 12k 4k 16k 8k 12k 20k > run_check check_data_eof 10k 6k 16k 8k 10k 20k > > This can help you to know which line fails if one of them is failed. Or you > always get "eof data is not zero", no matter which line fails :) Looks nice! > >> + >> +_scratch_unmount > > This unmount looks useless, due to SCRATCH_DEV is always unmounted after a test done. Thanks for all your suggestion, will update v3. Thanks, > > Thanks, > Zorro > >> + >> +echo "Silence is golden" >> + >> +status=0 >> +exit >> diff --git a/tests/f2fs/018.out b/tests/f2fs/018.out >> new file mode 100644 >> index 00000000..8849e303 >> --- /dev/null >> +++ b/tests/f2fs/018.out >> @@ -0,0 +1,2 @@ >> +QA output created by 018 >> +Silence is golden >> -- >> 2.49.0 >> > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2025-08-16 7:08 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-08-14 9:07 [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu 2025-08-14 9:07 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel 2025-08-14 9:07 ` [PATCH v2 2/3] f2fs/019: do sanity check on mapping table Chao Yu 2025-08-14 9:07 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel 2025-08-14 21:15 ` Zorro Lang 2025-08-14 21:15 ` [f2fs-dev] " Zorro Lang via Linux-f2fs-devel 2025-08-14 9:07 ` [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu 2025-08-14 9:07 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel 2025-08-14 21:18 ` Zorro Lang 2025-08-14 21:18 ` [f2fs-dev] " Zorro Lang via Linux-f2fs-devel 2025-08-15 8:02 ` Chao Yu 2025-08-15 8:02 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel 2025-08-15 15:12 ` Zorro Lang 2025-08-15 15:12 ` [f2fs-dev] " Zorro Lang via Linux-f2fs-devel 2025-08-16 7:08 ` Chao Yu 2025-08-16 7:08 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel 2025-08-14 20:53 ` [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Zorro Lang 2025-08-14 20:53 ` [f2fs-dev] " Zorro Lang via Linux-f2fs-devel 2025-08-15 7:24 ` Chao Yu 2025-08-15 7:24 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.