--- /dev/null
+#! /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/ common mount option and their combination.
+#
+. ./common/preamble
+_begin_fstest auto quick mount
+_require_kernel_config CONFIG_F2FS_FS_XATTR
+_require_kernel_config CONFIG_F2FS_FS_POSIX_ACL
+_require_kernel_config CONFIG_F2FS_FAULT_INJECTION
+
+options=(
+# mount_option mkfs_option
+ "background_gc=on" "" \
+ "background_gc=off" "" \
+ "background_gc=sync" "" \
+ "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" "" \
+ "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" "" \
+ "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" "" \
+ "inlinecrypt" "" \
+ "atgc" "" \
+ "discard_unit=block" "" \
+ "discard_unit=segment" "" \
+ "discard_unit=section" "" \
+ "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))]}" ]; then
+ _scratch_mkfs "-O ${options[$((i+1))]}" >> $seqres.full || _fail "mkfs failed"
+ else
+ _scratch_mkfs >> $seqres.full || _fail "mkfs failed"
+ fi
+ _try_scratch_mount "-o ${options[$i]}" >> $seqres.full 2>&1
+ echo $?
+ _scratch_unmount >> $seqres.full 2>&1
+done
+
+status=0
+exit
--- /dev/null
+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: disable_roll_forward :
+0
+Option#8: norecovery :
+32
+Option#10: discard :
+0
+Option#12: nodiscard :
+0
+Option#14: no_heap :
+0
+Option#16: heap :
+0
+Option#18: user_xattr :
+0
+Option#20: nouser_xattr :
+0
+Option#22: acl :
+0
+Option#24: noacl :
+0
+Option#26: active_logs=2 :
+0
+Option#28: active_logs=4 :
+0
+Option#30: active_logs=6 :
+0
+Option#32: disable_ext_identify :
+0
+Option#34: inline_xattr :
+0
+Option#36: noinline_xattr :
+0
+Option#38: inline_xattr_size=400 :
+0
+Option#40: inline_data :
+0
+Option#42: noinline_dentry :
+0
+Option#44: inline_dentry :
+0
+Option#46: noinline_dentry :
+0
+Option#48: flush_merge :
+0
+Option#50: noflush_merge :
+0
+Option#52: barrier :
+0
+Option#54: nobarrier :
+0
+Option#56: fastboot :
+0
+Option#58: extent_cache :
+0
+Option#60: noextent_cache :
+0
+Option#62: data_flush :
+0
+Option#64: reserve_root=32768 :
+0
+Option#66: resuid=1000 :
+0
+Option#68: resgid=1000 :
+0
+Option#70: fault_injection=100 :
+0
+Option#72: fault_type=4095 :
+0
+Option#74: mode=adaptive :
+0
+Option#76: mode=lfs :
+0
+Option#78: mode=fragment:segment :
+0
+Option#80: mode=fragment:block :
+0
+Option#82: usrquota :
+0
+Option#84: grpquota :
+0
+Option#86: prjquota :
+32
+Option#88: usrjquota=ausrquota :
+32
+Option#90: grpjquota=agrpquota :
+32
+Option#92: prjjquota=aprjquota :
+32
+Option#94: jqfmt=vfsold :
+0
+Option#96: jqfmt=vfsv0 :
+0
+Option#98: jqfmt=vfsv1 :
+0
+Option#100: usrjquota= :
+0
+Option#102: grpjquota= :
+0
+Option#104: prjjquota= :
+0
+Option#106: quota :
+0
+Option#108: noquota :
+0
+Option#110: alloc_mode=reuse :
+0
+Option#112: alloc_mode=default :
+0
+Option#114: fsync_mode=posix :
+0
+Option#116: fsync_mode=strict :
+0
+Option#118: fsync_mode=nobarrier :
+0
+Option#120: test_dummy_encryption :
+0
+Option#122: test_dummy_encryption=v1 :
+0
+Option#124: test_dummy_encryption=v2 :
+0
+Option#126: checkpoint=enable :
+0
+Option#128: checkpoint=disable :
+0
+Option#130: checkpoint=disable:32768 :
+0
+Option#132: checkpoint=disable:50% :
+0
+Option#134: checkpoint_merge :
+0
+Option#136: nocheckpoint_merge :
+0
+Option#138: compress_algorithm=lzo :
+0
+Option#140: inlinecrypt :
+0
+Option#142: atgc :
+0
+Option#144: discard_unit=block :
+0
+Option#146: discard_unit=segment :
+0
+Option#148: discard_unit=section :
+0
+Option#150: memory=normal :
+0
+Option#152: memory=low :
+0
+Option#154: age_extent_cache :
+0
+Option#156: errors=panic :
+0
+Option#158: errors=continue :
+0
+Option#160: errors=remount-ro :
+0
+Option#162: nat_bits :
+0
+Option#164: atgc,mode=lfs :
+32
+Option#166: ro,flush_merge :
+32
+Option#168: rw : ro
+0
+Option#170: norecovery,ro :
+0