linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case
@ 2024-10-15  2:51 Chao Yu via Linux-f2fs-devel
  2024-10-15  2:51 ` [f2fs-dev] [PATCH 2/2] f2fs/007: add testcase to check consistency of compressed inode metadata Chao Yu via Linux-f2fs-devel
  2024-10-23  2:37 ` [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case Zorro Lang
  0 siblings, 2 replies; 8+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2024-10-15  2:51 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Jaegeuk Kim, fstests, linux-f2fs-devel

This is a regression test to check whether f2fs handles dirty
data correctly when checkpoint is disabled, if lfs mode is on,
it will trigger OPU for all overwritten data, this will cost
free segments, so f2fs must account overwritten data as OPU
data when calculating free space, otherwise, it may run out
of free segments in f2fs' allocation function, resulting in
panic.

Cc: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Chao Yu <chao@kernel.org>
---
 tests/f2fs/006     | 52 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/f2fs/006.out |  6 ++++++
 2 files changed, 58 insertions(+)
 create mode 100755 tests/f2fs/006
 create mode 100644 tests/f2fs/006.out

diff --git a/tests/f2fs/006 b/tests/f2fs/006
new file mode 100755
index 00000000..b359ef8f
--- /dev/null
+++ b/tests/f2fs/006
@@ -0,0 +1,52 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2024 Oppo.  All Rights Reserved.
+#
+# FS QA Test No. f2fs/006
+#
+# This is a regression test to check whether f2fs handles dirty
+# data correctly when checkpoint is disabled, if lfs mode is on,
+# it will trigger OPU for all overwritten data, this will cost
+# free segments, so f2fs must account overwritten data as OPU
+# data when calculating free space, otherwise, it may run out
+# of free segments in f2fs' allocation function, resulting in
+# panic.
+#
+. ./common/preamble
+_begin_fstest auto quick
+
+_cleanup()
+{
+	rm -f $img
+	_scratch_unmount >> $seqres.full
+	cd /
+	rm -r -f $tmp.*
+}
+
+_require_scratch
+_scratch_mkfs >> $seqres.full
+_scratch_mount >> $seqres.full
+
+img=$SCRATCH_MNT/f2fs.img
+mnt=$SCRATCH_MNT/f2fs.mnt
+testfile=$mnt/testfile
+
+mkdir $mnt
+dd if=/dev/zero of=$img bs=1M count=100 2>/dev/null
+$MKFS_F2FS_PROG -f $img >/dev/null 2>&1
+sync
+
+# use mode=lfs to let f2fs always triggers OPU
+mount -t $FSTYP -o loop,mode=lfs,checkpoint=disable:10%,noinline_dentry $img $mnt
+
+dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null
+
+# it may run out of free space of f2fs and hang kernel
+dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
+dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
+
+mount -o remount,checkpoint=enable $mnt
+umount $mnt
+
+status=0
+exit
diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out
new file mode 100644
index 00000000..a2c7ba48
--- /dev/null
+++ b/tests/f2fs/006.out
@@ -0,0 +1,6 @@
+QA output created by 006
+50+0 records in
+50+0 records out
+dd: error writing '/mnt/scratch_f2fs/f2fs.mnt/testfile': No space left on device
+3+0 records in
+2+0 records out
-- 
2.40.1



_______________________________________________
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] 8+ messages in thread

