On 7/8/25 22:29, Zorro Lang wrote:
> On Mon, Jul 07, 2025 at 05:05:31PM +0800, Chao Yu wrote:
>> On 7/5/25 02:14, Zorro Lang wrote:
>>> On Fri, Jul 04, 2025 at 07:48:18PM +0800, Chao Yu wrote:
>>>> As f2fs changes to use new mount APIs, let's add a new testcase
>>>> to check mount result for all f2fs supported mount options and
>>>> their combinations, in order to detect any inconsistency during
>>>> mount.
>>>>
>>>> Cc: Jaegeuk Kim <jaeg...@kernel.org>
>>>> Signed-off-by: Chao Yu <c...@kernel.org>
>>>> ---
>>>> v2:
>>>> - allow to check mount options w/ zoned device
>>>>  common/rc          |   3 +
>>>>  tests/f2fs/015     | 159 ++++++++++++++++++++++++++++++++
>>>>  tests/f2fs/015.out | 225 +++++++++++++++++++++++++++++++++++++++++++++
>>>>  3 files changed, 387 insertions(+)
>>>>  create mode 100755 tests/f2fs/015
>>>>  create mode 100644 tests/f2fs/015.out
>>>>
>>>> diff --git a/common/rc b/common/rc
>>>> index f71cc8f0..94fdce7e 100644
>>>> --- a/common/rc
>>>> +++ b/common/rc
>>>> @@ -844,6 +844,9 @@ _test_mkfs()
>>>>      ext2|ext3|ext4)
>>>>    $MKFS_PROG -t $FSTYP -- -F $MKFS_OPTIONS $* $TEST_DEV
>>>>    ;;
>>>> +    f2fs)
>>>> +  $MKFS_PROG -t $FSTYP -- -f $MKFS_OPTIONS $* $TEST_DEV
>>>> +  ;;
>>>>      xfs)
>>>>    _test_options mkfs
>>>>    $MKFS_PROG -t $FSTYP -- -f $TEST_OPTIONS $MKFS_OPTIONS $* $TEST_DEV
>>>> diff --git a/tests/f2fs/015 b/tests/f2fs/015
>>>> new file mode 100755
>>>> index 00000000..746e79de
>>>> --- /dev/null
>>>> +++ b/tests/f2fs/015
>>>> @@ -0,0 +1,159 @@
>>>> +#! /bin/bash
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +# Copyright (c) 2025 Chao Yu.  All Rights Reserved.
>>>> +#
>>>> +# FS QA Test No. f2fs/015
>>>> +#
>>>> +# This testcase tries to check stability of mount result
>>>> +# w/ all f2fs supported mount option and their combination.
>>>> +#
>>>> +. ./common/preamble
>>>> +_begin_fstest auto quick
>>>> +_require_kernel_config CONFIG_F2FS_FS_XATTR
>>>> +_require_kernel_config CONFIG_F2FS_FS_POSIX_ACL
>>>> +_require_kernel_config CONFIG_F2FS_FAULT_INJECTION
>>>> +_require_kernel_config CONFIG_F2FS_FS_COMPRESSION
>>>> +_require_kernel_config CONFIG_F2FS_FS_LZO
>>>> +_require_kernel_config CONFIG_F2FS_FS_LZORLE
>>>> +_require_kernel_config CONFIG_F2FS_FS_LZ4
>>>> +_require_kernel_config CONFIG_F2FS_FS_LZ4HC
>>>> +_require_kernel_config CONFIG_F2FS_FS_ZSTD
>>>> +
>>>> +_require_zoned_device "$TEST_DEV"
>>>
>>> This requirement limit this test case only on zoned device...
>>> Maybe you can slip this test case to 2~3 cases, let some common
>>> mount options can be tested at first, some unimportant mount
>>> options can be tested in another case, then zoned device related
>>> mount options be tested in a seperated case ?
>>
>> Good idea, do you want to uplift common mount option testcase to
>> generic/ directory? or is it fine to leave it in f2fs/ now?
> 
> If you'd like to write a test case for mount(8) "COMMAND-LINE OPTIONS"
> and "FILESYSTEM-INDEPENDENT MOUNT OPTIONS", that's good too :)

