Files
apfstests/tests/xfs/030
T
Jan Kara 254360fd9a common: Improve _link_output_file to be more versatile
Currently _link_output_file() selects output file suffix based on the
current operating system. Make it more versatile by allowing selection
of output file suffix based on any feature string. The idea is that
in config file ($seq.cfg) there are several lines like:

feat1,feat2: suffix

The function is passed a feature string (or uses os_name,MOUNT_OPTIONS
if no argument is passed) and selects output file with a suffix for
which all features are present in the feature string. If there is no
matching line, output with 'default' suffix is selected.

Update all tests using _link_out_file to the new calling convention.

Signed-off-by: Jan Kara <jack@suse.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
2015-12-21 17:08:22 +11:00

110 lines
2.9 KiB
Bash
Executable File

#! /bin/bash
# FS QA Test No. 030
#
# exercise xfs_repair repairing broken filesystems
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
#-----------------------------------------------------------------------
#
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 /
umount $SCRATCH_DEV 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
# link correct .out file
_link_out_file
# 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" |
sed -e '/^error following ag 0 unlinked list$/d' \
-e '/^bad agbno AGBNO for finobt/d'
done
}
# real QA test starts here
_supported_fs xfs
_supported_os IRIX Linux
_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
_scratch_mount
src/feature -U $SCRATCH_DEV && \
_notrun "UQuota are enabled, test needs controlled sb recovery"
src/feature -G $SCRATCH_DEV && \
_notrun "GQuota are enabled, test needs controlled sb recovery"
src/feature -P $SCRATCH_DEV && \
_notrun "PQuota are enabled, test needs controlled sb recovery"
umount $SCRATCH_DEV
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"
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