* [f2fs-dev] [PATCH 2/2] f2fs/007: add testcase to check consistency of compressed inode metadata
  2024-10-15  2:51 [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case Chao Yu via Linux-f2fs-devel
@ 2024-10-15  2:51 ` Chao Yu via Linux-f2fs-devel
  2024-10-23  3:07   ` Zorro Lang
  2024-10-23  2:37 ` [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case Zorro Lang
  1 sibling, 1 reply; 8+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2024-10-15  2:51 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Jaegeuk Kim, Qi Han, fstests, linux-f2fs-devel

metadata of compressed inode should always be consistent after file
compression, reservation, releasement and decompression, let's add
a testcase to check it.

Cc: Jaegeuk Kim <jaegeuk@kernel.org>
Cc: Qi Han <hanqi@vivo.com>
Signed-off-by: Chao Yu <chao@kernel.org>
---
 tests/f2fs/007     | 116 +++++++++++++++++++++++++++++++++++++++++++++
 tests/f2fs/007.out |   4 ++
 2 files changed, 120 insertions(+)
 create mode 100755 tests/f2fs/007
 create mode 100644 tests/f2fs/007.out

diff --git a/tests/f2fs/007 b/tests/f2fs/007
new file mode 100755
index 00000000..274be806
--- /dev/null
+++ b/tests/f2fs/007
@@ -0,0 +1,116 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2024 Oppo.  All Rights Reserved.
+#
+# FS QA Test No. f2fs/007
+#
+# This is a regression test to check whether compressed metadata
+# can become inconsistent after file compression, reservation
+# releasement, and decompression.
+#
+. ./common/preamble
+_begin_fstest auto quick
+
+_cleanup()
+{
+	cd /
+	rm -r -f tmp.*
+}
+
+testfile_prefix=$SCRATCH_MNT/testfile
+fio_config=$tmp.fio
+
+cat >$fio_config <<EOF
+[write_compressed_data_30]
+name=mytest
+ioengine=psync
+rw=write
+direct=0
+bs=1M
+filesize=1M
+numjobs=1
+filename=/mnt/scratch_f2fs/testfile30
+buffer_compress_percentage=30
+
+[write_compressed_data_60]
+name=mytest
+ioengine=psync
+rw=write
+direct=0
+bs=1M
+filesize=1M
+numjobs=1
+filename=/mnt/scratch_f2fs/testfile60
+buffer_compress_percentage=60
+
+[write_compressed_data_90]
+name=mytest
+ioengine=psync
+rw=write
+direct=0
+bs=1M
+filesize=1M
+numjobs=1
+filename=/mnt/scratch_f2fs/testfile90
+buffer_compress_percentage=90
+EOF
+
+_require_fio $fio_config
+_require_scratch
+_scratch_mkfs "-f -O extra_attr,compression" >> $seqres.full
+_scratch_mount "-o compress_mode=user,compress_extension=*" >> $seqres.full
+
+echo -e "Run fio to initialize file w/ specified compress ratio" >> $seqres.full
+cat $fio_config >> $seqres.full
+$FIO_PROG $fio_config >> $seqres.full
+_scratch_unmount
+
+for i in 30 60 90; do
+	testfile=$testfile_prefix$i
+
+	_scratch_mount "-o compress_mode=user" >> $seqres.full
+	f2fs_io compress $testfile >> $seqres.full
+	cblocks=`f2fs_io get_cblocks $testfile`
+	echo "compression ratio is: "$cblocks" / 256"
+
+	_scratch_unmount
+
+	# 1. check after compression
+	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full
+	if [ $? -ne 0 ]; then
+		_fail "filesystem becomes corrupted after compress"
+	fi
+
+	_scratch_mount >> $seqres.full
+	f2fs_io release_cblocks $testfile >> $seqres.full
+	_scratch_unmount
+
+	# 2. check after releasement
+	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full
+	if [ $? -ne 0 ]; then
+		_fail "filesystem becomes corrupted after release_cblocks"
+	fi
+
+	_scratch_mount >> $seqres.full
+	f2fs_io reserve_cblocks $testfile >> $seqres.full
+	_scratch_unmount
+
+	# 3. check after rservation
+	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full
+	if [ $? -ne 0 ]; then
+		_fail "filesystem becomes corrupted after reserve_cblocks"
+	fi
+
+	_scratch_mount "-o compress_mode=user" >> $seqres.full
+	f2fs_io decompress $testfile >> $seqres.full
+	_scratch_unmount
+
+	# 4. check after decompression
+	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full
+	if [ $? -ne 0 ]; then
+		_fail "filesystem becomes corrupted after decompress"
+	fi
+done
+
+status=0
+exit
diff --git a/tests/f2fs/007.out b/tests/f2fs/007.out
new file mode 100644
index 00000000..2ea71c18
--- /dev/null
+++ b/tests/f2fs/007.out
@@ -0,0 +1,4 @@
+QA output created by 007
+compression ratio is: 64 / 256
+compression ratio is: 128 / 256
+compression ratio is: 192 / 256
-- 
2.40.1



_______________________________________________
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] 8+ messages in thread

* Re: [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case
  2024-10-15  2:51 [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case Chao Yu via Linux-f2fs-devel
  2024-10-15  2:51 ` [f2fs-dev] [PATCH 2/2] f2fs/007: add testcase to check consistency of compressed inode metadata Chao Yu via Linux-f2fs-devel
@ 2024-10-23  2:37 ` Zorro Lang
  2024-10-23  2:53   ` Chao Yu via Linux-f2fs-devel
  1 sibling, 1 reply; 8+ messages in thread
From: Zorro Lang @ 2024-10-23  2:37 UTC (permalink / raw)
  To: Chao Yu; +Cc: Jaegeuk Kim, fstests, linux-f2fs-devel

On Tue, Oct 15, 2024 at 10:51:05AM +0800, Chao Yu wrote:
> This is a regression test to check whether f2fs handles dirty
> data correctly when checkpoint is disabled, if lfs mode is on,
> it will trigger OPU for all overwritten data, this will cost
> free segments, so f2fs must account overwritten data as OPU
> data when calculating free space, otherwise, it may run out
> of free segments in f2fs' allocation function, resulting in
> panic.
> 
> Cc: Jaegeuk Kim <jaegeuk@kernel.org>
> Signed-off-by: Chao Yu <chao@kernel.org>
> ---
>  tests/f2fs/006     | 52 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/f2fs/006.out |  6 ++++++
>  2 files changed, 58 insertions(+)
>  create mode 100755 tests/f2fs/006
>  create mode 100644 tests/f2fs/006.out
> 
> diff --git a/tests/f2fs/006 b/tests/f2fs/006
> new file mode 100755
> index 00000000..b359ef8f
> --- /dev/null
> +++ b/tests/f2fs/006
> @@ -0,0 +1,52 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2024 Oppo.  All Rights Reserved.
> +#
> +# FS QA Test No. f2fs/006
> +#
> +# This is a regression test to check whether f2fs handles dirty
> +# data correctly when checkpoint is disabled, if lfs mode is on,
> +# it will trigger OPU for all overwritten data, this will cost
> +# free segments, so f2fs must account overwritten data as OPU
> +# data when calculating free space, otherwise, it may run out
> +# of free segments in f2fs' allocation function, resulting in
> +# panic.
> +#
> +. ./common/preamble
> +_begin_fstest auto quick
> +
> +_cleanup()
> +{
> +	rm -f $img
> +	_scratch_unmount >> $seqres.full
> +	cd /
> +	rm -r -f $tmp.*
> +}
> +
> +_require_scratch
> +_scratch_mkfs >> $seqres.full
> +_scratch_mount >> $seqres.full
> +
> +img=$SCRATCH_MNT/f2fs.img
> +mnt=$SCRATCH_MNT/f2fs.mnt
> +testfile=$mnt/testfile
> +
> +mkdir $mnt
> +dd if=/dev/zero of=$img bs=1M count=100 2>/dev/null
> +$MKFS_F2FS_PROG -f $img >/dev/null 2>&1
> +sync
> +
> +# use mode=lfs to let f2fs always triggers OPU
> +mount -t $FSTYP -o loop,mode=lfs,checkpoint=disable:10%,noinline_dentry $img $mnt

Hi Chao,

Is the loop device necessary? What if use SCRATCH_DEV and SCRATCH_MNT directly?

Thanks,
Zorro

> +
> +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null
> +
> +# it may run out of free space of f2fs and hang kernel
> +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
> +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
> +
> +mount -o remount,checkpoint=enable $mnt
> +umount $mnt
> +
> +status=0
> +exit
> diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out
> new file mode 100644
> index 00000000..a2c7ba48
> --- /dev/null
> +++ b/tests/f2fs/006.out
> @@ -0,0 +1,6 @@
> +QA output created by 006
> +50+0 records in
> +50+0 records out
> +dd: error writing '/mnt/scratch_f2fs/f2fs.mnt/testfile': No space left on device
> +3+0 records in
> +2+0 records out
> -- 
> 2.40.1
> 



_______________________________________________
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] 8+ messages in thread

