common/rc: generalize _get_filesize()
[xfstests-dev.git] / common / rc
index 3d5c8b23214e07358544c60c9435a2a73161d399..ef0c250923e4c38752eddcd679c66f3f8406ded2 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -165,6 +165,11 @@ if [ ! -z "$REPORT_LIST" ]; then
        _assert_report_list
 fi
 
+_get_filesize()
+{
+    stat -c %s "$1"
+}
+
 _mount()
 {
     $MOUNT_PROG `_mount_ops_filter $*`
@@ -313,7 +318,7 @@ _supports_filetype()
                local testfile=$dir/$$.ftype
                touch $testfile
                # look for DT_UNKNOWN files
-               local unknowns=$(src/t_dir_type $dir u | wc -l)
+               local unknowns=$($here/src/t_dir_type $dir u | wc -l)
                rm $testfile
                # 0 unknowns is success
                return $unknowns
@@ -386,10 +391,10 @@ _scratch_shutdown()
                if [ -z $OVL_BASE_SCRATCH_DEV ]; then
                        _fail "_scratch_shutdown: call _require_scratch_shutdown first in test"
                else
-                       src/godown $* $OVL_BASE_SCRATCH_MNT
+                       $here/src/godown $* $OVL_BASE_SCRATCH_MNT
                fi
        else
-               src/godown $* $SCRATCH_MNT
+               $here/src/godown $* $SCRATCH_MNT
        fi
 }
 
@@ -1295,7 +1300,7 @@ _is_block_dev()
     fi
 
     if [ -b "$dev" ]; then
-        src/lstat64 "$dev" | $AWK_PROG '/Device type:/ { print $9 }'
+        $here/src/lstat64 "$dev" | $AWK_PROG '/Device type:/ { print $9 }'
     fi
 }
 
@@ -1314,7 +1319,7 @@ _is_char_dev()
        fi
 
        if [ -c "$dev" ]; then
-               src/lstat64 "$dev" | $AWK_PROG '/Device type:/ { print $9 }'
+               $here/src/lstat64 "$dev" | $AWK_PROG '/Device type:/ { print $9 }'
        fi
 }
 
@@ -1919,10 +1924,10 @@ _require_aiodio()
 {
     if [ -z "$1" ]
     then
-        AIO_TEST=src/aio-dio-regress/aiodio_sparse2
+        AIO_TEST=$here/src/aio-dio-regress/aiodio_sparse2
         [ -x $AIO_TEST ] || _notrun "aio-dio utilities required"
     else
-        AIO_TEST=src/aio-dio-regress/$1
+        AIO_TEST=$here/src/aio-dio-regress/$1
         [ -x $AIO_TEST ] || _notrun "$AIO_TEST not built"
     fi
     _require_aio
@@ -1934,7 +1939,7 @@ _require_aiodio()
 #
 _require_test_program()
 {
-    local prog=src/$1
+    local prog=$here/src/$1
     [ -x $prog ] || _notrun "$prog not built"
 }
 
@@ -1959,16 +1964,9 @@ _run_aiodio()
     return $status
 }
 
-# this test requires y2038 sysfs switch and filesystem
-# timestamp ranges support.
-_require_y2038()
+_require_timestamp_range()
 {
        local device=${1:-$TEST_DEV}
-       local sysfsdir=/proc/sys/fs/fs-timestamp-check-on
-
-       if [ ! -e $sysfsdir ]; then
-               _notrun "no kernel support for y2038 sysfs switch"
-       fi
 
        local tsmin tsmax
        read tsmin tsmax <<<$(_filesystem_timestamp_range $device)
@@ -1980,23 +1978,32 @@ _require_y2038()
 _filesystem_timestamp_range()
 {
        local device=${1:-$TEST_DEV}
+       u32max=$(((1<<32)-1))
+       s32min=-$((1<<31))
+       s32max=$(((1<<31)-1))
+       s64max=$(((1<<63)-1))
+       s64min=$((1<<63))
+
        case $FSTYP in
-       ext4)
+       ext2)
+               echo "$s32min $s32max"
+               ;;
+       ext3|ext4)
                if [ $(dumpe2fs -h $device 2>/dev/null | grep "Inode size:" | cut -d: -f2) -gt 128 ]; then
-                       echo "-2147483648 15032385535"
+                       printf "%d %d\n" $s32min 0x37fffffff
                else
