generic/402: fix for updated behavior of timestamp limits
authorDeepa Dinamani <deepa.kernel@gmail.com>
Fri, 19 Jul 2019 04:12:31 +0000 (21:12 -0700)
committerEryu Guan <guaneryu@gmail.com>
Thu, 24 Oct 2019 23:47:14 +0000 (07:47 +0800)
The mount behavior will not be altered because of the unsupported
timestamps on the filesystems.

Adjust the test accordingly.

You can find the series at
https://git.kernel.org/torvalds/c/cfb82e1df8b7c76991ea12958855897c2fb4debc

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
common/rc
tests/generic/402
tests/generic/402.out

index bbebadd2d82288f03acb99dab106700ac8607fc6..2cb041afb6c594285e8e2698f529d7debf4c5a74 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -1959,16 +1959,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 +1973,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"
index f742feddc85f13af8d620f32b67e28565518af10..0392c2581ebda6c05058ee9ce869249730608df6 100755 (executable)
@@ -4,15 +4,10 @@
 #
 # FS QA Test 402
 #
-# Tests to verify policy for filesystem timestamps for
-# supported ranges:
-# 1. Verify filesystem rw mount according to sysctl
-# timestamp_supported.
-# 2. Verify timestamp clamping for timestamps beyond max
-# timestamp supported.
+# Test to verify filesystem timestamps for supported ranges.
 #
-# Exit status 1: either or both tests above fail.
-# Exit status 0: both the above tests pass.
+# Exit status 1: test failed.
+# Exit status 0: test passed.
 #
 seq=`basename $0`
 seqres=$RESULT_DIR/$seq
@@ -60,15 +55,15 @@ run_test_individual()
 
        # check if the time needs update
        if [ $update_time -eq 1 ]; then
-               echo "Updating file: $file to timestamp `date -d @$timestamp`"  >> $seqres.full
+               echo "Updating file: $file to timestamp $timestamp"  >> $seqres.full
                $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file
                if [ $? -ne 0 ]; then
                        echo "Failed to update times on $file" | tee -a $seqres.full
                fi
        fi
 
-       tsclamp=$(($timestamp>$tsmax?$tsmax:$timestamp))
-       echo "Checking file: $file Updated timestamp is `date -d @$tsclamp`"  >> $seqres.full
+       tsclamp=$((timestamp<tsmin?tsmin:timestamp>tsmax?tsmax:timestamp))
+       echo "Checking file: $file Updated timestamp is $tsclamp"  >> $seqres.full
        check_stat $file $tsclamp
 }
 
@@ -85,11 +80,11 @@ run_test()
 }
 
 _scratch_mkfs &>> $seqres.full 2>&1 || _fail "mkfs failed"
-_require_y2038 $SCRATCH_DEV
+_require_timestamp_range $SCRATCH_DEV
 
 read tsmin tsmax <<<$(_filesystem_timestamp_range $SCRATCH_DEV)
-echo min supported timestamp $tsmin $(date --date=@$tsmin) >> $seqres.full
-echo max supported timestamp $tsmax $(date --date=@$tsmax) >> $seqres.full
+echo min supported timestamp $tsmin >> $seqres.full
+echo max supported timestamp $tsmax >> $seqres.full
 
 # Test timestamps array
 
@@ -97,45 +92,13 @@ declare -a TIMESTAMPS=(
        $tsmin
        0
        $tsmax
+       $((tsmax/2))
        $((tsmax+1))
-       4294967295
-       8589934591
-       34359738367
 )
 
-# Max timestamp is hardcoded to Mon Jan 18 19:14:07 PST 2038
-sys_tsmax=2147483647
-echo "max timestamp that needs to be supported by fs for rw mount is" \
-       "$((sys_tsmax+1)) $(date --date=@$((sys_tsmax+1)))" >> $seqres.full
+_scratch_mount || _fail "scratch mount failed"
 
-read ts_check <<<$(cat /proc/sys/fs/fs-timestamp-check-on)
-
-_scratch_mount
-result=$?
-
-if [ $ts_check -ne 0 ]; then
-       echo "sysctl filesystem timestamp check is on" >> $seqres.full
-       # check for mount failure if the minimum requirement for max timestamp
-       # supported is not met.
-       if [ $sys_tsmax -ge $tsmax ]; then
-               if [ $result -eq 0 ]; then
-                       echo "mount test failed"  | tee -a $seqres.full
-                       exit
-               fi
-       else
-               if [ $result -ne 0 ]; then
-                       echo "failed to mount $SCRATCH_DEV"  | tee -a $seqres.full
-                       exit
-               fi
-       fi
-else
-       # if sysctl switch is off then mount should succeed always.
-       echo "sysctl filesystem timestamp check is off" >> $seqres.full
-       if [ $result -ne 0 ]; then
-               echo "failed to mount $SCRATCH_DEV and timestamp check is off"  >> $seqres.full
-               exit
-       fi
-fi
+status=0
 
 # Begin test case 1
 echo "In memory timestamps update test start" >> $seqres.full
@@ -166,8 +129,5 @@ run_test $update_time
 
 echo "On disk timestamps update test complete" >> $seqres.full
 
-echo "y2038 inode timestamp tests completed successfully"
-
-# success, all done
-status=0
+echo Silence is golden
 exit
index 6c5b9308a4467977fb218dbf31c773633965cfd2..28e1501c1695333e79aab171102536842fcf5db6 100644 (file)
@@ -1,2 +1,2 @@
 QA output created by 402
-y2038 inode timestamp tests completed successfully
+Silence is golden