* Re: [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case
  2024-10-23  2:37 ` [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case Zorro Lang
@ 2024-10-23  2:53   ` Chao Yu via Linux-f2fs-devel
  2024-10-23  3:17     ` Zorro Lang
  0 siblings, 1 reply; 8+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2024-10-23  2:53 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Jaegeuk Kim, fstests, linux-f2fs-devel

On 2024/10/23 10:37, Zorro Lang wrote:
> On Tue, Oct 15, 2024 at 10:51:05AM +0800, Chao Yu wrote:
>> This is a regression test to check whether f2fs handles dirty
>> data correctly when checkpoint is disabled, if lfs mode is on,
>> it will trigger OPU for all overwritten data, this will cost
>> free segments, so f2fs must account overwritten data as OPU
>> data when calculating free space, otherwise, it may run out
>> of free segments in f2fs' allocation function, resulting in
>> panic.
>>
>> Cc: Jaegeuk Kim <jaegeuk@kernel.org>
>> Signed-off-by: Chao Yu <chao@kernel.org>
>> ---
>>   tests/f2fs/006     | 52 ++++++++++++++++++++++++++++++++++++++++++++++
>>   tests/f2fs/006.out |  6 ++++++
>>   2 files changed, 58 insertions(+)
>>   create mode 100755 tests/f2fs/006
>>   create mode 100644 tests/f2fs/006.out
>>
>> diff --git a/tests/f2fs/006 b/tests/f2fs/006
>> new file mode 100755
>> index 00000000..b359ef8f
>> --- /dev/null
>> +++ b/tests/f2fs/006
>> @@ -0,0 +1,52 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2024 Oppo.  All Rights Reserved.
>> +#
>> +# FS QA Test No. f2fs/006
>> +#
>> +# This is a regression test to check whether f2fs handles dirty
>> +# data correctly when checkpoint is disabled, if lfs mode is on,
>> +# it will trigger OPU for all overwritten data, this will cost
>> +# free segments, so f2fs must account overwritten data as OPU
>> +# data when calculating free space, otherwise, it may run out
>> +# of free segments in f2fs' allocation function, resulting in
>> +# panic.
>> +#
>> +. ./common/preamble
>> +_begin_fstest auto quick
>> +
>> +_cleanup()
>> +{
>> +	rm -f $img
>> +	_scratch_unmount >> $seqres.full
>> +	cd /
>> +	rm -r -f $tmp.*
>> +}
>> +
>> +_require_scratch
>> +_scratch_mkfs >> $seqres.full
>> +_scratch_mount >> $seqres.full
>> +
>> +img=$SCRATCH_MNT/f2fs.img
>> +mnt=$SCRATCH_MNT/f2fs.mnt
>> +testfile=$mnt/testfile
>> +
>> +mkdir $mnt
>> +dd if=/dev/zero of=$img bs=1M count=100 2>/dev/null
>> +$MKFS_F2FS_PROG -f $img >/dev/null 2>&1
>> +sync
>> +
>> +# use mode=lfs to let f2fs always triggers OPU
>> +mount -t $FSTYP -o loop,mode=lfs,checkpoint=disable:10%,noinline_dentry $img $mnt
> 
> Hi Chao,
> 
> Is the loop device necessary? What if use SCRATCH_DEV and SCRATCH_MNT directly?

Hi Zorro,

It uses loop device to limit image size, so that we can speed
up padding steps of the test since it depends on ENOSPC state.

Or maybe we can mkfs.f2fs $SCRATCH_DEV w/ specified sector size?
Any suggestion?

Thanks,

> 
> Thanks,
> Zorro
> 
>> +
>> +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null
>> +
>> +# it may run out of free space of f2fs and hang kernel
>> +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
>> +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
>> +
>> +mount -o remount,checkpoint=enable $mnt
>> +umount $mnt
>> +
>> +status=0
>> +exit
>> diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out
>> new file mode 100644
>> index 00000000..a2c7ba48
>> --- /dev/null
>> +++ b/tests/f2fs/006.out
>> @@ -0,0 +1,6 @@
>> +QA output created by 006
>> +50+0 records in
>> +50+0 records out
>> +dd: error writing '/mnt/scratch_f2fs/f2fs.mnt/testfile': No space left on device
>> +3+0 records in
>> +2+0 records out
>> -- 
>> 2.40.1
>>
> 



_______________________________________________
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] 8+ messages in thread

* Re: [f2fs-dev] [PATCH 2/2] f2fs/007: add testcase to check consistency of compressed inode metadata
  2024-10-15  2:51 ` [f2fs-dev] [PATCH 2/2] f2fs/007: add testcase to check consistency of compressed inode metadata Chao Yu via Linux-f2fs-devel
@ 2024-10-23  3:07   ` Zorro Lang
  2024-10-23  7:18     ` Chao Yu via Linux-f2fs-devel
  0 siblings, 1 reply; 8+ messages in thread
From: Zorro Lang @ 2024-10-23  3:07 UTC (permalink / raw)
  To: Chao Yu; +Cc: Jaegeuk Kim, Qi Han, fstests, linux-f2fs-devel

On Tue, Oct 15, 2024 at 10:51:06AM +0800, Chao Yu wrote:
> metadata of compressed inode should always be consistent after file
> compression, reservation, releasement and decompression, let's add
> a testcase to check it.
> 
> Cc: Jaegeuk Kim <jaegeuk@kernel.org>
> Cc: Qi Han <hanqi@vivo.com>
> Signed-off-by: Chao Yu <chao@kernel.org>
> ---
>  tests/f2fs/007     | 116 +++++++++++++++++++++++++++++++++++++++++++++
>  tests/f2fs/007.out |   4 ++
>  2 files changed, 120 insertions(+)
>  create mode 100755 tests/f2fs/007
>  create mode 100644 tests/f2fs/007.out
> 
> diff --git a/tests/f2fs/007 b/tests/f2fs/007
> new file mode 100755
> index 00000000..274be806
> --- /dev/null
> +++ b/tests/f2fs/007
> @@ -0,0 +1,116 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2024 Oppo.  All Rights Reserved.
> +#
> +# FS QA Test No. f2fs/007
> +#
> +# This is a regression test to check whether compressed metadata

Hi Chao,

Thanks for the new f2fs test cases.

If there's a known fix for this regression, please mark it by:

_fixed_by_kernel_commit .....

> +# can become inconsistent after file compression, reservation
> +# releasement, and decompression.
> +#
> +. ./common/preamble
> +_begin_fstest auto quick
                            ^^^^
                            rw compress ?

> +
> +_cleanup()
> +{
> +	cd /
> +	rm -r -f tmp.*
> +}

This's same with default _cleanup, so it can be removed.

> +
> +testfile_prefix=$SCRATCH_MNT/testfile
> +fio_config=$tmp.fio
> +
> +cat >$fio_config <<EOF
> +[write_compressed_data_30]
> +name=mytest
> +ioengine=psync
> +rw=write
> +direct=0
> +bs=1M
> +filesize=1M
> +numjobs=1
> +filename=/mnt/scratch_f2fs/testfile30
            ^^^^^^^^^^

$SCRATCH_MNT or ${testfile_prefix}30 ?

> +buffer_compress_percentage=30
> +
> +[write_compressed_data_60]
> +name=mytest
> +ioengine=psync
> +rw=write
> +direct=0
> +bs=1M
> +filesize=1M
> +numjobs=1
> +filename=/mnt/scratch_f2fs/testfile60

Same as above.

> +buffer_compress_percentage=60
> +
> +[write_compressed_data_90]
> +name=mytest
> +ioengine=psync
> +rw=write
> +direct=0
> +bs=1M
> +filesize=1M
> +numjobs=1
> +filename=/mnt/scratch_f2fs/testfile90

Same as above

> +buffer_compress_percentage=90
> +EOF
> +
> +_require_fio $fio_config
> +_require_scratch

I'd like to call _require_scratch at the beginning, especially you use
SCRATCH_* things in $fio_config. You can refer to generic/095.

> +_scratch_mkfs "-f -O extra_attr,compression" >> $seqres.full

Can you make sure this mkfs never fail? Maybe:
    || _fail "...."

> +_scratch_mount "-o compress_mode=user,compress_extension=*" >> $seqres.full
> +
> +echo -e "Run fio to initialize file w/ specified compress ratio" >> $seqres.full
> +cat $fio_config >> $seqres.full
> +$FIO_PROG $fio_config >> $seqres.full
> +_scratch_unmount
> +
> +for i in 30 60 90; do
> +	testfile=$testfile_prefix$i
> +
> +	_scratch_mount "-o compress_mode=user" >> $seqres.full
> +	f2fs_io compress $testfile >> $seqres.full
        ^^^^^^^
$F2FS_IO_PROG

> +	cblocks=`f2fs_io get_cblocks $testfile`
                 ^^^^^^^
$F2FS_IO_PROG

> +	echo "compression ratio is: "$cblocks" / 256"
> +
> +	_scratch_unmount
> +
> +	# 1. check after compression
> +	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full

_check_scratch_fs ?

If f2fs needs some custom operations, please change the _check_scratch_fs
or _check_generic_filesystem.

> +	if [ $? -ne 0 ]; then
> +		_fail "filesystem becomes corrupted after compress"
> +	fi
> +
> +	_scratch_mount >> $seqres.full
> +	f2fs_io release_cblocks $testfile >> $seqres.full

$F2FS_IO_PROG

> +	_scratch_unmount
> +
> +	# 2. check after releasement
> +	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full

_check_scratch_fs

> +	if [ $? -ne 0 ]; then
> +		_fail "filesystem becomes corrupted after release_cblocks"
> +	fi
> +
> +	_scratch_mount >> $seqres.full
> +	f2fs_io reserve_cblocks $testfile >> $seqres.full

$F2FS_IO_PROG

> +	_scratch_unmount
> +
> +	# 3. check after rservation
> +	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full

_check_scratch_fs

> +	if [ $? -ne 0 ]; then
> +		_fail "filesystem becomes corrupted after reserve_cblocks"
> +	fi
> +
> +	_scratch_mount "-o compress_mode=user" >> $seqres.full
> +	f2fs_io decompress $testfile >> $seqres.full

$F2FS_IO_PROG

> +	_scratch_unmount
> +
> +	# 4. check after decompression
> +	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full

_check_scratch_fs

Thanks,
Zorro

> +	if [ $? -ne 0 ]; then
> +		_fail "filesystem becomes corrupted after decompress"
> +	fi
> +done
> +
> +status=0
> +exit
> diff --git a/tests/f2fs/007.out b/tests/f2fs/007.out
> new file mode 100644
> index 00000000..2ea71c18
> --- /dev/null
> +++ b/tests/f2fs/007.out
> @@ -0,0 +1,4 @@
> +QA output created by 007
> +compression ratio is: 64 / 256
> +compression ratio is: 128 / 256
> +compression ratio is: 192 / 256
> -- 
> 2.40.1
> 



_______________________________________________
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] 8+ messages in thread