-                       echo "-2147483648 2147483647"
+                       echo "$s32min $s32max"
                fi
                ;;
 
-       xfs)
-               echo "-2147483648 2147483647"
-               ;;
        jfs)
-               echo "0 4294967295"
+               echo "0 $u32max"
                ;;
-       f2fs)
-               echo "-2147483648 2147483647"
+       xfs)
+               echo "$s32min $s32max"
+               ;;
+       btrfs)
+               echo "$s64min $s64max"
                ;;
        *)
                echo "-1 -1"
@@ -2184,7 +2191,7 @@ _require_xfs_io_command()
                        _notrun "xfs_io $command support is missing"
                ;;
        "utimes" )
-               testio=`$XFS_IO_PROG -f -c "utimes" 0 0 0 0 $testfile 2>&1`
+               testio=`$XFS_IO_PROG -f -c "utimes 0 0 0 0" $testfile 2>&1`
                ;;
        "syncfs")
                touch $testfile
@@ -2222,10 +2229,13 @@ _require_xfs_io_command()
 # check that kernel and filesystem support direct I/O
 _require_odirect()
 {
-       if [ $FSTYP = "ext4" ] ; then
+       if [ $FSTYP = "ext4" ] || [ $FSTYP = "f2fs" ] ; then
                if echo "$MOUNT_OPTIONS" | grep -q "test_dummy_encryption"; then
-                       _notrun "ext4 encryption doesn't support O_DIRECT"
-               elif echo "$MOUNT_OPTIONS" | grep -q "data=journal"; then
+                       _notrun "$FSTYP encryption doesn't support O_DIRECT"
+               fi
+       fi
+       if [ $FSTYP = "ext4" ] ; then
+               if echo "$MOUNT_OPTIONS" | grep -q "data=journal"; then
                        _notrun "ext4 data journaling doesn't support O_DIRECT"
                fi
        fi
@@ -2860,7 +2870,7 @@ _link_out_file()
        local features
 
        if [ $# -eq 0 ]; then
-               features="$(_get_os_name)"
+               features="$(_get_os_name),$FSTYP"
                if [ -n "$MOUNT_OPTIONS" ]; then
                        features=$features,${MOUNT_OPTIONS##"-o "}
                fi
@@ -3095,7 +3105,7 @@ _require_exportfs()
 # Does shutdown work on this fs?
 _require_scratch_shutdown()
 {
-       [ -x src/godown ] || _notrun "src/godown executable not found"
+       [ -x $here/src/godown ] || _notrun "src/godown executable not found"
 
        _scratch_mkfs > /dev/null 2>&1 || _notrun "_scratch_mkfs failed on $SCRATCH_DEV"
        _scratch_mount
@@ -3108,11 +3118,11 @@ _require_scratch_shutdown()
                        # running shutdown to avoid shutting down base fs accidently.
                        _notrun "This test requires a valid $OVL_BASE_SCRATCH_DEV as ovl base fs"
                else
-                       src/godown -f $OVL_BASE_SCRATCH_MNT 2>&1 \
+                       $here/src/godown -f $OVL_BASE_SCRATCH_MNT 2>&1 \
                        || _notrun "Underlying filesystem does not support shutdown"
                fi
        else
-               src/godown -f $SCRATCH_MNT 2>&1 \
+               $here/src/godown -f $SCRATCH_MNT 2>&1 \
                        || _notrun "$FSTYP does not support shutdown"
        fi
 
@@ -3347,8 +3357,8 @@ _require_relatime()
 
 _require_userns()
 {
-       [ -x src/nsexec ] || _notrun "src/nsexec executable not found"
-       src/nsexec -U true 2>/dev/null || _notrun "userns not supported by this kernel"
+       [ -x $here/src/nsexec ] || _notrun "src/nsexec executable not found"
+       $here/src/nsexec -U true 2>/dev/null || _notrun "userns not supported by this kernel"
 }
 
 _create_loop_device()
@@ -3426,7 +3436,7 @@ _require_ofd_locks()
        # EINVAL will be returned.
        _require_test_program "t_ofd_locks"
        touch $TEST_DIR/ofd_testfile
-       src/t_ofd_locks -t $TEST_DIR/ofd_testfile > /dev/null 2>&1
+       $here/src/t_ofd_locks -t $TEST_DIR/ofd_testfile > /dev/null 2>&1
        [ $? -eq 22 ] && _notrun "Require OFD locks support"
 }