I will take a look once I got free slot. :)

> 
> For this case I think it's fine to leave it in f2fs. Since new-mount
> APIs were brought in, more and more filesystems have their own xfs mount
> options test cases as what you are doing for f2fs now. These cases are
> $FSTYP specific test mostly.

Agreed, let me make it as f2fs testcase now.

Thanks,

> 
> Thanks,
> Zorro
> 
>>
>> Thanks,
>>
>>>
>>> Thanks,
>>> Zorro
>>>
>>>> +_test_unmount >> $seqres.full 2>&1
>>>> +
>>>> +options=(
>>>> +# mount_option                    mkfs_option
>>>> +  "background_gc=on"              ""                      \
>>>> +  "background_gc=off"             ""                      \
>>>> +  "background_gc=sync"            ""                      \
>>>> +  "background_gc=on"              "blkzone"               \
>>>> +  "background_gc=off"             "blkzone"               \
>>>> +  "background_gc=sync"            "blkzone"               \
>>>> +  "disable_roll_forward"          ""                      \
>>>> +  "norecovery"                    ""                      \
>>>> +  "discard"                       ""                      \
>>>> +  "nodiscard"                     ""                      \
>>>> +  "no_heap"                       ""                      \
>>>> +  "heap"                          ""                      \
>>>> +  "user_xattr"                    ""                      \
>>>> +  "nouser_xattr"                  ""                      \
>>>> +  "acl"                           ""                      \
>>>> +  "noacl"                         ""                      \
>>>> +  "active_logs=2"                 ""                      \
>>>> +  "active_logs=4"                 ""                      \
>>>> +  "active_logs=6"                 ""                      \
>>>> +  "disable_ext_identify"          ""                      \
>>>> +  "inline_xattr"                  ""                      \
>>>> +  "noinline_xattr"                ""                      \
>>>> +  "inline_xattr_size=400"         "extra,flexible_inline_xattr"\
>>>> +  "inline_xattr_size=400"         ""                      \
>>>> +  "inline_data"                   ""                      \
>>>> +  "noinline_dentry"               ""                      \
>>>> +  "inline_dentry"                 ""                      \
>>>> +  "noinline_dentry"               ""                      \
>>>> +  "flush_merge"                   ""                      \
>>>> +  "noflush_merge"                 ""                      \
>>>> +  "barrier"                       ""                      \
>>>> +  "nobarrier"                     ""                      \
>>>> +  "fastboot"                      ""                      \
>>>> +  "extent_cache"                  ""                      \
>>>> +  "noextent_cache"                ""                      \
>>>> +  "data_flush"                    ""                      \
>>>> +  "reserve_root=32768"            ""                      \
>>>> +  "resuid=1000"                   ""                      \
>>>> +  "resgid=1000"                   ""                      \
>>>> +  "fault_injection=100"           ""                      \
>>>> +  "fault_type=4095"               ""                      \
>>>> +  "mode=adaptive"                 ""                      \
>>>> +  "mode=lfs"                      ""                      \
>>>> +  "mode=fragment:segment"         ""                      \
>>>> +  "mode=fragment:block"           ""                      \
>>>> +  "mode=adaptive"                 "blkzone"               \
>>>> +  "mode=lfs"                      "blkzone"               \
>>>> +  "mode=fragment:segment"         "blkzone"               \
>>>> +  "mode=fragment:block"           "blkzone"               \
>>>> +  "usrquota"                      ""                      \
>>>> +  "grpquota"                      ""                      \
>>>> +  "prjquota"                      ""                      \
>>>> +  "usrjquota=ausrquota"           ""                      \
>>>> +  "grpjquota=agrpquota"           ""                      \
>>>> +  "prjjquota=aprjquota"           ""                      \
>>>> +  "jqfmt=vfsold"                  ""                      \
>>>> +  "jqfmt=vfsv0"                   ""                      \
>>>> +  "jqfmt=vfsv1"                   ""                      \
>>>> +  "usrjquota="                    ""                      \
>>>> +  "grpjquota="                    ""                      \
>>>> +  "prjjquota="                    ""                      \
>>>> +  "quota"                         ""                      \
>>>> +  "noquota"                       ""                      \
>>>> +  "alloc_mode=reuse"              ""                      \
>>>> +  "alloc_mode=default"            ""                      \
>>>> +  "fsync_mode=posix"              ""                      \
>>>> +  "fsync_mode=strict"             ""                      \
>>>> +  "fsync_mode=nobarrier"          ""                      \
>>>> +  "test_dummy_encryption"         ""                      \
>>>> +  "test_dummy_encryption=v1"      ""                      \
>>>> +  "test_dummy_encryption=v2"      ""                      \
>>>> +  "checkpoint=enable"             ""                      \
>>>> +  "checkpoint=disable"            ""                      \
>>>> +  "checkpoint=disable:32768"      ""                      \
>>>> +  "checkpoint=disable:50%"        ""                      \
>>>> +  "checkpoint_merge"              ""                      \
>>>> +  "nocheckpoint_merge"            ""                      \
>>>> +  "compress_algorithm=lzo"        ""                      \
>>>> +  "compress_algorithm=lzo"        "extra,compression"     \
>>>> +  "compress_algorithm=lz4"        "extra,compression"     \
>>>> +  "compress_algorithm=zstd"       "extra,compression"     \
>>>> +  "compress_algorithm=lzo-rle"    "extra,compression"     \
>>>> +  "compress_algorithm=lz4:3"      "extra,compression"     \
>>>> +  "compress_algorithm=zstd:1"     "extra,compression"     \
>>>> +  "compress_log_size=8"           "extra,compression"     \
>>>> +  "compress_extension=so"         "extra,compression"     \
>>>> +  "nocompress_extension=so"       "extra,compression"     \
>>>> +  "nocompress_extension=*"        "extra,compression"     \
>>>> +  "compress_extension=so,nocompress_extension=so"         \
>>>> +                                  "extra,compression"     \
>>>> +  "compress_chksum"               "extra,compression"     \
>>>> +  "compress_mode=fs"              "extra,compression"     \
>>>> +  "compress_mode=user"            "extra,compression"     \
>>>> +  "compress_cache"                "extra,compression"     \
>>>> +  "inlinecrypt"                   ""                      \
>>>> +  "atgc"                          ""                      \
>>>> +  "discard_unit=block"            ""                      \
>>>> +  "discard_unit=segment"          ""                      \
>>>> +  "discard_unit=section"          ""                      \
>>>> +  "discard_unit=block"            "blkzone"               \
>>>> +  "discard_unit=segment"          "blkzone"               \
>>>> +  "discard_unit=section"          "blkzone"               \
>>>> +  "memory=normal"                 ""                      \
>>>> +  "memory=low"                    ""                      \
>>>> +  "age_extent_cache"              ""                      \
>>>> +  "errors=panic"                  ""                      \
>>>> +  "errors=continue"               ""                      \
>>>> +  "errors=remount-ro"             ""                      \
>>>> +  "nat_bits"                      ""                      \
>>>> +  "atgc,mode=lfs"                 ""                      \
>>>> +  "ro,flush_merge"                ""                      \
>>>> +  "rw"                            "ro"                    \
>>>> +  "norecovery,ro"                 ""                      \
>>>> +)
>>>> +
>>>> +for ((i=0;i<${#options[@]};i=i+2))
>>>> +do
>>>> +  echo "Option#$i: ${options[$i]} : ${options[$((i+1))]}"
>>>> +  if [ "${options[$((i+1))]}" == "blkzone" ]; then
>>>> +          _test_mkfs "-m" >> $seqres.full
>>>> +          _test_mount "-o ${options[$i]}" >> $seqres.full 2>&1
>>>> +          echo $?
>>>> +          _test_unmount >> $seqres.full 2>&1
>>>> +  else
>>>> +          _scratch_mkfs "-O ${options[$((i+1))]}" >> $seqres.full
>>>> +          _try_scratch_mount "-o ${options[$i]}" >> $seqres.full 2>&1
>>>> +          echo $?
>>>> +          _scratch_unmount >> $seqres.full 2>&1
>>>> +  fi
>>>> +done
>>>> +
>>>> +status=0
>>>> +exit
>>>> diff --git a/tests/f2fs/015.out b/tests/f2fs/015.out
>>>> new file mode 100644
>>>> index 00000000..d7f4e62a
>>>> --- /dev/null
>>>> +++ b/tests/f2fs/015.out
>>>> @@ -0,0 +1,225 @@
>>>> +QA output created by 015
>>>> +Option#0: background_gc=on : 
>>>> +0
>>>> +Option#2: background_gc=off : 
>>>> +0
>>>> +Option#4: background_gc=sync : 
>>>> +0
>>>> +Option#6: background_gc=on : blkzone
>>>> +0
>>>> +Option#8: background_gc=off : blkzone
>>>> +32
>>>> +Option#10: background_gc=sync : blkzone
>>>> +0
>>>> +Option#12: disable_roll_forward : 
>>>> +0
>>>> +Option#14: norecovery : 
>>>> +32
>>>> +Option#16: discard : 
>>>> +0
>>>> +Option#18: nodiscard : 
>>>> +0
>>>> +Option#20: no_heap : 
>>>> +0
>>>> +Option#22: heap : 
>>>> +0
>>>> +Option#24: user_xattr : 
>>>> +0
>>>> +Option#26: nouser_xattr : 
>>>> +0
>>>> +Option#28: acl : 
>>>> +0
>>>> +Option#30: noacl : 
>>>> +0
>>>> +Option#32: active_logs=2 : 
>>>> +0
>>>> +Option#34: active_logs=4 : 
>>>> +0
>>>> +Option#36: active_logs=6 : 
>>>> +0
>>>> +Option#38: disable_ext_identify : 
>>>> +0
>>>> +Option#40: inline_xattr : 
>>>> +0
>>>> +Option#42: noinline_xattr : 
>>>> +0
>>>> +Option#44: inline_xattr_size=400 : extra,flexible_inline_xattr
>>>> +32
>>>> +Option#46: inline_xattr_size=400 : 
>>>> +32
>>>> +Option#48: inline_data : 
>>>> +0
>>>> +Option#50: noinline_dentry : 
>>>> +0
>>>> +Option#52: inline_dentry : 
>>>> +0
>>>> +Option#54: noinline_dentry : 
>>>> +0
>>>> +Option#56: flush_merge : 
>>>> +0
>>>> +Option#58: noflush_merge : 
>>>> +0
>>>> +Option#60: barrier : 
>>>> +0
>>>> +Option#62: nobarrier : 
>>>> +0
>>>> +Option#64: fastboot : 
>>>> +0
>>>> +Option#66: extent_cache : 
>>>> +0
>>>> +Option#68: noextent_cache : 
>>>> +0
>>>> +Option#70: data_flush : 
>>>> +0
>>>> +Option#72: reserve_root=32768 : 
>>>> +0
>>>> +Option#74: resuid=1000 : 
>>>> +0
>>>> +Option#76: resgid=1000 : 
>>>> +0
>>>> +Option#78: fault_injection=100 : 
>>>> +0
>>>> +Option#80: fault_type=4095 : 
>>>> +0
>>>> +Option#82: mode=adaptive : 
>>>> +0
>>>> +Option#84: mode=lfs : 
>>>> +0
>>>> +Option#86: mode=fragment:segment : 
>>>> +0
>>>> +Option#88: mode=fragment:block : 
>>>> +0
>>>> +Option#90: mode=adaptive : blkzone
>>>> +32
>>>> +Option#92: mode=lfs : blkzone
>>>> +0
>>>> +Option#94: mode=fragment:segment : blkzone
>>>> +32
>>>> +Option#96: mode=fragment:block : blkzone
>>>> +32
>>>> +Option#98: usrquota : 
>>>> +0
>>>> +Option#100: grpquota : 
>>>> +0
>>>> +Option#102: prjquota : 
>>>> +32
>>>> +Option#104: usrjquota=ausrquota : 
>>>> +32
>>>> +Option#106: grpjquota=agrpquota : 
>>>> +32
>>>> +Option#108: prjjquota=aprjquota : 
>>>> +32
>>>> +Option#110: jqfmt=vfsold : 
>>>> +0
>>>> +Option#112: jqfmt=vfsv0 : 
>>>> +0
>>>> +Option#114: jqfmt=vfsv1 : 
>>>> +0
>>>> +Option#116: usrjquota= : 
>>>> +0
>>>> +Option#118: grpjquota= : 
>>>> +0
>>>> +Option#120: prjjquota= : 
>>>> +0
>>>> +Option#122: quota : 
>>>> +0
>>>> +Option#124: noquota : 
>>>> +0
>>>> +Option#126: alloc_mode=reuse : 
>>>> +0
>>>> +Option#128: alloc_mode=default : 
>>>> +0
>>>> +Option#130: fsync_mode=posix : 
>>>> +0
>>>> +Option#132: fsync_mode=strict : 
>>>> +0
>>>> +Option#134: fsync_mode=nobarrier : 
>>>> +0
>>>> +Option#136: test_dummy_encryption : 
>>>> +32
>>>> +Option#138: test_dummy_encryption=v1 : 
>>>> +32
>>>> +Option#140: test_dummy_encryption=v2 : 
>>>> +32
>>>> +Option#142: checkpoint=enable : 
>>>> +0
>>>> +Option#144: checkpoint=disable : 
>>>> +0
>>>> +Option#146: checkpoint=disable:32768 : 
>>>> +0
>>>> +Option#148: checkpoint=disable:50% : 
>>>> +0
>>>> +Option#150: checkpoint_merge : 
>>>> +0
>>>> +Option#152: nocheckpoint_merge : 
>>>> +0
>>>> +Option#154: compress_algorithm=lzo : 
>>>> +0
>>>> +Option#156: compress_algorithm=lzo : extra,compression
>>>> +0
>>>> +Option#158: compress_algorithm=lz4 : extra,compression
>>>> +0
>>>> +Option#160: compress_algorithm=zstd : extra,compression
>>>> +0
>>>> +Option#162: compress_algorithm=lzo-rle : extra,compression
>>>> +0
>>>> +Option#164: compress_algorithm=lz4:3 : extra,compression
>>>> +0
>>>> +Option#166: compress_algorithm=zstd:1 : extra,compression
>>>> +0
>>>> +Option#168: compress_log_size=8 : extra,compression
>>>> +0
>>>> +Option#170: compress_extension=so : extra,compression
>>>> +0
>>>> +Option#172: nocompress_extension=so : extra,compression
>>>> +0
>>>> +Option#174: nocompress_extension=* : extra,compression
>>>> +0
>>>> +Option#176: compress_extension=so,nocompress_extension=so : 
>>>> extra,compression
>>>> +0
>>>> +Option#178: compress_chksum : extra,compression
>>>> +0
>>>> +Option#180: compress_mode=fs : extra,compression
>>>> +0
>>>> +Option#182: compress_mode=user : extra,compression
>>>> +0
>>>> +Option#184: compress_cache : extra,compression
>>>> +0
>>>> +Option#186: inlinecrypt : 
>>>> +0
>>>> +Option#188: atgc : 
>>>> +0
>>>> +Option#190: discard_unit=block : 
>>>> +0
>>>> +Option#192: discard_unit=segment : 
>>>> +0
>>>> +Option#194: discard_unit=section : 
>>>> +0
>>>> +Option#196: discard_unit=block : blkzone
>>>> +0
>>>> +Option#198: discard_unit=segment : blkzone
>>>> +0
>>>> +Option#200: discard_unit=section : blkzone
>>>> +0
>>>> +Option#202: memory=normal : 
>>>> +0
>>>> +Option#204: memory=low : 
>>>> +0
>>>> +Option#206: age_extent_cache : 
>>>> +0
>>>> +Option#208: errors=panic : 
>>>> +0
>>>> +Option#210: errors=continue : 
>>>> +0
>>>> +Option#212: errors=remount-ro : 
>>>> +0
>>>> +Option#214: nat_bits : 
>>>> +0
>>>> +Option#216: atgc,mode=lfs : 
>>>> +32
>>>> +Option#218: ro,flush_merge : 
>>>> +32
>>>> +Option#220: rw : ro
>>>> +0
>>>> +Option#222: norecovery,ro : 
>>>> +0
>>>> -- 
>>>> 2.49.0
>>>>
>>>
>>
> 



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to