From: Zhao Lei <[email protected]>

_is_block_dev() will show above warning when "$dev" is not exist.
It happened when the program check $TEST_DEV with blank $SCRATCH_DEV
which is optional.

Changelog v2->v3:
 Separate __same_block_dev() from _is_block_dev() to make code
 self documenting.
 Suggested by: Dave Chinner <[email protected]>

Changelog v1->v2:
 Rewrite _is_block_dev() to make caller code simple.
 Suggested by: Dave Chinner <[email protected]>

Signed-off-by: Zhao Lei <[email protected]>
---
 common/rc | 101 +++++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 61 insertions(+), 40 deletions(-)

diff --git a/common/rc b/common/rc
index 5a8c74d..f528c25 100644
--- a/common/rc
+++ b/common/rc
@@ -945,24 +945,51 @@ _fs_options()
     ' </proc/mounts
 }
 
-# returns device number if a file is a block device
+# Returns:
+# 0: if filename is a block device
+# 1: if filename is not a block device
+# -1 if argument wrong
 #
 _is_block_dev()
 {
-    if [ $# -ne 1 ]
-    then
-       echo "Usage: _is_block_dev dev" 1>&2
-       exit 1
-    fi
+       if [ $# -ne 1 ]; then
+               return -1
+       fi
+       if [ -b "$1" ]; then
+               return 0
+       fi
+       return 1;
+}
 
-    _dev=$1
-    if [ -L "${_dev}" ]; then
-        _dev=`readlink -f ${_dev}`
-    fi
+# Returns:
+# 0: if the devices are same
+# 1: if the devices are not same
+#
+__same_block_dev()
+{
+       if [ $# -ne 2 ]; then
+               return 1
+       fi
 
-    if [ -b "${_dev}" ]; then
-        src/lstat64 ${_dev} | $AWK_PROG '/Device type:/ { print $9 }'
-    fi
+       _dev1="$1"
+       _dev2="$2"
+
+       if [ ! -b "$_dev1" -o ! -b "$_dev2" ]; then
+               return 1
+       fi
+
+       if [ -L "${_dev1}" ]; then
+               _dev1=`readlink -f "$_dev1"`
+       fi
+       if [ -L "${_dev2}" ]; then
+               _dev2=`readlink -f "$_dev2"`
+       fi
+
+       if [ `stat -c %t,%T "$_dev1"` != `stat -c %t,%T "$_dev2"` ]; then
+               return 1
+       fi
+
+       return 0;
 }
 
 # Do a command, log it to $seqres.full, optionally test return status
@@ -1095,19 +1122,16 @@ _require_scratch_nocheck()
                fi
                ;;
        *)
-                if [ -z "$SCRATCH_DEV" -o "`_is_block_dev $SCRATCH_DEV`" = "" ]
-                then
-                    _notrun "this test requires a valid \$SCRATCH_DEV"
-                fi
-                if [ "`_is_block_dev $SCRATCH_DEV`" = "`_is_block_dev 
$TEST_DEV`" ]
-                then
-                    _notrun "this test requires a valid \$SCRATCH_DEV"
-                fi
-               if [ ! -d "$SCRATCH_MNT" ]
-               then
-                    _notrun "this test requires a valid \$SCRATCH_MNT"
+               if ! _is_block_dev "$SCRATCH_DEV"; then
+                       _notrun "this test requires a valid \$SCRATCH_DEV"
+               fi
+               if __same_block_dev "$SCRATCH_DEV" "$TEST_DEV"; then
+                       _notrun "\$SCRATCH_DEV and \$TEST_DEV are same device"
+               fi
+               if [ ! -d "$SCRATCH_MNT" ]; then
+                       _notrun "this test requires a valid \$SCRATCH_MNT"
                fi
-                ;;
+               ;;
     esac
 
     # mounted?
@@ -1167,19 +1191,16 @@ _require_test()
                fi
                ;;
        *)
-                if [ -z "$TEST_DEV" -o "`_is_block_dev $TEST_DEV`" = "" ]
-                then
-                    _notrun "this test requires a valid \$TEST_DEV"
-                fi
-                if [ "`_is_block_dev $SCRATCH_DEV`" = "`_is_block_dev 
$TEST_DEV`" ]
-                then
-                    _notrun "this test requires a valid \$TEST_DEV"
-                fi
-               if [ ! -d "$TEST_DIR" ]
-               then
-                    _notrun "this test requires a valid \$TEST_DIR"
+               if ! _is_block_dev "$TEST_DEV"; then
+                       _notrun "this test requires a valid \$TEST_DEV"
+               fi
+               if __same_block_dev "$TEST_DEV" "$SCRATCH_DEV"; then
+                       _notrun "\$TEST_DEV and \$SCRATCH_DEV are same device"
                fi
-                ;;
+               if [ ! -d "$TEST_DIR" ]; then
+                       _notrun "this test requires a valid \$TEST_DIR"
+               fi
+               ;;
     esac
 
     # mounted?
@@ -1288,7 +1309,7 @@ _require_block_device()
                echo "Usage: _require_block_device <dev>" 1>&2
                exit 1
        fi
-       if [ "`_is_block_dev $1`" == "" ]; then
+       if ! _is_block_dev "$1"; then
                _notrun "require $1 to be valid block disk"
        fi
 }
@@ -2236,10 +2257,10 @@ _require_scratch_dev_pool()
        esac
 
        for i in $SCRATCH_DEV_POOL; do
-               if [ "`_is_block_dev $i`" = "" ]; then
+               if ! _is_block_dev "$i"; then
                        _notrun "this test requires valid block disk $i"
                fi
-               if [ "`_is_block_dev $i`" = "`_is_block_dev $TEST_DEV`" ]; then
+               if __same_block_dev "$i" "$TEST_DEV"; then
                        _notrun "$i is part of TEST_DEV, this test requires 
unique disks"
                fi
                if _mount | grep -q $i; then
-- 
1.8.5.1

--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to