common: UDF does not support journalling
[xfstests-dev.git] / common / rc
index 539f153ddc17ff2d5c7c4151fb8eba02e20c5b49..d3ce3acc3308b5a80cc4e0510436e1da90899ffa 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -162,6 +162,7 @@ case "$FSTYP" in
         [ "$MKFS_F2FS_PROG" = "" ] && _fatal "mkfs.f2fs not found"
         ;;
     nfs)
+        . ./common/nfs
         ;;
     cifs)
         ;;
@@ -176,6 +177,9 @@ case "$FSTYP" in
         ;;
     pvfs2)
        ;;
+    ubifs)
+       [ "$UBIUPDATEVOL_PROG" = "" ] && _fatal "ubiupdatevol not found"
+       ;;
 esac
 
 if [ ! -z "$REPORT_LIST" ]; then
@@ -812,6 +816,11 @@ _scratch_mkfs()
                # do nothing for tmpfs
                return 0
                ;;
+       ubifs)
+               # erase the UBI volume; reformated automatically on next mount
+               $UBIUPDATEVOL_PROG ${SCRATCH_DEV} -t
+               return 0
+               ;;
        ext4)
                _scratch_mkfs_ext4 $*
                return $?
@@ -1363,6 +1372,25 @@ _is_block_dev()
     fi
 }
 
+# returns device number if a file is a character device
+#
+_is_char_dev()
+{
+       if [ $# -ne 1 ]; then
+               echo "Usage: _is_char_dev dev" 1>&2
+               exit 1
+       fi
+
+       _dev=$1
+       if [ -L "${_dev}" ]; then
+               _dev=`readlink -f "${_dev}"`
+       fi
+
+       if [ -c "${_dev}" ]; then
+               src/lstat64 "${_dev}" | $AWK_PROG '/Device type:/ { print $9 }'
+       fi
+}
+
 # Do a command, log it to $seqres.full, optionally test return status
 # and die if command fails. If called with one argument _do executes the
 # command, logs it, and returns its exit status. With two arguments _do
@@ -1556,6 +1584,15 @@ _require_scratch_nocheck()
                    _notrun "this test requires a valid \$SCRATCH_MNT and unique $SCRATCH_DEV"
                fi
                ;;
+       ubifs)
+               # ubifs needs an UBI volume. This will be a char device, not a block device.
+               if [ ! -c "$SCRATCH_DEV" ]; then
+                       _notrun "this test requires a valid UBI volume for \$SCRATCH_DEV"
+               fi
+               if [ ! -d "$SCRATCH_MNT" ]; then
+                       _notrun "this test requires a valid \$SCRATCH_MNT"
+               fi
+               ;;
        *)
                 if [ -z "$SCRATCH_DEV" -o "`_is_block_dev "$SCRATCH_DEV"`" = "" ]
                 then
@@ -1650,6 +1687,15 @@ _require_test()
                    _notrun "this test requires a valid \$TEST_DIR and unique $TEST_DEV"
                fi
                ;;
+       ubifs)
+               # ubifs needs an UBI volume. This will be a char device, not a block device.
+               if [ ! -c "$TEST_DEV" ]; then
+                       _notrun "this test requires a valid UBI volume for \$TEST_DEV"
+               fi
+               if [ ! -d "$TEST_DIR" ]; then
+                       _notrun "this test requires a valid \$TEST_DIR"
+               fi
+               ;;
        *)
                 if [ -z "$TEST_DEV" ] || [ "`_is_block_dev "$TEST_DEV"`" = "" ]
                 then
@@ -1791,6 +1837,23 @@ _require_block_device()
        fi
 }
 
+# this test requires a path to refere to a local block or character device
+# $1 - device
+_require_local_device()
+{
+       if [ -z "$1" ]; then
+               echo "Usage: _require_local_device <dev>" 1>&2
+               exit 1
+       fi
+       if [ "`_is_block_dev "$1"`" != "" ]; then
+               return 0
+       fi
+       if [ "`_is_char_dev "$1"`" != "" ]; then
+               return 0
+       fi
+       _notrun "require $1 to be local device"
+}
+
 # brd based ram disks erase the device when they receive a flush command when no
 # active references are present. This causes problems for DM devices sitting on
 # top of brd devices as DM doesn't hold active references to the brd device.
@@ -1868,7 +1931,24 @@ _require_nonexternal()
        _notrun "External device testing in progress, skipped this test"
 }
 
