#! /bin/bash # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (c) 2021 Oracle. All Rights Reserved. # # FS QA Test No. 160 # # Check that we can upgrade a filesystem to support bigtime and that inode # timestamps work properly after the upgrade. seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / rm -f $tmp.* } # get standard environment, filters and checks . ./common/rc . ./common/filter # real QA test starts here _supported_fs xfs _require_command "$XFS_ADMIN_PROG" "xfs_admin" _require_scratch_xfs_bigtime _require_xfs_repair_upgrade bigtime date --date='Jan 1 00:00:00 UTC 2040' > /dev/null 2>&1 || \ _notrun "Userspace does not support dates past 2038." rm -f $seqres.full # Make sure we can't upgrade a V4 filesystem _scratch_mkfs -m crc=0 >> $seqres.full _scratch_xfs_admin -O bigtime=1 2>> $seqres.full _check_scratch_xfs_features BIGTIME # Make sure we're required to specify a feature status _scratch_mkfs -m crc=1,bigtime=0,inobtcount=0 >> $seqres.full _scratch_xfs_admin -O bigtime 2>> $seqres.full # Can we add bigtime and inobtcount at the same time? _scratch_mkfs -m crc=1,bigtime=0,inobtcount=0 >> $seqres.full _scratch_xfs_admin -O bigtime=1,inobtcount=1 2>> $seqres.full # Format V5 filesystem without bigtime support and populate it _scratch_mkfs -m crc=1,bigtime=0 >> $seqres.full _scratch_xfs_db -c 'version' -c 'sb 0' -c 'p' >> $seqres.full _scratch_mount >> $seqres.full touch -d 'Jan 9 19:19:19 UTC 1999' $SCRATCH_MNT/a touch -d 'Jan 9 19:19:19 UTC 1999' $SCRATCH_MNT/b ls -la $SCRATCH_MNT/* >> $seqres.full echo before upgrade: TZ=UTC stat -c '%Y' $SCRATCH_MNT/a TZ=UTC stat -c '%Y' $SCRATCH_MNT/b _scratch_unmount _check_scratch_fs # Now upgrade to bigtime support _scratch_xfs_admin -O bigtime=1 2>> $seqres.full _check_scratch_xfs_features BIGTIME _check_scratch_fs _scratch_xfs_db -c 'version' -c 'sb 0' -c 'p' >> $seqres.full # Mount again, look at our files _scratch_mount >> $seqres.full ls -la $SCRATCH_MNT/* >> $seqres.full echo after upgrade: TZ=UTC stat -c '%Y' $SCRATCH_MNT/a TZ=UTC stat -c '%Y' $SCRATCH_MNT/b # Bump one of the timestamps but stay under 2038 touch -d 'Jan 10 19:19:19 UTC 1999' $SCRATCH_MNT/a echo after upgrade and bump: TZ=UTC stat -c '%Y' $SCRATCH_MNT/a TZ=UTC stat -c '%Y' $SCRATCH_MNT/b _scratch_cycle_mount # Did the bumped timestamp survive the remount? ls -la $SCRATCH_MNT/* >> $seqres.full echo after upgrade, bump, and remount: TZ=UTC stat -c '%Y' $SCRATCH_MNT/a TZ=UTC stat -c '%Y' $SCRATCH_MNT/b # Modify the other timestamp to stretch beyond 2038 touch -d 'Feb 22 22:22:22 UTC 2222' $SCRATCH_MNT/b echo after upgrade and extension: TZ=UTC stat -c '%Y' $SCRATCH_MNT/a TZ=UTC stat -c '%Y' $SCRATCH_MNT/b _scratch_cycle_mount # Did the timestamp survive the remount? ls -la $SCRATCH_MNT/* >> $seqres.full echo after upgrade, extension, and remount: TZ=UTC stat -c '%Y' $SCRATCH_MNT/a TZ=UTC stat -c '%Y' $SCRATCH_MNT/b # success, all done status=0 exit