@@ -1580,19 +1580,29 @@ _fail()
# tests whether $FSTYP is one of the supported filesystems for a test
#
-_supported_fs()
+_check_supported_fs()
{
- local f
+ local res=1
+ local f
- for f
- do
- if [ "$f" = "$FSTYP" -o "$f" = "generic" ]
- then
- return
- fi
- done
+ for f; do
+ # ^FS means black listed fs
+ if [ "$f" = "^$FSTYP" ]; then
+ return 1
+ elif [ "$f" = "generic" ] || [[ "$f" == "^"* ]]; then
+ # ^FS implies "generic ^FS"
+ res=0
+ elif [ "$f" = "$FSTYP" ]; then
+ return 0
+ fi
+ done
+ return $res
+}
- _notrun "not suitable for this filesystem type: $FSTYP"
+_supported_fs()
+{
+ _check_supported_fs $* || \
+ _notrun "not suitable for this filesystem type: $FSTYP"
}
# check if a FS on a device is mounted
@@ -35,7 +35,6 @@ _cleanup()
. ./common/dmthin
# real QA test starts here
-_supported_fs generic
_require_scratch_nocheck
_require_dm_target thin-pool
@@ -43,7 +42,7 @@ _require_dm_target thin-pool
# and since we've filled the thinp device it'll return EIO, which will make
# btrfs flip read only, making it fail this test when it just won't work right
# for us in the first place.
-test $FSTYP == "btrfs" && _notrun "btrfs doesn't work that way lol"
+_supported_fs ^btrfs
# Require underlying device support discard
_scratch_mkfs >>$seqres.full 2>&1
@@ -36,10 +36,9 @@ _cleanup()
. ./common/attr
# real QA test starts here
-_supported_fs generic
_require_scratch
_require_attrs trusted
-test "$FSTYP" = "overlay" && _notrun "Test does not apply to overlayfs."
+_supported_fs ^overlay
_require_extra_fs overlay
_scratch_mkfs >> $seqres.full
@@ -17,7 +17,6 @@ _begin_fstest auto quick prealloc
# real QA test starts here
-_supported_fs generic
_require_scratch
_require_xfs_io_command "falloc"
_require_xfs_io_command "fiemap"
@@ -26,7 +25,7 @@ _require_xfs_io_command "fiemap"
#
# https://lore.kernel.org/linux-btrfs/20220315164011.GF8241@magnolia/
#
-[ $FSTYP == "xfs" ] && _notrun "test not valid for xfs"
+_supported_fs ^xfs
rm -f $seqres.full
For example: _supported_fs ^xfs There is no need to specify "generic" when using a block list "all other fs are supported" is implied. Converted some generic tests that open code this condition without emitting a meaningful reason. More generic test like generic/186,187 could use a block list, but were not converted because they emit some meaningful reason: _notrun "Can't fragment free space on btrfs." Signed-off-by: Amir Goldstein <amir73il@gmail.com> --- common/rc | 30 ++++++++++++++++++++---------- tests/generic/500 | 3 +-- tests/generic/631 | 3 +-- tests/generic/679 | 3 +-- 4 files changed, 23 insertions(+), 16 deletions(-)