Files
apfstests/149
T
Christoph Hellwig f381f98206 xfstests: move GPL boilerplates to fix lsqa.pl
It turns out lsqa.pl nees the test number and description first in the
file, so move the GPL boilerplates below it.

Also remove acouple of cases where we have one full copyright line + gpl
boilerplate before the description and another copyright line after
the description.

Signed-off-by: Christoph Hellwig <hch@lst.de>
2009-05-28 17:04:15 +02:00

130 lines
3.3 KiB
Bash
Executable File

#! /bin/sh
# FS QA Test No. 149
#
# Exercise xfs_prepair - ensure repeated use doesn't corrupt
# This is a clone of test 031 using xfs_prepair instead of xfs_repair
#
#-----------------------------------------------------------------------
# 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
#
#-----------------------------------------------------------------------
#
# creator
owner=ddiss@sgi.com
seq=`basename $0`
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
rm -f $seq.full
# get standard environment, filters and checks
. ./common.rc
. ./common.repair
. ./common.filter
[ -z "$XFS_PARALLEL_REPAIR_PROG" ] && _notrun "parallel repair binary xfs_prepair is not installed"
# force use of parallel repair
export XFS_REPAIR_PROG=$XFS_PARALLEL_REPAIR_PROG
_check_repair()
{
echo "Repairing, round 0" >> $seq.full
_scratch_xfs_repair 2>&1 | _filter_repair | tee -a $seq.full >$tmp.0
for i in 1 2 3 4
do
echo "Repairing, iteration $i" | tee -a $seq.full
_scratch_xfs_repair 2>&1 | _filter_repair >$tmp.$i
diff $tmp.0 $tmp.$i >> $seq.full
if [ $? -ne 0 ]; then
echo "ERROR: repair round $i differs to round 0 (see $seq.full)" | tee -a $seq.full
break
fi
# echo all interesting stuff...
perl -ne '
s/(rebuilding directory inode) (\d+)/\1 INO/g;
s/internal log/<TYPEOF> log/g;
s/external log on \S+/<TYPEOF> log/g;
/^\S+/ && print;
' $tmp.$i
done
echo
}
# prototype file to create various directory forms
_create_proto()
{
total=$1
count=0
# take inode size into account for non-shortform directories...
[ $total -gt 0 ] && total=`expr $total \* $isize / 512`
cat >$tmp.proto <<EOF
DUMMY1
0 0
: root directory
d--777 3 1
lost+found d--755 3 1
$
EOF
while [ $count -lt $total ]
do
let count=$count+1
cat >>$tmp.proto <<EOF
${count}_of_${total}_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ---755 3 1 /bin/true
EOF
done
echo '$' >>$tmp.proto
}
# real QA test starts here
_supported_fs xfs
_supported_os IRIX Linux
_require_nobigloopfs
_require_scratch
# sanity test - default + one root directory entry
# Note: must do this proto/mkfs now for later inode size calcs
_create_proto 0
echo "=== one entry (shortform)"
_scratch_mkfs_xfs -p $tmp.proto >$tmp.mkfs0 2>&1
_filter_mkfs <$tmp.mkfs0 >/dev/null 2>$tmp.mkfs
. $tmp.mkfs
_check_repair
# block-form root directory & repeat
_create_proto 20
echo "=== twenty entries (block form)"
_scratch_mkfs_xfs -p $tmp.proto | _filter_mkfs >/dev/null 2>&1
_check_repair
# leaf-form root directory & repeat
_create_proto 1000
echo "=== thousand entries (leaf form)"
_scratch_mkfs_xfs -p $tmp.proto | _filter_mkfs >/dev/null 2>&1
_check_repair
# success, all done
status=0
exit