mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
2837d7c32d
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>
118 lines
3.0 KiB
Bash
Executable File
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
|