mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
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:
committed by
Eryu Guan
parent
e036a11f81
commit
03d3f75cb4
@@ -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
@@ -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,2 +1,2 @@
|
||||
QA output created by 402
|
||||
y2038 inode timestamp tests completed successfully
|
||||
Silence is golden
|
||||
|
||||
Reference in New Issue
Block a user