generic/402: Make timestamp range check conditional
authorDeepa Dinamani <deepa.kernel@gmail.com>
Sun, 19 Jan 2020 00:57:44 +0000 (16:57 -0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 2 Feb 2020 13:17:29 +0000 (21:17 +0800)
Addition of fs-specific timestamp range checking was added
in 188d20bcd1eb ("vfs: Add file timestamp range support").

Add a check for whether the kernel supports the limits check
before running the associated test.

Based on an off-list discussion, we use a simpler interim approach
until fsinfo syscall would provide fs timestamp limits info.
This isn't perfect, but works for filesystems expiring in 2038.

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

index cf6bc9d5d3f0b1a16faa036abfb8bc763e2aba95..b4a77a2187f4f87796e388428e6d3971e33faff0 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -1990,6 +1990,13 @@ _require_timestamp_range()
        if [ $tsmin -eq -1 -a $tsmax -eq -1 ]; then
                _notrun "filesystem $FSTYP timestamp bounds are unknown"
        fi
+
+       # expect console warning from rw scratch mount if fs limit is near
+       if [ $tsmax -le $((1<<31)) ] && \
+               ! _check_dmesg_for "filesystem being mounted at .* supports timestamps until"
+       then
+               _notrun "Kernel does not support timestamp limits"
+       fi
 }
 
 _filesystem_timestamp_range()
index 0392c2581ebda6c05058ee9ce869249730608df6..2a34d127f44828e1e43fdcc63fb4fec801fe32ef 100755 (executable)
@@ -16,7 +16,13 @@ echo "QA output created by $seq"
 here=`pwd`
 tmp=/tmp/$$
 status=1       # failure is the default!
-trap "exit \$status" 0 1 2 3 15
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+       cd /
+       rm -f $tmp.*
+}
 
 # Get standard environment, filters and checks.
 . ./common/rc
@@ -30,6 +36,7 @@ rm -f $seqres.full
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_check_dmesg
 _require_xfs_io_command utimes
 
 # Compare file timestamps obtained from stat
@@ -80,6 +87,8 @@ run_test()
 }
 
 _scratch_mkfs &>> $seqres.full 2>&1 || _fail "mkfs failed"
+_scratch_mount || _fail "scratch mount failed"
+
 _require_timestamp_range $SCRATCH_DEV
 
 read tsmin tsmax <<<$(_filesystem_timestamp_range $SCRATCH_DEV)
@@ -96,8 +105,6 @@ declare -a TIMESTAMPS=(
        $((tsmax+1))
 )
 
-_scratch_mount || _fail "scratch mount failed"
-
 status=0
 
 # Begin test case 1