generic/402: fix for updated behavior of timestamp limits

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>
This commit is contained in:
Deepa Dinamani
2019-07-18 21:12:31 -07:00
committed by Eryu Guan
parent e036a11f81
commit 03d3f75cb4
3 changed files with 33 additions and 71 deletions
+19 -17
View File
@@ -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"
+13 -53
View File
@@ -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
+1 -1
View File
@@ -1,2 +1,2 @@
QA output created by 402
y2038 inode timestamp tests completed successfully
Silence is golden