+# this test requires that the kernel supports asynchronous I/O
+_require_aio()
+{
+       $here/src/feature -A
+       case $? in
+       0)
+               ;;
+       1)
+               _notrun "kernel does not support asynchronous I/O"
+               ;;
+       *)
+               _fail "unexpected error testing for asynchronous I/O support"
+               ;;
+       esac
+}
+
 # this test requires that a (specified) aio-dio executable exists
+# and that the kernel supports asynchronous I/O.
 # $1 - command (optional)
 #
 _require_aiodio()
@@ -1881,6 +1961,7 @@ _require_aiodio()
         AIO_TEST=src/aio-dio-regress/$1
         [ -x $AIO_TEST ] || _notrun "$AIO_TEST not built"
     fi
+    _require_aio
     _require_odirect
 }
 
@@ -2008,7 +2089,7 @@ _require_group()
         qa_group=$1
     fi
     _cat_group | grep -q $qa_group
-    [ "$?" == "0" ] || _notrun "$qa_group user not defined."
+    [ "$?" == "0" ] || _notrun "$qa_group group not defined."
 }
 
 _filter_user_do()
@@ -2038,9 +2119,10 @@ _require_xfs_io_command()
                echo "Usage: _require_xfs_io_command command [switch]" 1>&2
                exit 1
        fi
-       command=$1
+       local command=$1
        shift
-       param="$*"
+       local param="$*"
+       local param_checked=0
 
        testfile=$TEST_DIR/$$.xfs_io
        case $command in
@@ -2055,6 +2137,7 @@ _require_xfs_io_command()
                ;;
        "falloc" )
                testio=`$XFS_IO_PROG -F -f -c "falloc $param 0 1m" $testfile 2>&1`
+               param_checked=1
                ;;
        "fpunch" | "fcollapse" | "zero" | "fzero" | "finsert" | "funshare")
                testio=`$XFS_IO_PROG -F -f -c "pwrite 0 20k" -c "fsync" \
@@ -2063,6 +2146,7 @@ _require_xfs_io_command()
        "fiemap")
                testio=`$XFS_IO_PROG -F -f -c "pwrite 0 20k" -c "fsync" \
                        -c "fiemap -v $param" $testfile 2>&1`
+               param_checked=1
                ;;
        "flink" )
                testio=`$XFS_IO_PROG -T -F -c "flink $testfile" \
@@ -2087,7 +2171,7 @@ _require_xfs_io_command()
                testio=`$XFS_IO_PROG -f -c "utimes" 0 0 0 0 $testfile 2>&1`
                ;;
        *)
-               testio=`$XFS_IO_PROG -c "$command help" 2>&1`
+               testio=`$XFS_IO_PROG -c "help $command" 2>&1`
        esac
 
        rm -f $testfile 2>&1 > /dev/null
@@ -2100,9 +2184,10 @@ _require_xfs_io_command()
        echo $testio | grep -q "foreign file active" && \
                _notrun "xfs_io $command not supported on $FSTYP"
 
-       test -z "$param" && return
-       $XFS_IO_PROG -c "help $command" | grep -q "^ $param --" || \
-               _notrun "xfs_io $command doesn't support $param"
+       if [ -n "$param" -a $param_checked -eq 0 ]; then
+               $XFS_IO_PROG -c "help $command" | grep -q "^ $param --" || \
+                       _notrun "xfs_io $command doesn't support $param"
+       fi
 }
 
 # check that kernel and filesystem support direct I/O
@@ -2496,6 +2581,9 @@ _check_test_fs()
     tmpfs)
        # no way to check consistency for tmpfs
        ;;
+    ubifs)
+       # there is no fsck program for ubifs yet
+       ;;
     *)
        _check_generic_filesystem $TEST_DEV
        ;;
@@ -2545,6 +2633,9 @@ _check_scratch_fs()
     tmpfs)
        # no way to check consistency for tmpfs
        ;;
+    ubifs)
+       # there is no fsck program for ubifs yet
+       ;;
     *)
        _check_generic_filesystem $device
        ;;
@@ -2923,7 +3014,7 @@ _require_metadata_journaling()
        fi
 
        case "$FSTYP" in
-       ext2|vfat|msdos)
+       ext2|vfat|msdos|udf)
                _notrun "$FSTYP does not support metadata journaling"
                ;;
        ext4)