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