generic/402: skip test if xfs_io can't parse the date value

If xfs_io's utimes command cannot interpret the arguments that are
given to it, it will print out "Bad value for [am]time".  Detect
when this happens and drop the file out of the test entirely.

This is particularly noticeable on 32-bit platforms and the largest
timestamp seconds supported by the filesystem is INT_MAX.  In this
case, the maximum value we can cram into tv_sec is INT_MAX, and
there is no way to actually test setting a timestamp of INT_MAX + 1
to test the clamping.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Zorro Lang <zlang@redhat.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
Darrick J. Wong
2020-03-03 18:46:34 -08:00
committed by Eryu Guan
parent a0b98ada02
commit 640c75ef96
+18 -2
View File
@@ -63,10 +63,26 @@ run_test_individual()
# check if the time needs update
if [ $update_time -eq 1 ]; then
echo "Updating file: $file to timestamp $timestamp" >> $seqres.full
$XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file
if [ $? -ne 0 ]; then
rm -f $tmp.utimes
$XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file > $tmp.utimes 2>&1
local res=$?
cat $tmp.utimes >> $seqres.full
if [ "$timestamp" -ne 0 ] && grep -q "Bad value" "$tmp.utimes"; then
echo "xfs_io could not interpret time value \"$timestamp\", skipping \"$file\" test." >> $seqres.full
rm -f $file $tmp.utimes
return
fi
cat $tmp.utimes
rm -f $tmp.utimes
if [ $res -ne 0 ]; then
echo "Failed to update times on $file" | tee -a $seqres.full
fi
else
if [ ! -f "$file" ]; then
echo "xfs_io did not create file for time value \"$timestamp\", skipping test." >> $seqres.full
return
fi
fi
tsclamp=$((timestamp<tsmin?tsmin:timestamp>tsmax?tsmax:timestamp))