* Re: [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case
  2024-10-23  2:53   ` Chao Yu via Linux-f2fs-devel
@ 2024-10-23  3:17     ` Zorro Lang
  2024-10-23  3:27       ` Chao Yu via Linux-f2fs-devel
  0 siblings, 1 reply; 8+ messages in thread
From: Zorro Lang @ 2024-10-23  3:17 UTC (permalink / raw)
  To: Chao Yu; +Cc: Jaegeuk Kim, fstests, linux-f2fs-devel

On Wed, Oct 23, 2024 at 10:53:09AM +0800, Chao Yu wrote:
> On 2024/10/23 10:37, Zorro Lang wrote:
> > On Tue, Oct 15, 2024 at 10:51:05AM +0800, Chao Yu wrote:
> > > This is a regression test to check whether f2fs handles dirty
> > > data correctly when checkpoint is disabled, if lfs mode is on,
> > > it will trigger OPU for all overwritten data, this will cost
> > > free segments, so f2fs must account overwritten data as OPU
> > > data when calculating free space, otherwise, it may run out
> > > of free segments in f2fs' allocation function, resulting in
> > > panic.
> > > 
> > > Cc: Jaegeuk Kim <jaegeuk@kernel.org>
> > > Signed-off-by: Chao Yu <chao@kernel.org>
> > > ---
> > >   tests/f2fs/006     | 52 ++++++++++++++++++++++++++++++++++++++++++++++
> > >   tests/f2fs/006.out |  6 ++++++
> > >   2 files changed, 58 insertions(+)
> > >   create mode 100755 tests/f2fs/006
> > >   create mode 100644 tests/f2fs/006.out
> > > 
> > > diff --git a/tests/f2fs/006 b/tests/f2fs/006
> > > new file mode 100755
> > > index 00000000..b359ef8f
> > > --- /dev/null
> > > +++ b/tests/f2fs/006
> > > @@ -0,0 +1,52 @@
> > > +#! /bin/bash
> > > +# SPDX-License-Identifier: GPL-2.0
> > > +# Copyright (c) 2024 Oppo.  All Rights Reserved.
> > > +#
> > > +# FS QA Test No. f2fs/006
> > > +#
> > > +# This is a regression test to check whether f2fs handles dirty
> > > +# data correctly when checkpoint is disabled, if lfs mode is on,
> > > +# it will trigger OPU for all overwritten data, this will cost
> > > +# free segments, so f2fs must account overwritten data as OPU
> > > +# data when calculating free space, otherwise, it may run out
> > > +# of free segments in f2fs' allocation function, resulting in
> > > +# panic.
> > > +#
> > > +. ./common/preamble
> > > +_begin_fstest auto quick
> > > +
> > > +_cleanup()
> > > +{
> > > +	rm -f $img
> > > +	_scratch_unmount >> $seqres.full
> > > +	cd /
> > > +	rm -r -f $tmp.*
> > > +}
> > > +
> > > +_require_scratch
> > > +_scratch_mkfs >> $seqres.full
> > > +_scratch_mount >> $seqres.full
> > > +
> > > +img=$SCRATCH_MNT/f2fs.img
> > > +mnt=$SCRATCH_MNT/f2fs.mnt
> > > +testfile=$mnt/testfile
> > > +
> > > +mkdir $mnt
> > > +dd if=/dev/zero of=$img bs=1M count=100 2>/dev/null
> > > +$MKFS_F2FS_PROG -f $img >/dev/null 2>&1
> > > +sync
> > > +
> > > +# use mode=lfs to let f2fs always triggers OPU
> > > +mount -t $FSTYP -o loop,mode=lfs,checkpoint=disable:10%,noinline_dentry $img $mnt
> > 
> > Hi Chao,
> > 
> > Is the loop device necessary? What if use SCRATCH_DEV and SCRATCH_MNT directly?
> 
> Hi Zorro,
> 
> It uses loop device to limit image size, so that we can speed
> up padding steps of the test since it depends on ENOSPC state.
> 
> Or maybe we can mkfs.f2fs $SCRATCH_DEV w/ specified sector size?
> Any suggestion?

Can scratch_mkfs_sized() help? I saw it supports f2fs.

Thanks,
Zorro

> 
> Thanks,
> 
> > 
> > Thanks,
> > Zorro
> > 
> > > +
> > > +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null
> > > +
> > > +# it may run out of free space of f2fs and hang kernel
> > > +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
> > > +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
> > > +
> > > +mount -o remount,checkpoint=enable $mnt
> > > +umount $mnt
> > > +
> > > +status=0
> > > +exit
> > > diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out
> > > new file mode 100644
> > > index 00000000..a2c7ba48
> > > --- /dev/null
> > > +++ b/tests/f2fs/006.out
> > > @@ -0,0 +1,6 @@
> > > +QA output created by 006
> > > +50+0 records in
> > > +50+0 records out
> > > +dd: error writing '/mnt/scratch_f2fs/f2fs.mnt/testfile': No space left on device
> > > +3+0 records in
> > > +2+0 records out
> > > -- 
> > > 2.40.1
> > > 
> > 
> 



_______________________________________________
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] 8+ messages in thread

* Re: [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case
  2024-10-23  3:17     ` Zorro Lang
@ 2024-10-23  3:27       ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 8+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2024-10-23  3:27 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Jaegeuk Kim, fstests, linux-f2fs-devel

On 2024/10/23 11:17, Zorro Lang wrote:
> On Wed, Oct 23, 2024 at 10:53:09AM +0800, Chao Yu wrote:
>> On 2024/10/23 10:37, Zorro Lang wrote:
>>> On Tue, Oct 15, 2024 at 10:51:05AM +0800, Chao Yu wrote:
>>>> This is a regression test to check whether f2fs handles dirty
>>>> data correctly when checkpoint is disabled, if lfs mode is on,
>>>> it will trigger OPU for all overwritten data, this will cost
>>>> free segments, so f2fs must account overwritten data as OPU
>>>> data when calculating free space, otherwise, it may run out
>>>> of free segments in f2fs' allocation function, resulting in
>>>> panic.
>>>>
>>>> Cc: Jaegeuk Kim <jaegeuk@kernel.org>
>>>> Signed-off-by: Chao Yu <chao@kernel.org>
>>>> ---
>>>>    tests/f2fs/006     | 52 ++++++++++++++++++++++++++++++++++++++++++++++
>>>>    tests/f2fs/006.out |  6 ++++++
>>>>    2 files changed, 58 insertions(+)
>>>>    create mode 100755 tests/f2fs/006
>>>>    create mode 100644 tests/f2fs/006.out
>>>>
>>>> diff --git a/tests/f2fs/006 b/tests/f2fs/006
>>>> new file mode 100755
>>>> index 00000000..b359ef8f
>>>> --- /dev/null
>>>> +++ b/tests/f2fs/006
>>>> @@ -0,0 +1,52 @@
>>>> +#! /bin/bash
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +# Copyright (c) 2024 Oppo.  All Rights Reserved.
>>>> +#
>>>> +# FS QA Test No. f2fs/006
>>>> +#
>>>> +# This is a regression test to check whether f2fs handles dirty
>>>> +# data correctly when checkpoint is disabled, if lfs mode is on,
>>>> +# it will trigger OPU for all overwritten data, this will cost
>>>> +# free segments, so f2fs must account overwritten data as OPU
>>>> +# data when calculating free space, otherwise, it may run out
>>>> +# of free segments in f2fs' allocation function, resulting in
>>>> +# panic.
>>>> +#
>>>> +. ./common/preamble
>>>> +_begin_fstest auto quick
>>>> +
>>>> +_cleanup()
>>>> +{
>>>> +	rm -f $img
>>>> +	_scratch_unmount >> $seqres.full
>>>> +	cd /
>>>> +	rm -r -f $tmp.*
>>>> +}
>>>> +
>>>> +_require_scratch
>>>> +_scratch_mkfs >> $seqres.full
>>>> +_scratch_mount >> $seqres.full
>>>> +
>>>> +img=$SCRATCH_MNT/f2fs.img
>>>> +mnt=$SCRATCH_MNT/f2fs.mnt
>>>> +testfile=$mnt/testfile
>>>> +
>>>> +mkdir $mnt
>>>> +dd if=/dev/zero of=$img bs=1M count=100 2>/dev/null
>>>> +$MKFS_F2FS_PROG -f $img >/dev/null 2>&1
>>>> +sync
>>>> +
>>>> +# use mode=lfs to let f2fs always triggers OPU
>>>> +mount -t $FSTYP -o loop,mode=lfs,checkpoint=disable:10%,noinline_dentry $img $mnt
>>>
>>> Hi Chao,
>>>
>>> Is the loop device necessary? What if use SCRATCH_DEV and SCRATCH_MNT directly?
>>
>> Hi Zorro,
>>
>> It uses loop device to limit image size, so that we can speed
>> up padding steps of the test since it depends on ENOSPC state.
>>
>> Or maybe we can mkfs.f2fs $SCRATCH_DEV w/ specified sector size?
>> Any suggestion?
> 
> Can scratch_mkfs_sized() help? I saw it supports f2fs.

Yes, let me update this patch, thanks.

Thanks,

> 
> Thanks,
> Zorro
> 
>>
>> Thanks,
>>
>>>
>>> Thanks,
>>> Zorro
>>>
>>>> +
>>>> +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null
>>>> +
>>>> +# it may run out of free space of f2fs and hang kernel
>>>> +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
>>>> +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync
>>>> +
>>>> +mount -o remount,checkpoint=enable $mnt
>>>> +umount $mnt
>>>> +
>>>> +status=0
>>>> +exit
>>>> diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out
>>>> new file mode 100644
>>>> index 00000000..a2c7ba48
>>>> --- /dev/null
>>>> +++ b/tests/f2fs/006.out
>>>> @@ -0,0 +1,6 @@
>>>> +QA output created by 006
>>>> +50+0 records in
>>>> +50+0 records out
>>>> +dd: error writing '/mnt/scratch_f2fs/f2fs.mnt/testfile': No space left on device
>>>> +3+0 records in
>>>> +2+0 records out
>>>> -- 
>>>> 2.40.1
>>>>
>>>
>>
> 



_______________________________________________
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] 8+ messages in thread

