Files
apfstests/tests/xfs/030
T
Darrick J. Wong 15bb2505e5 xfs/{010,030}: update repair output to deal with inobtcount feature
Update both of these tests to filter out the new error messages from
repair when the inode btree counter feature is enabled.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2021-03-28 22:20:18 +08:00

101 lines
2.5 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved.
#
# FS QA Test No. 030
#
# exercise xfs_repair repairing broken filesystems
#
seqfull=$0
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
_cleanup()
{
cd /
_scratch_unmount 2>/dev/null
rm -f $tmp.*
}
trap "_cleanup; exit \$status" 0 1 2 3 15
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/repair
. ./common/quota
# nuke the superblock, AGI, AGF, AGFL; then try repair the damage
#
_check_ag()
{
for structure in 'sb 0' 'agf 0' 'agi 0' 'agfl 0'
do
echo "Corrupting $structure - setting bits to $1"
_check_repair $1 "$structure" | uniq |
sed -e '/^error following ag 0 unlinked list$/d' \
-e '/^bad agbno AGBNO for finobt/d' \
-e '/^bad agbno AGBNO for rmapbt/d' \
-e '/^bad agbno AGBNO for refcntbt/d' \
-e '/^agf has bad CRC/d' \
-e '/^agi has bad CRC/d' \
-e '/^bad inobt block count/d' \
-e '/^bad finobt block count/d' \
-e '/^Missing reverse-mapping record.*/d' \
-e '/^bad levels LEVELS for [a-z]* root.*/d' \
-e '/^unknown block state, ag AGNO, block.*/d'
done
}
# real QA test starts here
_supported_fs xfs
_require_scratch
_require_no_large_scratch_dev
DSIZE="-dsize=100m,agcount=6"
# first we need to ensure there are no bogus secondary
# superblocks between the primary and first secondary
# superblock (hanging around from earlier tests)...
#
_scratch_mkfs_xfs $DSIZE >/dev/null 2>&1
if [ $? -ne 0 ] # probably don't have a big enough scratch
then
_notrun "SCRATCH_DEV too small, results would be non-deterministic"
else
_qmount_option noquota
_scratch_mount
$here/src/feature -U $SCRATCH_DEV && \
_notrun "UQuota are enabled, test needs controlled sb recovery"
$here/src/feature -G $SCRATCH_DEV && \
_notrun "GQuota are enabled, test needs controlled sb recovery"
$here/src/feature -P $SCRATCH_DEV && \
_notrun "PQuota are enabled, test needs controlled sb recovery"
_scratch_unmount
fi
clear=""
eval `xfs_db -r -c "sb 1" -c stack $SCRATCH_DEV | perl -ne '
if (/byte offset (\d+), length (\d+)/) {
print "clear=", $1 / 512, "\n"; exit
}'`
[ -z "$clear" ] && echo "Cannot calculate length to clear"
$here/src/devzero -v -1 -n "$clear" $SCRATCH_DEV >/dev/null
# now kick off the real repair test...
#
_scratch_mkfs_xfs $DSIZE | _filter_mkfs 2>$tmp.mkfs
. $tmp.mkfs
_check_ag 0
_check_ag -1
# success, all done
status=0
exit