]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
xfs: support realtime/log device setup changes in config sections
authorDave Chinner <dchinner@redhat.com>
Tue, 2 Feb 2016 04:54:43 +0000 (15:54 +1100)
committerDave Chinner <david@fromorbit.com>
Tue, 2 Feb 2016 04:54:43 +0000 (15:54 +1100)
Currently changing the devices used by "USE_EXTERNAL" environmental
variable is not supported by the config section parsing. Add the
functionality so that we can use config sections to test external
device configs successfully.

This required tracking down a bug in _check_xfs_filesystem() which
was causing a log device to be passed to a test device without an
external log device. This was caused by an uninitialised variable in
the function. I also added full output file removals to the first
couple of generic tests that were failing, because that's where the
check failure output ends up in this case.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
common/config
common/dmflakey
common/rc
tests/generic/002
tests/generic/004

index cb34fd79a1213c4eaa8da84a43befbd93d67ac3b..7a098ae1a5d3192e756f5fae0415da92b1c228e5 100644 (file)
@@ -416,6 +416,30 @@ if [ -f "$HOST_OPTIONS" ]; then
        fi
 fi
 
+_check_device()
+{
+       local name=$1
+       local dev_needed=$2
+       local dev=$3
+
+       if [ -z "$dev" ]; then
+               if [ "$dev_needed" == "required" ]; then
+                       _fatal "common/config: $name is required but not defined!"
+               fi
+               return
+       fi
+
+       echo $dev | grep -qE ":|//" > /dev/null 2>&1
+       network_dev=$?
+       if [ "$FSTYP" == "overlay" ]; then
+               if [ ! -d "$dev" ]; then
+                       _fatal "common/config: $name ($dev) is not a directory for overlay"
+               fi
+       elif [ ! -b "$dev" -a "$network_dev" != "0" ]; then
+               _fatal "common/config: $name ($dev) is not a block device or a network filesystem"
+       fi
+}
+
 # Parse config section options. This function will parse all the configuration
 # within a single section which name is passed as an argument. For section
 # name format see comments in get_config_sections().
