-#! /bin/sh
-# XFS QA Test No. 031
-# $Id: 1.1 $
+#! /bin/bash
+# FS QA Test No. 031
#
# exercise xfs_repair - ensure repeated use doesn't corrupt
#
#-----------------------------------------------------------------------
-# Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of version 2 of the GNU General Public License as
+# 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.
-#
-# Further, this software is distributed without any warranty that it is
-# free of the rightful claim of any third person regarding infringement
-# or the like. Any license provided herein, whether implied or
-# otherwise, applies only to this software file. Patent licenses, if
-# any, provided herein do not apply to combinations of this program with
-# other software, or any other product whatsoever.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write the Free Software Foundation, Inc., 59
-# Temple Place - Suite 330, Boston MA 02111-1307, USA.
-#
-# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
-# Mountain View, CA 94043, or:
-#
-# http://www.sgi.com
-#
-# For further information regarding this notice, see:
-#
-# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+#
+# 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
# get standard environment, filters and checks
. ./common.rc
+. ./common.repair
. ./common.filter
+# link correct .out file
+_link_out_file $seq.out
+
_check_repair()
{
- xfs_repair $SCRATCH_DEV >$tmp.0 2>&1
+ 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
- xfs_repair $SCRATCH_DEV 2>&1 | tee -a $seq.full >$tmp.$i
- diff $tmp.0 $tmp.$i
+ _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
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
while [ $count -lt $total ]
do
- count=`expr $count + 1`
+ let count=$count+1
cat >>$tmp.proto <<EOF
${count}_of_${total}_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ---755 3 1 /bin/true
EOF
}
# real QA test starts here
-#
-_require_scratch
+_supported_fs xfs
+_supported_os IRIX Linux
-MKFSV1="-f -p $tmp.proto -n version=1 $SCRATCH_DEV"
-MKFSV2="-f -p $tmp.proto -n version=2 $SCRATCH_DEV"
+_require_scratch
+_require_no_large_scratch_dev
# sanity test - default + one root directory entry
+# Note: must do this proto/mkfs now for later inode size calcs
_create_proto 0
-echo "=== version 1, one entry"
-mkfs_xfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
-_check_repair
-echo "=== version 2, one entry (shortform)"
-mkfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
+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 "=== version 1, twenty entries"
-mkfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
-_check_repair
-echo "=== version 2, twenty entries (block form)"
-mkfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
+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 "=== version 1, thousand entries"
-mkfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
-_check_repair
-echo "=== version 2, thousand entries (leaf form)"
-mkfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
+echo "=== thousand entries (leaf form)"
+_scratch_mkfs_xfs -p $tmp.proto | _filter_mkfs >/dev/null 2>&1
_check_repair
# success, all done