mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
xfs: test inobtcount upgrade
Make sure we can actually upgrade filesystems to support inode btree counters. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
committed by
Eryu Guan
parent
8fb042e54e
commit
7d20ed3e1f
+13
@@ -1153,3 +1153,16 @@ _require_xfs_repair_upgrade()
|
|||||||
grep -q 'unknown option' && \
|
grep -q 'unknown option' && \
|
||||||
_notrun "xfs_repair does not support upgrading fs with $type"
|
_notrun "xfs_repair does not support upgrading fs with $type"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Require that the scratch device exists, that mkfs can format with inobtcount
|
||||||
|
# enabled, and that the kernel can mount such a filesystem.
|
||||||
|
_require_scratch_xfs_inobtcount()
|
||||||
|
{
|
||||||
|
_require_scratch
|
||||||
|
|
||||||
|
_scratch_mkfs -m inobtcount=1 &> /dev/null || \
|
||||||
|
_notrun "mkfs.xfs doesn't support inobtcount feature"
|
||||||
|
_try_scratch_mount || \
|
||||||
|
_notrun "kernel doesn't support xfs inobtcount feature"
|
||||||
|
_scratch_unmount
|
||||||
|
}
|
||||||
|
|||||||
Executable
+98
@@ -0,0 +1,98 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
# Copyright (c) 2021 Oracle. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# FS QA Test No. 158
|
||||||
|
#
|
||||||
|
# Check that we can upgrade a filesystem to support inobtcount and that
|
||||||
|
# everything works 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_scratch_xfs_inobtcount
|
||||||
|
_require_command "$XFS_ADMIN_PROG" "xfs_admin"
|
||||||
|
_require_xfs_repair_upgrade inobtcount
|
||||||
|
|
||||||
|
rm -f $seqres.full
|
||||||
|
|
||||||
|
# Make sure we can't format a filesystem with inobtcount and not finobt.
|
||||||
|
_scratch_mkfs -m crc=1,inobtcount=1,finobt=0 &> $seqres.full && \
|
||||||
|
echo "Should not be able to format with inobtcount but not finobt."
|
||||||
|
|
||||||
|
# Make sure we can't upgrade a V4 filesystem
|
||||||
|
_scratch_mkfs -m crc=0,inobtcount=0,finobt=0 >> $seqres.full
|
||||||
|
_scratch_xfs_admin -O inobtcount=1 2>> $seqres.full
|
||||||
|
_check_scratch_xfs_features INOBTCNT
|
||||||
|
|
||||||
|
# Make sure we can't upgrade a filesystem to inobtcount without finobt.
|
||||||
|
_scratch_mkfs -m crc=1,inobtcount=0,finobt=0 >> $seqres.full
|
||||||
|
_scratch_xfs_admin -O inobtcount=1 2>> $seqres.full
|
||||||
|
_check_scratch_xfs_features INOBTCNT
|
||||||
|
|
||||||
|
# Format V5 filesystem without inode btree counter support and populate it.
|
||||||
|
_scratch_mkfs -m crc=1,inobtcount=0 >> $seqres.full
|
||||||
|
_scratch_mount
|
||||||
|
|
||||||
|
mkdir $SCRATCH_MNT/stress
|
||||||
|
$FSSTRESS_PROG -d $SCRATCH_MNT/stress -n 1000 >> $seqres.full
|
||||||
|
echo moo > $SCRATCH_MNT/urk
|
||||||
|
|
||||||
|
_scratch_unmount
|
||||||
|
|
||||||
|
# Upgrade filesystem to have the counters and inject failure into repair and
|
||||||
|
# make sure that the only path forward is to re-run repair on the filesystem.
|
||||||
|
echo "Fail partway through upgrading"
|
||||||
|
XFS_REPAIR_FAIL_AFTER_PHASE=2 _scratch_xfs_repair -c inobtcount=1 2>> $seqres.full
|
||||||
|
test $? -eq 137 || echo "repair should have been killed??"
|
||||||
|
_check_scratch_xfs_features NEEDSREPAIR INOBTCNT
|
||||||
|
_try_scratch_mount &> $tmp.mount
|
||||||
|
res=$?
|
||||||
|
_filter_scratch < $tmp.mount
|
||||||
|
if [ $res -eq 0 ]; then
|
||||||
|
echo "needsrepair should have prevented mount"
|
||||||
|
_scratch_unmount
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Re-run repair to finish upgrade"
|
||||||
|
_scratch_xfs_repair 2>> $seqres.full
|
||||||
|
_check_scratch_xfs_features NEEDSREPAIR INOBTCNT
|
||||||
|
|
||||||
|
echo "Filesystem should be usable again"
|
||||||
|
_scratch_mount
|
||||||
|
$FSSTRESS_PROG -d $SCRATCH_MNT/stress -n 1000 >> $seqres.full
|
||||||
|
_scratch_unmount
|
||||||
|
_check_scratch_fs
|
||||||
|
_check_scratch_xfs_features INOBTCNT
|
||||||
|
|
||||||
|
echo "Make sure we have nonzero counters"
|
||||||
|
_scratch_xfs_db -c 'agi 0' -c 'print ino_blocks fino_blocks' | \
|
||||||
|
sed -e 's/= 0$/= ZERO/g' -e 's/= [0-9]*/= NONZERO/g'
|
||||||
|
|
||||||
|
echo "Make sure we can't re-add inobtcount"
|
||||||
|
_scratch_xfs_admin -O inobtcount=1 2>> $seqres.full
|
||||||
|
|
||||||
|
echo "Mount again, look at our files"
|
||||||
|
_scratch_mount >> $seqres.full
|
||||||
|
cat $SCRATCH_MNT/urk
|
||||||
|
|
||||||
|
status=0
|
||||||
|
exit
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
QA output created by 158
|
||||||
|
Running xfs_repair to upgrade filesystem.
|
||||||
|
Inode btree count feature only supported on V5 filesystems.
|
||||||
|
FEATURES: INOBTCNT:NO
|
||||||
|
Running xfs_repair to upgrade filesystem.
|
||||||
|
Inode btree count feature requires free inode btree.
|
||||||
|
FEATURES: INOBTCNT:NO
|
||||||
|
Fail partway through upgrading
|
||||||
|
Adding inode btree counts to filesystem.
|
||||||
|
FEATURES: NEEDSREPAIR:YES INOBTCNT:YES
|
||||||
|
mount: SCRATCH_MNT: mount(2) system call failed: Structure needs cleaning.
|
||||||
|
Re-run repair to finish upgrade
|
||||||
|
FEATURES: NEEDSREPAIR:NO INOBTCNT:YES
|
||||||
|
Filesystem should be usable again
|
||||||
|
FEATURES: INOBTCNT:YES
|
||||||
|
Make sure we have nonzero counters
|
||||||
|
ino_blocks = NONZERO
|
||||||
|
fino_blocks = NONZERO
|
||||||
|
Make sure we can't re-add inobtcount
|
||||||
|
Running xfs_repair to upgrade filesystem.
|
||||||
|
Filesystem already has inode btree counts.
|
||||||
|
Mount again, look at our files
|
||||||
|
moo
|
||||||
@@ -155,6 +155,7 @@
|
|||||||
155 auto repair
|
155 auto repair
|
||||||
156 auto quick admin
|
156 auto quick admin
|
||||||
157 auto quick admin
|
157 auto quick admin
|
||||||
|
158 auto quick inobtcount
|
||||||
164 rw pattern auto prealloc quick
|
164 rw pattern auto prealloc quick
|
||||||
165 rw pattern auto prealloc quick
|
165 rw pattern auto prealloc quick
|
||||||
166 rw metadata auto quick
|
166 rw metadata auto quick
|
||||||
|
|||||||
Reference in New Issue
Block a user