@@ -449,10 +473,13 @@ get_next_config() {
        local OLD_TEST_FS_MOUNT_OPTS=$TEST_FS_MOUNT_OPTS
        local OLD_MKFS_OPTIONS=$MKFS_OPTIONS
        local OLD_FSCK_OPTIONS=$FSCK_OPTIONS
+       local OLD_USE_EXTERNAL=$USE_EXTERNAL
 
        unset MOUNT_OPTIONS
        unset MKFS_OPTIONS
        unset FSCK_OPTIONS
+       unset USE_EXTERNAL
+
        # We might have deduced SCRATCH_DEV from the SCRATCH_DEV_POOL in the previous
        # run, so we have to unset it now.
        if [ "$SCRATCH_DEV_NOT_SET" == "true" ]; then
@@ -466,11 +493,20 @@ get_next_config() {
                [ -z "$TEST_FS_MOUNT_OPTS" ] && _test_mount_opts
                [ -z "$MKFS_OPTIONS" ] && _mkfs_opts
                [ -z "$FSCK_OPTIONS" ] && _fsck_opts
+
+               # clear the external devices if we are not using them
+               if [ -z "$USE_EXTERNAL" ]; then
+                       unset TEST_RTDEV
+                       unset TEST_LOGDEV
+                       unset SCRATCH_RTDEV
+                       unset SCRATCH_LOGDEV
+               fi
        else
                [ -z "$MOUNT_OPTIONS" ] && export MOUNT_OPTIONS=$OLD_MOUNT_OPTIONS
                [ -z "$TEST_FS_MOUNT_OPTS" ] && export TEST_FS_MOUNT_OPTS=$OLD_TEST_FS_MOUNT_OPTS
                [ -z "$MKFS_OPTIONS" ] && export MKFS_OPTIONS=$OLD_MKFS_OPTIONS
                [ -z "$FSCK_OPTIONS" ] && export FSCK_OPTIONS=$OLD_FSCK_OPTIONS
+               [ -z "$USE_EXTERNAL" ] && export USE_EXTERNAL=$OLD_USE_EXTERNAL
        fi
 
        # set default RESULT_BASE
@@ -491,15 +527,7 @@ get_next_config() {
                exit 1
        fi
 
-       echo $TEST_DEV | grep -qE ":|//" > /dev/null 2>&1
-       if [ ! -b "$TEST_DEV" -a "$?" != "0" -a "$FSTYP" != "overlay" ]; then
-               echo "common/config: Error: \$TEST_DEV ($TEST_DEV) is not a block device or a network filesystem"
-               exit 1
-       elif [ "$FSTYP" == "overlay" -a ! -d "$TEST_DEV" ]; then
-               echo "common/config: Error: \$TEST_DEV ($TEST_DEV) is not a directory for overlay"
-               exit 1
-       fi
-
+       _check_device TEST_DEV required $TEST_DEV
        if [ ! -d "$TEST_DIR" ]; then
                echo "common/config: Error: \$TEST_DIR ($TEST_DIR) is not a directory"
                exit 1
@@ -517,19 +545,18 @@ get_next_config() {
                export SCRATCH_DEV_NOT_SET=true
        fi
 
-       echo $SCRATCH_DEV | grep -qE ":|//" > /dev/null 2>&1
-       if [ ! -z "$SCRATCH_DEV" -a ! -b "$SCRATCH_DEV" -a "$?" != "0" -a "$FSTYP" != "overlay" ]; then
-               echo "common/config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) is not a block device or a network filesystem"
-               exit 1
-       elif [ ! -z "$SCRATCH_DEV" -a "$FSTYP" == "overlay" -a ! -d "$SCRATCH_DEV" ]; then
-               echo "common/config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) is not a directory for overlay"
-               exit 1
-       fi
-
+       _check_device SCRATCH_DEV optional $SCRATCH_DEV
        if [ ! -z "$SCRATCH_MNT" -a ! -d "$SCRATCH_MNT" ]; then
                echo "common/config: Error: \$SCRATCH_MNT ($SCRATCH_MNT) is not a directory"
                exit 1
        fi
+
+       if [ -n "$USE_EXTERNAL" ]; then
+               _check_device TEST_RTDEV optional $TEST_RTDEV
+               _check_device TEST_LOGDEV optional $TEST_LOGDEV
+               _check_device SCRATCH_RTDEV optional $SCRATCH_RTDEV
+               _check_device SCRATCH_LOGDEV optional $SCRATCH_LOGDEV
+       fi
 }
 
 if [ -z "$CONFIG_INCLUDED" ]; then
index 5a45d1400baf2bfb183026863852d04a1d2284fa..3b6521a017d233f437d6f0df3e5beb1fd295d2f7 100644 (file)
@@ -39,7 +39,8 @@ _init_flakey()
 
 _mount_flakey()
 {
-       mount -t $FSTYP $MOUNT_OPTIONS $FLAKEY_DEV $SCRATCH_MNT
+       _scratch_options mount
+       mount -t $FSTYP $SCRATCH_OPTIONS $MOUNT_OPTIONS $FLAKEY_DEV $SCRATCH_MNT
 }
 
 _unmount_flakey()
index 513526036f5abdf89416b5b2e7155cb382edec01..716c2154139ae63bf6de1d78dcce0dce09c83f6d 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -2017,6 +2017,7 @@ _check_xfs_filesystem()
     fi
 
     extra_mount_options=""
+    extra_log_options=""
     extra_options=""
     device=$1
     if [ -f $device ];then
index f63b208f79da3f33a3da48a84f517b4282758646..0433882dc2864c42650f41e44489ab6a4f8a8c0d 100755 (executable)
@@ -45,6 +45,8 @@ _supported_fs generic
 _supported_os IRIX Linux
 _require_test
 
+rm -f $seqres.full
+
 echo "Silence is goodness ..."
 
 # ensure target directory exists
index c7aa473599744d80d26996d29163ed5601523dcb..d0926f117c4b148f099e470dc1b1af39d2791470 100755 (executable)
@@ -47,6 +47,8 @@ _supported_os Linux
 _require_test
 _require_xfs_io_command "flink"
 
+rm -f $seqres.full
+
 testfile="${TEST_DIR}/tst-tmpfile-flink"
 
 # test creating a r/w tmpfile, do I/O and link it into the namespace