linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [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
  2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ 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] 10+ messages in thread

* [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table
  2025-08-14  9:07 [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu via Linux-f2fs-devel
@ 2025-08-14  9:07 ` Chao Yu via Linux-f2fs-devel
  2025-08-14 21:15   ` Zorro Lang via Linux-f2fs-devel
  2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu via Linux-f2fs-devel
  2025-08-14 20:53 ` [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Zorro Lang via Linux-f2fs-devel
  2 siblings, 1 reply; 10+ 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] 10+ messages in thread

* [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid
  2025-08-14  9:07 [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu via Linux-f2fs-devel
  2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
@ 2025-08-14  9:07 ` Chao Yu via Linux-f2fs-devel
  2025-08-14 21:18   ` Zorro Lang via Linux-f2fs-devel
  2025-08-14 20:53 ` [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Zorro Lang via Linux-f2fs-devel
  2 siblings, 1 reply; 10+ 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] 10+ messages in thread

* Re: [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster
  2025-08-14  9:07 [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu via Linux-f2fs-devel
  2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
  2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu via Linux-f2fs-devel
@ 2025-08-14 20:53 ` Zorro Lang via Linux-f2fs-devel
  2025-08-15  7:24   ` Chao Yu via Linux-f2fs-devel
  2 siblings, 1 reply; 10+ 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] 10+ messages in thread

* Re: [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table
  2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
@ 2025-08-14 21:15   ` Zorro Lang via Linux-f2fs-devel
  0 siblings, 0 replies; 10+ 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] 10+ messages in thread

* Re: [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid
  2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu via Linux-f2fs-devel
@ 2025-08-14 21:18   ` Zorro Lang via Linux-f2fs-devel
  2025-08-15  8:02     ` Chao Yu via Linux-f2fs-devel
  0 siblings, 1 reply; 10+ 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] 10+ 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 ` [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Zorro Lang via Linux-f2fs-devel
@ 2025-08-15  7:24   ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 10+ 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] 10+ 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
@ 2025-08-15  8:02     ` Chao Yu via Linux-f2fs-devel
  2025-08-15 15:12       ` Zorro Lang via Linux-f2fs-devel
  0 siblings, 1 reply; 10+ 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] 10+ 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
@ 2025-08-15 15:12       ` Zorro Lang via Linux-f2fs-devel
  2025-08-16  7:08         ` Chao Yu via Linux-f2fs-devel
  0 siblings, 1 reply; 10+ 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] 10+ 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
@ 2025-08-16  7:08         ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 10+ 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] 10+ messages in thread

end of thread, other threads:[~2025-08-16  7:08 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-14  9:07 [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu via Linux-f2fs-devel
2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
2025-08-14 21:15   ` Zorro Lang via Linux-f2fs-devel
2025-08-14  9:07 ` [f2fs-dev] [PATCH v2 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu via Linux-f2fs-devel
2025-08-14 21:18   ` Zorro Lang via Linux-f2fs-devel
2025-08-15  8:02     ` Chao Yu via Linux-f2fs-devel
2025-08-15 15:12       ` Zorro Lang via Linux-f2fs-devel
2025-08-16  7:08         ` Chao Yu via Linux-f2fs-devel
2025-08-14 20:53 ` [f2fs-dev] [PATCH v2 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Zorro Lang via Linux-f2fs-devel
2025-08-15  7:24   ` Chao Yu via Linux-f2fs-devel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).