linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH 1/3] f2fs/018: check data eof after partial truncation on compressed cluster
@ 2025-08-11  9:44 Chao Yu via Linux-f2fs-devel
  2025-08-11  9:44 ` [f2fs-dev] [PATCH 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-11  9:44 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>
---
 tests/f2fs/018     | 58 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/f2fs/018.out |  2 ++
 2 files changed, 60 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..ca727d24
--- /dev/null
+++ b/tests/f2fs/018
@@ -0,0 +1,58 @@
+#! /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_scratch
+_require_fio
+
+testfile=$SCRATCH_MNT/testfile
+
+check_data_eof()
+{
+	local eof_start=$1
+	local eof_size=$2
+	local filesize=$3
+	local offset1=$4
+	local offset2=$5
+	local offset3=$6
+
+	_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed"
+	_scratch_mount "-o compress_extension=*" >> $seqres.full
+
+	xfs_io -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full
+	xfs_io -c "truncate $offset1" $testfile
+	xfs_io -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"
+	_scratch_unmount
+}
+
+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
+
+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 2/3] f2fs/019: do sanity check on mapping table
  2025-08-11  9:44 [f2fs-dev] [PATCH 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu via Linux-f2fs-devel
@ 2025-08-11  9:44 ` Chao Yu via Linux-f2fs-devel
  2025-08-13 15:21   ` Zorro Lang via Linux-f2fs-devel
  2025-08-11  9:44 ` [f2fs-dev] [PATCH 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu via Linux-f2fs-devel
  2025-08-12  8:56 ` [f2fs-dev] [PATCH 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-11  9:44 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

Signed-off-by: Chao Yu <chao@kernel.org>
---
 tests/f2fs/019     | 45 +++++++++++++++++++++++++++++++++++++++++++++
 tests/f2fs/019.out |  2 ++
 2 files changed, 47 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..0a02eb2f
--- /dev/null
+++ b/tests/f2fs/019
@@ -0,0 +1,45 @@
+#! /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 compress
+
+_cleanup()
+{
+	_scratch_mkfs >> $seqres.full
+}
+
+_fixed_by_kernel_commit 77de19b6867f \
+	"f2fs: fix to avoid out-of-boundary access in dnode page"
+
+export MKFS_OPTIONS=""
+_require_scratch
+_require_command "$F2FS_INJECT_PROG" inject.f2fs
+
+testfile=$SCRATCH_MNT/testfile
+
+_scratch_mkfs >> $seqres.full
+_scratch_mount
+
+xfs_io -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 -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 3/3] f2fs/020: do sanity check on i_xattr_nid
  2025-08-11  9:44 [f2fs-dev] [PATCH 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu via Linux-f2fs-devel
  2025-08-11  9:44 ` [f2fs-dev] [PATCH 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
@ 2025-08-11  9:44 ` Chao Yu via Linux-f2fs-devel
  2025-08-13 15:34   ` Zorro Lang via Linux-f2fs-devel
  2025-08-12  8:56 ` [f2fs-dev] [PATCH 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-11  9:44 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

Signed-off-by: Chao Yu <chao@kernel.org>
---
 tests/f2fs/020     | 50 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/f2fs/020.out |  2 ++
 2 files changed, 52 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..a6a08c8f
--- /dev/null
+++ b/tests/f2fs/020
@@ -0,0 +1,50 @@
+#! /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
+
+_cleanup()
+{
+	_scratch_mkfs >> $seqres.full
+}
+
+_fixed_by_kernel_commit 061cf3a84bde \
+	"f2fs: fix to do sanity check on ino and xnid"
+
+export MKFS_OPTIONS=""
+_require_scratch
+_require_command "$F2FS_INJECT_PROG" inject.f2fs
+
+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 -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
+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 1/3] f2fs/018: check data eof after partial truncation on compressed cluster
  2025-08-11  9:44 [f2fs-dev] [PATCH 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu via Linux-f2fs-devel
  2025-08-11  9:44 ` [f2fs-dev] [PATCH 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
  2025-08-11  9:44 ` [f2fs-dev] [PATCH 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu via Linux-f2fs-devel
@ 2025-08-12  8:56 ` Zorro Lang via Linux-f2fs-devel
  2025-08-12 12:36   ` Chao Yu via Linux-f2fs-devel
  2 siblings, 1 reply; 10+ messages in thread
From: Zorro Lang via Linux-f2fs-devel @ 2025-08-12  8:56 UTC (permalink / raw)
  To: Chao Yu; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel

On Mon, Aug 11, 2025 at 05:44:13PM +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>
> ---
>  tests/f2fs/018     | 58 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/f2fs/018.out |  2 ++
>  2 files changed, 60 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..ca727d24
> --- /dev/null
> +++ b/tests/f2fs/018
> @@ -0,0 +1,58 @@
> +#! /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_scratch
> +_require_fio
> +
> +testfile=$SCRATCH_MNT/testfile
> +
> +check_data_eof()
> +{
> +	local eof_start=$1
> +	local eof_size=$2
> +	local filesize=$3
> +	local offset1=$4
> +	local offset2=$5
> +	local offset3=$6
> +
> +	_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed"
> +	_scratch_mount "-o compress_extension=*" >> $seqres.full
> +
> +	xfs_io -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full
> +	xfs_io -c "truncate $offset1" $testfile
> +	xfs_io -c "truncate $offset2" $testfile

replace "xfs_io" with "$XFS_IO_PROG"

> +
> +	if [ "$offset3" ]; then
> +		xfs_io -c "truncate $offset3" $testfile

Same as above.

And generally we need: _require_xfs_io_command "truncate"

> +	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"

Generally we do `_require_fio $fio_config` to make sure all arguments are supported
by current fio version and FSTYP, refer to generic/366. But as this is a f2fs only
test, and if you make sure you don't use any new/special fio arguments, I can accept
this. Or you can refer to generic/366.

> +	_scratch_unmount

I'm not familar with f2fs much, may I ask why we need to mkfs&mount ... umount
in each test loop?

Thanks,
Zorro

> +}
> +
> +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
> +
> +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 1/3] f2fs/018: check data eof after partial truncation on compressed cluster
  2025-08-12  8:56 ` [f2fs-dev] [PATCH 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Zorro Lang via Linux-f2fs-devel
@ 2025-08-12 12:36   ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 10+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-08-12 12:36 UTC (permalink / raw)
  To: Zorro Lang; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel

On 8/12/25 16:56, Zorro Lang wrote:
> On Mon, Aug 11, 2025 at 05:44:13PM +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>
>> ---
>>  tests/f2fs/018     | 58 ++++++++++++++++++++++++++++++++++++++++++++++
>>  tests/f2fs/018.out |  2 ++
>>  2 files changed, 60 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..ca727d24
>> --- /dev/null
>> +++ b/tests/f2fs/018
>> @@ -0,0 +1,58 @@
>> +#! /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_scratch
>> +_require_fio
>> +
>> +testfile=$SCRATCH_MNT/testfile
>> +
>> +check_data_eof()
>> +{
>> +	local eof_start=$1
>> +	local eof_size=$2
>> +	local filesize=$3
>> +	local offset1=$4
>> +	local offset2=$5
>> +	local offset3=$6
>> +
>> +	_scratch_mkfs "-O extra_attr,compression" >> $seqres.full || _fail "mkfs failed"
>> +	_scratch_mount "-o compress_extension=*" >> $seqres.full
>> +
>> +	xfs_io -f -c "pwrite 0 $filesize" -c "fsync" $testfile >> $seqres.full
>> +	xfs_io -c "truncate $offset1" $testfile
>> +	xfs_io -c "truncate $offset2" $testfile
> 
> replace "xfs_io" with "$XFS_IO_PROG"

Oops, yes, will update.

> 
>> +
>> +	if [ "$offset3" ]; then
>> +		xfs_io -c "truncate $offset3" $testfile
> 
> Same as above.
> 
> And generally we need: _require_xfs_io_command "truncate"

Ditto,

> 
>> +	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"
> 
> Generally we do `_require_fio $fio_config` to make sure all arguments are supported
> by current fio version and FSTYP, refer to generic/366. But as this is a f2fs only
> test, and if you make sure you don't use any new/special fio arguments, I can accept
> this. Or you can refer to generic/366.

Okay, let me take a look.

> 
>> +	_scratch_unmount
> 
> I'm not familar with f2fs much, may I ask why we need to mkfs&mount ... umount
> in each test loop?

Oh, seems it doesn't need to, let me check and clean up it.

Thanks,

> 
> Thanks,
> Zorro
> 
>> +}
>> +
>> +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
>> +
>> +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 2/3] f2fs/019: do sanity check on mapping table
  2025-08-11  9:44 ` [f2fs-dev] [PATCH 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
@ 2025-08-13 15:21   ` Zorro Lang via Linux-f2fs-devel
  2025-08-14  7:51     ` Chao Yu via Linux-f2fs-devel
  0 siblings, 1 reply; 10+ messages in thread
From: Zorro Lang via Linux-f2fs-devel @ 2025-08-13 15:21 UTC (permalink / raw)
  To: Chao Yu; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel

On Mon, Aug 11, 2025 at 05:44:14PM +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
> 
> Signed-off-by: Chao Yu <chao@kernel.org>
> ---
>  tests/f2fs/019     | 45 +++++++++++++++++++++++++++++++++++++++++++++
>  tests/f2fs/019.out |  2 ++
>  2 files changed, 47 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..0a02eb2f
> --- /dev/null
> +++ b/tests/f2fs/019
> @@ -0,0 +1,45 @@
> +#! /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 compress
> +
> +_cleanup()
> +{
> +	_scratch_mkfs >> $seqres.full

Why mkfs SCRATCH_DEV in _cleanup ?

> +}
> +
> +_fixed_by_kernel_commit 77de19b6867f \
> +	"f2fs: fix to avoid out-of-boundary access in dnode page"
> +
> +export MKFS_OPTIONS=""

Can you give it a comment about why we need to clean mkfs option at here?

> +_require_scratch

Oh, if this case tends to have a corrupted SCRATCH_DEV, you can use
_require_scratch_nocheck at here, don't need to mkfs in _cleanup.

> +_require_command "$F2FS_INJECT_PROG" inject.f2fs
> +
> +testfile=$SCRATCH_MNT/testfile
> +
> +_scratch_mkfs >> $seqres.full
> +_scratch_mount
> +
> +xfs_io -f -c "pwrite 3738M 1M" -c "fsync" $testfile >> $seqres.full
   ^^^^^^
$XFS_IO_PROG

> +
> +_scratch_unmount
> +
> +$F2FS_INJECT_PROG --node --mb addr --nid 5 --idx 937 --val 4 $SCRATCH_DEV >> $seqres.full
> +
> +_scratch_mount
> +xfs_io -c "pread 3700M 40M" $testfile
   ^^^^^^
$XFS_IO_PROG

> +_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 3/3] f2fs/020: do sanity check on i_xattr_nid
  2025-08-11  9:44 ` [f2fs-dev] [PATCH 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu via Linux-f2fs-devel
@ 2025-08-13 15:34   ` Zorro Lang via Linux-f2fs-devel
  2025-08-14  7:54     ` Chao Yu via Linux-f2fs-devel
  0 siblings, 1 reply; 10+ messages in thread
From: Zorro Lang via Linux-f2fs-devel @ 2025-08-13 15:34 UTC (permalink / raw)
  To: Chao Yu; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel

On Mon, Aug 11, 2025 at 05:44:15PM +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
> 
> Signed-off-by: Chao Yu <chao@kernel.org>
> ---
>  tests/f2fs/020     | 50 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/f2fs/020.out |  2 ++
>  2 files changed, 52 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..a6a08c8f
> --- /dev/null
> +++ b/tests/f2fs/020
> @@ -0,0 +1,50 @@
> +#! /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
> +
> +_cleanup()
> +{
> +	_scratch_mkfs >> $seqres.full
> +}
> +
> +_fixed_by_kernel_commit 061cf3a84bde \
> +	"f2fs: fix to do sanity check on ino and xnid"
> +
> +export MKFS_OPTIONS=""
> +_require_scratch

Same review points with patch 2/3, 

> +_require_command "$F2FS_INJECT_PROG" inject.f2fs
> +
> +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 -n user.abc -v 123 $testdir

You can call `_require_attrs user` at first, then use "$SETFATTR_PROG"

> +
> +_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
> +mkdir $testdir/dir >> $seqres.full 2>&1

May I ask what kind of failure will this case hit, if there's the bug?

Thanks,
Zorro

> +_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	[flat|nested] 10+ messages in thread

* Re: [f2fs-dev] [PATCH 2/3] f2fs/019: do sanity check on mapping table
  2025-08-13 15:21   ` Zorro Lang via Linux-f2fs-devel
@ 2025-08-14  7:51     ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 10+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-08-14  7:51 UTC (permalink / raw)
  To: Zorro Lang; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel

On 8/13/25 23:21, Zorro Lang wrote:
> On Mon, Aug 11, 2025 at 05:44:14PM +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
>>
>> Signed-off-by: Chao Yu <chao@kernel.org>
>> ---
>>  tests/f2fs/019     | 45 +++++++++++++++++++++++++++++++++++++++++++++
>>  tests/f2fs/019.out |  2 ++
>>  2 files changed, 47 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..0a02eb2f
>> --- /dev/null
>> +++ b/tests/f2fs/019
>> @@ -0,0 +1,45 @@
>> +#! /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 compress
>> +
>> +_cleanup()
>> +{
>> +	_scratch_mkfs >> $seqres.full
> 
> Why mkfs SCRATCH_DEV in _cleanup ?

Because SCRATCH_DEV will be corrupted after injection.

> 
>> +}
>> +
>> +_fixed_by_kernel_commit 77de19b6867f \
>> +	"f2fs: fix to avoid out-of-boundary access in dnode page"
>> +
>> +export MKFS_OPTIONS=""
> 
> Can you give it a comment about why we need to clean mkfs option at here?

Sure.

> 
>> +_require_scratch
> 
> Oh, if this case tends to have a corrupted SCRATCH_DEV, you can use
> _require_scratch_nocheck at here, don't need to mkfs in _cleanup.

Oh, my bad, you've mentioned the function on f2fs/012 once, but I forget to
use it in this testcase.

> 
>> +_require_command "$F2FS_INJECT_PROG" inject.f2fs
>> +
>> +testfile=$SCRATCH_MNT/testfile
>> +
>> +_scratch_mkfs >> $seqres.full
>> +_scratch_mount
>> +
>> +xfs_io -f -c "pwrite 3738M 1M" -c "fsync" $testfile >> $seqres.full
>    ^^^^^^
> $XFS_IO_PROG
> 
>> +
>> +_scratch_unmount
>> +
>> +$F2FS_INJECT_PROG --node --mb addr --nid 5 --idx 937 --val 4 $SCRATCH_DEV >> $seqres.full
>> +
>> +_scratch_mount
>> +xfs_io -c "pread 3700M 40M" $testfile
>    ^^^^^^
> $XFS_IO_PROG

Will update them in v2.

Thanks,

> 
>> +_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 3/3] f2fs/020: do sanity check on i_xattr_nid
  2025-08-13 15:34   ` Zorro Lang via Linux-f2fs-devel
@ 2025-08-14  7:54     ` Chao Yu via Linux-f2fs-devel
  2025-08-14 21:10       ` Zorro Lang via Linux-f2fs-devel
  0 siblings, 1 reply; 10+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-08-14  7:54 UTC (permalink / raw)
  To: Zorro Lang; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel

On 8/13/25 23:34, Zorro Lang wrote:
> On Mon, Aug 11, 2025 at 05:44:15PM +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
>>
>> Signed-off-by: Chao Yu <chao@kernel.org>
>> ---
>>  tests/f2fs/020     | 50 ++++++++++++++++++++++++++++++++++++++++++++++
>>  tests/f2fs/020.out |  2 ++
>>  2 files changed, 52 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..a6a08c8f
>> --- /dev/null
>> +++ b/tests/f2fs/020
>> @@ -0,0 +1,50 @@
>> +#! /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
>> +
>> +_cleanup()
>> +{
>> +	_scratch_mkfs >> $seqres.full
>> +}
>> +
>> +_fixed_by_kernel_commit 061cf3a84bde \
>> +	"f2fs: fix to do sanity check on ino and xnid"
>> +
>> +export MKFS_OPTIONS=""
>> +_require_scratch
> 
> Same review points with patch 2/3, 
> 
>> +_require_command "$F2FS_INJECT_PROG" inject.f2fs
>> +
>> +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 -n user.abc -v 123 $testdir
> 
> You can call `_require_attrs user` at first, then use "$SETFATTR_PROG"

Okay, will update them in v2.

> 
>> +
>> +_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
>> +mkdir $testdir/dir >> $seqres.full 2>&1
> 
> May I ask what kind of failure will this case hit, if there's the bug?

Bug like syzbot reported, you can check the details in below commit:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=061cf3a84bde

Thanks,

> 
> Thanks,
> Zorro
> 
>> +_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	[flat|nested] 10+ messages in thread

* Re: [f2fs-dev] [PATCH 3/3] f2fs/020: do sanity check on i_xattr_nid
  2025-08-14  7:54     ` Chao Yu via Linux-f2fs-devel
@ 2025-08-14 21:10       ` 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:10 UTC (permalink / raw)
  To: Chao Yu; +Cc: jaegeuk, Zorro Lang, fstests, linux-f2fs-devel

On Thu, Aug 14, 2025 at 03:54:59PM +0800, Chao Yu wrote:
> On 8/13/25 23:34, Zorro Lang wrote:
> > On Mon, Aug 11, 2025 at 05:44:15PM +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
> >>
> >> Signed-off-by: Chao Yu <chao@kernel.org>
> >> ---
> >>  tests/f2fs/020     | 50 ++++++++++++++++++++++++++++++++++++++++++++++
> >>  tests/f2fs/020.out |  2 ++
> >>  2 files changed, 52 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..a6a08c8f
> >> --- /dev/null
> >> +++ b/tests/f2fs/020
> >> @@ -0,0 +1,50 @@
> >> +#! /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
> >> +
> >> +_cleanup()
> >> +{
> >> +	_scratch_mkfs >> $seqres.full
> >> +}
> >> +
> >> +_fixed_by_kernel_commit 061cf3a84bde \
> >> +	"f2fs: fix to do sanity check on ino and xnid"
> >> +
> >> +export MKFS_OPTIONS=""
> >> +_require_scratch
> > 
> > Same review points with patch 2/3, 
> > 
> >> +_require_command "$F2FS_INJECT_PROG" inject.f2fs
> >> +
> >> +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 -n user.abc -v 123 $testdir
> > 
> > You can call `_require_attrs user` at first, then use "$SETFATTR_PROG"
> 
> Okay, will update them in v2.
> 
> > 
> >> +
> >> +_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
> >> +mkdir $testdir/dir >> $seqres.full 2>&1
> > 
> > May I ask what kind of failure will this case hit, if there's the bug?
> 
> Bug like syzbot reported, you can check the details in below commit:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=061cf3a84bde

So you hope to trigger a test failure by something likes:

"generic/361       _check_dmesg: something found in dmesg"

?

Did you try that, if it can fail this test on general kernel?

Thanks,
Zorro

> 
> Thanks,
> 
> > 
> > Thanks,
> > Zorro
> > 
> >> +_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	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2025-08-14 21:10 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-11  9:44 [f2fs-dev] [PATCH 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Chao Yu via Linux-f2fs-devel
2025-08-11  9:44 ` [f2fs-dev] [PATCH 2/3] f2fs/019: do sanity check on mapping table Chao Yu via Linux-f2fs-devel
2025-08-13 15:21   ` Zorro Lang via Linux-f2fs-devel
2025-08-14  7:51     ` Chao Yu via Linux-f2fs-devel
2025-08-11  9:44 ` [f2fs-dev] [PATCH 3/3] f2fs/020: do sanity check on i_xattr_nid Chao Yu via Linux-f2fs-devel
2025-08-13 15:34   ` Zorro Lang via Linux-f2fs-devel
2025-08-14  7:54     ` Chao Yu via Linux-f2fs-devel
2025-08-14 21:10       ` Zorro Lang via Linux-f2fs-devel
2025-08-12  8:56 ` [f2fs-dev] [PATCH 1/3] f2fs/018: check data eof after partial truncation on compressed cluster Zorro Lang via Linux-f2fs-devel
2025-08-12 12:36   ` 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).