* Re: [f2fs-dev] [PATCH 2/2] f2fs/007: add testcase to check consistency of compressed inode metadata
  2024-10-23  3:07   ` Zorro Lang
@ 2024-10-23  7:18     ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 8+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2024-10-23  7:18 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Jaegeuk Kim, Qi Han, fstests, linux-f2fs-devel

On 2024/10/23 11:07, Zorro Lang wrote:
> On Tue, Oct 15, 2024 at 10:51:06AM +0800, Chao Yu wrote:
>> metadata of compressed inode should always be consistent after file
>> compression, reservation, releasement and decompression, let's add
>> a testcase to check it.
>>
>> Cc: Jaegeuk Kim <jaegeuk@kernel.org>
>> Cc: Qi Han <hanqi@vivo.com>
>> Signed-off-by: Chao Yu <chao@kernel.org>
>> ---
>>   tests/f2fs/007     | 116 +++++++++++++++++++++++++++++++++++++++++++++
>>   tests/f2fs/007.out |   4 ++
>>   2 files changed, 120 insertions(+)
>>   create mode 100755 tests/f2fs/007
>>   create mode 100644 tests/f2fs/007.out
>>
>> diff --git a/tests/f2fs/007 b/tests/f2fs/007
>> new file mode 100755
>> index 00000000..274be806
>> --- /dev/null
>> +++ b/tests/f2fs/007
>> @@ -0,0 +1,116 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2024 Oppo.  All Rights Reserved.
>> +#
>> +# FS QA Test No. f2fs/007
>> +#
>> +# This is a regression test to check whether compressed metadata
> 
> Hi Chao,
> 
> Thanks for the new f2fs test cases.
> 
> If there's a known fix for this regression, please mark it by:
> 
> _fixed_by_kernel_commit .....

Zorro,

Yes, but not been merged yet, so let me add as below and replace
commit_id after upstreaming the fix.

_fixed_by_kernel_commit xxxxxxxxxxxx \
         "f2fs: compress: fix inconsistent update of i_blocks in release_compress_blocks and reserve_compress_blocks"

Thanks for all comments below, will fix all.

Thanks,

> 
>> +# can become inconsistent after file compression, reservation
>> +# releasement, and decompression.
>> +#
>> +. ./common/preamble
>> +_begin_fstest auto quick
>                              ^^^^
>                              rw compress ?
> 
>> +
>> +_cleanup()
>> +{
>> +	cd /
>> +	rm -r -f tmp.*
>> +}
> 
> This's same with default _cleanup, so it can be removed.
> 
>> +
>> +testfile_prefix=$SCRATCH_MNT/testfile
>> +fio_config=$tmp.fio
>> +
>> +cat >$fio_config <<EOF
>> +[write_compressed_data_30]
>> +name=mytest
>> +ioengine=psync
>> +rw=write
>> +direct=0
>> +bs=1M
>> +filesize=1M
>> +numjobs=1
>> +filename=/mnt/scratch_f2fs/testfile30
>              ^^^^^^^^^^
> 
> $SCRATCH_MNT or ${testfile_prefix}30 ?
> 
>> +buffer_compress_percentage=30
>> +
>> +[write_compressed_data_60]
>> +name=mytest
>> +ioengine=psync
>> +rw=write
>> +direct=0
>> +bs=1M
>> +filesize=1M
>> +numjobs=1
>> +filename=/mnt/scratch_f2fs/testfile60
> 
> Same as above.
> 
>> +buffer_compress_percentage=60
>> +
>> +[write_compressed_data_90]
>> +name=mytest
>> +ioengine=psync
>> +rw=write
>> +direct=0
>> +bs=1M
>> +filesize=1M
>> +numjobs=1
>> +filename=/mnt/scratch_f2fs/testfile90
> 
> Same as above
> 
>> +buffer_compress_percentage=90
>> +EOF
>> +
>> +_require_fio $fio_config
>> +_require_scratch
> 
> I'd like to call _require_scratch at the beginning, especially you use
> SCRATCH_* things in $fio_config. You can refer to generic/095.
> 
>> +_scratch_mkfs "-f -O extra_attr,compression" >> $seqres.full
> 
> Can you make sure this mkfs never fail? Maybe:
>      || _fail "...."
> 
>> +_scratch_mount "-o compress_mode=user,compress_extension=*" >> $seqres.full
>> +
>> +echo -e "Run fio to initialize file w/ specified compress ratio" >> $seqres.full
>> +cat $fio_config >> $seqres.full
>> +$FIO_PROG $fio_config >> $seqres.full
>> +_scratch_unmount
>> +
>> +for i in 30 60 90; do
>> +	testfile=$testfile_prefix$i
>> +
>> +	_scratch_mount "-o compress_mode=user" >> $seqres.full
>> +	f2fs_io compress $testfile >> $seqres.full
>          ^^^^^^^
> $F2FS_IO_PROG
> 
>> +	cblocks=`f2fs_io get_cblocks $testfile`
>                   ^^^^^^^
> $F2FS_IO_PROG
> 
>> +	echo "compression ratio is: "$cblocks" / 256"
>> +
>> +	_scratch_unmount
>> +
>> +	# 1. check after compression
>> +	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full
> 
> _check_scratch_fs ?
> 
> If f2fs needs some custom operations, please change the _check_scratch_fs
> or _check_generic_filesystem.
> 
>> +	if [ $? -ne 0 ]; then
>> +		_fail "filesystem becomes corrupted after compress"
>> +	fi
>> +
>> +	_scratch_mount >> $seqres.full
>> +	f2fs_io release_cblocks $testfile >> $seqres.full
> 
> $F2FS_IO_PROG
> 
>> +	_scratch_unmount
>> +
>> +	# 2. check after releasement
>> +	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full
> 
> _check_scratch_fs
> 
>> +	if [ $? -ne 0 ]; then
>> +		_fail "filesystem becomes corrupted after release_cblocks"
>> +	fi
>> +
>> +	_scratch_mount >> $seqres.full
>> +	f2fs_io reserve_cblocks $testfile >> $seqres.full
> 
> $F2FS_IO_PROG
> 
>> +	_scratch_unmount
>> +
>> +	# 3. check after rservation
>> +	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full
> 
> _check_scratch_fs
> 
>> +	if [ $? -ne 0 ]; then
>> +		_fail "filesystem becomes corrupted after reserve_cblocks"
>> +	fi
>> +
>> +	_scratch_mount "-o compress_mode=user" >> $seqres.full
>> +	f2fs_io decompress $testfile >> $seqres.full
> 
> $F2FS_IO_PROG
> 
>> +	_scratch_unmount
>> +
>> +	# 4. check after decompression
>> +	fsck -t $FSTYP -f $SCRATCH_DEV >> $seqres.full
> 
> _check_scratch_fs
> 
> Thanks,
> Zorro
> 
>> +	if [ $? -ne 0 ]; then
>> +		_fail "filesystem becomes corrupted after decompress"
>> +	fi
>> +done
>> +
>> +status=0
>> +exit
>> diff --git a/tests/f2fs/007.out b/tests/f2fs/007.out
>> new file mode 100644
>> index 00000000..2ea71c18
>> --- /dev/null
>> +++ b/tests/f2fs/007.out
>> @@ -0,0 +1,4 @@
>> +QA output created by 007
>> +compression ratio is: 64 / 256
>> +compression ratio is: 128 / 256
>> +compression ratio is: 192 / 256
>> -- 
>> 2.40.1
>>
> 



_______________________________________________
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] 8+ messages in thread

end of thread, other threads:[~2024-10-23  7:18 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-15  2:51 [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case Chao Yu via Linux-f2fs-devel
2024-10-15  2:51 ` [f2fs-dev] [PATCH 2/2] f2fs/007: add testcase to check consistency of compressed inode metadata Chao Yu via Linux-f2fs-devel
2024-10-23  3:07   ` Zorro Lang
2024-10-23  7:18     ` Chao Yu via Linux-f2fs-devel
2024-10-23  2:37 ` [f2fs-dev] [PATCH 1/2] f2fs/006: add testcase to check out-of-space case Zorro Lang
2024-10-23  2:53   ` Chao Yu via Linux-f2fs-devel
2024-10-23  3:17     ` Zorro Lang
2024-10-23  3:27       ` 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).