Files
apfstests/tests/xfs/160
T
Darrick J. Wong 2837d7c32d xfs: test upgrading filesystem to bigtime
Test that we can upgrade an existing filesystem to use bigtime.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>	(xfs/908 only)
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2021-05-09 22:37:50 +08:00

118 lines
3.0 KiB
Bash
Executable File

#! /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