cmd/xfs/stress/001 1.6 Renamed to cmd/xfstests/001
authorNathan Scott <nathans@sgi.com>
Mon, 15 Jan 2001 05:01:19 +0000 (05:01 +0000)
committerNathan Scott <nathans@sgi.com>
Mon, 15 Jan 2001 05:01:19 +0000 (05:01 +0000)
144 files changed:
001 [new file with mode: 0755]
001.out [new file with mode: 0644]
002 [new file with mode: 0755]
002.out [new file with mode: 0644]
003 [new file with mode: 0755]
003.out [new file with mode: 0644]
004 [new file with mode: 0755]
004.out [new file with mode: 0644]
005 [new file with mode: 0755]
005.out [new file with mode: 0644]
006 [new file with mode: 0755]
006.out [new file with mode: 0644]
007 [new file with mode: 0755]
007.out [new file with mode: 0644]
008 [new file with mode: 0755]
008.out [new file with mode: 0644]
009 [new file with mode: 0755]
009.out [new file with mode: 0644]
010 [new file with mode: 0755]
010.out [new file with mode: 0644]
011 [new file with mode: 0755]
011.out [new file with mode: 0644]
012 [new file with mode: 0755]
012.out [new file with mode: 0644]
013 [new file with mode: 0755]
013.out [new file with mode: 0644]
014 [new file with mode: 0755]
014.out [new file with mode: 0644]
015 [new file with mode: 0755]
015.out [new file with mode: 0644]
016 [new file with mode: 0755]
016.out [new file with mode: 0644]
017 [new file with mode: 0755]
017.out [new file with mode: 0644]
018 [new file with mode: 0755]
019 [new file with mode: 0755]
019.out [new file with mode: 0644]
020 [new file with mode: 0755]
020.out [new file with mode: 0644]
021 [new file with mode: 0755]
021.out [new file with mode: 0644]
022 [new file with mode: 0755]
022.out [new file with mode: 0644]
023 [new file with mode: 0755]
023.out [new file with mode: 0644]
024 [new file with mode: 0755]
024.out [new file with mode: 0644]
025 [new file with mode: 0755]
025.out [new file with mode: 0644]
026 [new file with mode: 0755]
026.out [new file with mode: 0644]
027 [new file with mode: 0755]
027.out [new file with mode: 0644]
028 [new file with mode: 0755]
028.out [new file with mode: 0644]
029 [new file with mode: 0755]
029.out [new file with mode: 0644]
030 [new file with mode: 0755]
030.out [new file with mode: 0644]
031 [new file with mode: 0755]
031.out [new file with mode: 0644]
032 [new file with mode: 0755]
032.out [new file with mode: 0644]
033 [new file with mode: 0755]
033.out [new file with mode: 0644]
034 [new file with mode: 0755]
034.out [new file with mode: 0644]
035 [new file with mode: 0755]
035.out [new file with mode: 0644]
036 [new file with mode: 0755]
036.out [new file with mode: 0644]
037 [new file with mode: 0755]
037.out [new file with mode: 0644]
038 [new file with mode: 0755]
038.out [new file with mode: 0644]
039 [new file with mode: 0755]
039.out [new file with mode: 0644]
040 [new file with mode: 0755]
040.out [new file with mode: 0644]
041 [new file with mode: 0755]
041.out [new file with mode: 0644]
042 [new file with mode: 0755]
042.out [new file with mode: 0644]
043 [new file with mode: 0755]
043.out [new file with mode: 0644]
044 [new file with mode: 0755]
044.out [new file with mode: 0644]
045 [new file with mode: 0755]
045.out [new file with mode: 0644]
046 [new file with mode: 0755]
046.out [new file with mode: 0644]
047 [new file with mode: 0755]
047.out [new file with mode: 0644]
048 [new file with mode: 0755]
048.out [new file with mode: 0644]
049 [new file with mode: 0755]
049.out [new file with mode: 0644]
050 [new file with mode: 0755]
050.uqnoenforce [new file with mode: 0644]
050.usrquota [new file with mode: 0644]
051 [new file with mode: 0755]
051.out [new file with mode: 0644]
Makefile [new file with mode: 0644]
README [new file with mode: 0644]
check [new file with mode: 0755]
common [new file with mode: 0644]
common.config [new file with mode: 0644]
common.dump [new file with mode: 0644]
common.filter [new file with mode: 0644]
common.quota [new file with mode: 0644]
common.rc [new file with mode: 0644]
common.repair [new file with mode: 0644]
crash/README [new file with mode: 0644]
crash/rc.sysinit [new file with mode: 0644]
crash/xfscrash [new file with mode: 0755]
group [new file with mode: 0644]
new [new file with mode: 0755]
remake [new file with mode: 0755]
soak [new file with mode: 0755]
src/Makefile [new file with mode: 0644]
src/alloc.c [new file with mode: 0644]
src/bstat.c [new file with mode: 0644]
src/dbtest.c [new file with mode: 0644]
src/devzero.c [new file with mode: 0644]
src/dirstress.c [new file with mode: 0644]
src/fault.c [new file with mode: 0644]
src/feature.c [new file with mode: 0644]
src/fill.c [new file with mode: 0644]
src/fill2.c [new file with mode: 0644]
src/fill2fs [new file with mode: 0755]
src/fill2fs_check [new file with mode: 0755]
src/fsstress.c [new file with mode: 0644]
src/global.h [new file with mode: 0644]
src/holes.c [new file with mode: 0644]
src/ioctl.c [new file with mode: 0644]
src/loggen.c [new file with mode: 0644]
src/lstat64.c [new file with mode: 0644]
src/nametest.c [new file with mode: 0644]
src/permname.c [new file with mode: 0644]
src/randholes.c [new file with mode: 0644]
src/random.c [new file with mode: 0644]
src/runas.c [new file with mode: 0644]
src/truncfile.c [new file with mode: 0644]
src/usemem.c [new file with mode: 0644]

diff --git a/001 b/001
new file mode 100755 (executable)
index 0000000..b917210
--- /dev/null
+++ b/001
@@ -0,0 +1,314 @@
+#! /bin/sh
+#
+# XFS QA Test No. 001
+# $Id: 1.1 $
+#
+# Random file copier to produce chains of identical files so the head
+# and the tail cna be diff'd at then end of each iteration.
+#
+# Exercises creat, write and unlink for a variety of directory sizes, and
+# checks for data corruption.
+#
+# run [config]
+#
+# config has one line per file with filename and byte size, else use
+# the default one below.
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=kenmcd@bruce.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+tmp=/tmp/$$
+here=`pwd`
+status=1
+done_cleanup=false
+trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# real QA test starts here
+
+verbose=true
+
+if [ $# -eq 0 ]
+then
+    # use the default config
+    #
+    cat <<End-of-File >$tmp.config
+# pathname     size in bytes
+#
+small          10
+big            102400
+sub/small      10
+sub/big                102400
+#
+sub/a          1
+sub/b          2
+sub/c          4
+sub/d          8
+sub/e          16
+sub/f          32
+sub/g          64
+sub/h          128
+sub/i          256
+sub/j          512
+sub/k          1024
+sub/l          2048
+sub/m          4096
+sub/n          8192
+#
+sub/a00                100
+sub/b00                200
+sub/c00                400
+sub/d00                800
+sub/e00                1600
+sub/f00                3200
+sub/g00                6400
+sub/h00                12800
+sub/i00                25600
+sub/j00                51200
+sub/k00                102400
+sub/l00                204800
+sub/m00                409600
+sub/n00                819200
+#
+sub/a000       1000
+sub/e000       16000
+sub/h000       128000
+sub/k000       1024000
+End-of-File
+elif [ $# -eq 1 ]
+then
+    if [ -f $1 ]
+    then
+       cp $1 $tmp.config
+    else
+       echo "Error: cannot open config \"$1\""
+       exit 1
+    fi
+else
+    echo "Usage: run [config]"
+    exit 1
+fi
+
+ncopy=200              # number of file copies in the chain step
+
+_setup()
+{
+    if mkdir -p $TEST_DIR/$$
+    then
+       :
+    else
+       echo "Error: cannot mkdir \"$TEST_DIR/$$\""
+       exit 1
+    fi
+    cd $TEST_DIR/$$
+
+    $verbose && echo -n "setup "
+    sed -e '/^#/d' $tmp.config \
+    | while read file nbytes
+    do
+       dir=`dirname $file`
+       if [ "$dir" != "." ]
+       then
+           if [ ! -d $dir ]
+           then
+               if mkdir $dir
+               then
+                   :
+               else
+                   $verbose && echo
+                   echo "Error: cannot mkdir \"$dir\""
+                   exit 1
+               fi
+           fi
+       fi
+       rm -f $file
+       if $here/src/fill $file $file $nbytes
+       then
+           :
+       else
+           $verbose && echo
+           echo "Error: cannot create \"$file\""
+           exit 1
+       fi
+       $verbose && echo -n "."
+    done
+    $verbose && echo
+}
+
+_mark_iteration()
+{
+    $verbose && echo -n "mark_iteration "
+    sed -e '/^#/d' $tmp.config \
+    | while read file nbytes
+    do
+       if [ ! -f $file ]
+       then
+           $verbose && echo
+           echo "Error: $file vanished!"
+           touch $tmp.bad
+           continue
+       fi
+       sed -e "s/ [0-9][0-9]* / $1 /" <$file >$file.tmp
+       mv $file.tmp $file
+       $verbose && echo -n "."
+    done
+    $verbose && echo
+}
+
+# for each file, make a number of copies forming a chain like foo.0,
+# foo.1, foo.2, ... foo.N
+#
+# files are chosen at random, so the lengths of the chains are different
+#
+# then rename foo.N to foo.last and remove all of the other files in
+# the chain
+#
+_chain()
+{
+    $AWK_PROG <$tmp.config '
+BEGIN  { nfile = 0 }
+/^\#/  { next }
+       { file[nfile] = $1
+         link[nfile] = 0
+         nfile++
+       }
+END    { srand('$iter')
+         for (i=0; i < '$ncopy'; i++) {
+           # choose a file at random, and add one copy to that chain
+           j = -1
+           while (j < 0 || j >= nfile)
+               j = int(rand() * nfile)
+           if (link[j] == 0) {
+               printf "if [ ! -f %s ]; then echo \"%s missing!\"; exit; fi\n",file[j],file[j]
+               printf "if [ -f %s.0 ]; then echo \"%s.0 already present!\"; exit; fi\n",file[j],file[j]
+               printf "cp %s %s.0\n",file[j],file[j]
+           }
+           else {
+               printf "if [ ! -f %s.%d ]; then echo \"%s.%d missing!\"; exit; fi\n",file[j],link[j]-1,file[j],link[j]-1
+               printf "if [ -f %s.%d ]; then echo \"%s.%d already present!\"; exit; fi\n",file[j],link[j],file[j],link[j]
+               printf "cp %s.%d %s.%d\n",file[j],link[j]-1,file[j],link[j]
+           }
+           link[j]++
+         }
+         # close all the chains, and remove all of the files except
+         # the head of the chain
+         for (j=0; j<nfile; j++) {
+           if (link[j] > 0)
+               printf "mv %s.%d %s.last\n",file[j],link[j]-1,file[j]
+           for (i=0; i<link[j]-1; i++) {
+               printf "rm -f %s.%d\n",file[j],i
+           }
+         }
+       }' \
+       | sh
+}
+
+_check()
+{
+    rm -f $tmp.bad
+    $verbose && echo -n "check "
+    sed -e '/^#/d' $tmp.config \
+    | while read file nbytes
+    do
+       if [ ! -f $file ]
+       then
+           $verbose && echo
+           echo "Error: $file vanished!"
+           touch $tmp.bad
+           continue
+       fi
+       if [ -f $file.last ]
+       then
+           if cmp $file $file.last >/dev/null 2>&1
+           then
+               $verbose && echo -n "."
+           else
+               $verbose && echo
+               echo "Error: corruption for $file ..."
+               diff -c $file $file.last
+               touch $tmp.bad
+           fi
+       else
+           $verbose && echo -n "."
+       fi
+    done
+    $verbose && echo
+}
+
+_cleanup()
+{
+    # cleanup
+    #
+    if $done_cleanup
+    then
+       :
+    elif [ $status -eq 0 ]
+    then
+       $verbose && echo "cleanup"
+       cd /
+       rm -rf $TEST_DIR/$$
+       done_cleanup=true
+    fi
+}
+
+status=0
+_cleanup
+status=1
+done_cleanup=false
+
+_setup
+
+# do the test
+#
+for iter in 1 2 3 4 5
+do
+    echo -n "iter $iter chain ... "
+    _chain
+    _check
+    if [ -f $tmp.bad ]
+    then
+       echo "Fatal error: test abandoned without changes"
+       exit 1
+    fi
+done
+
+status=0
+exit
diff --git a/001.out b/001.out
new file mode 100644 (file)
index 0000000..e843a58
--- /dev/null
+++ b/001.out
@@ -0,0 +1,9 @@
+QA output created by 001
+cleanup
+setup ....................................
+iter 1 chain ... check ....................................
+iter 2 chain ... check ....................................
+iter 3 chain ... check ....................................
+iter 4 chain ... check ....................................
+iter 5 chain ... check ....................................
+cleanup
diff --git a/002 b/002
new file mode 100755 (executable)
index 0000000..d9dfe48
--- /dev/null
+++ b/002
@@ -0,0 +1,88 @@
+#! /bin/sh
+#
+# XFS QA Test No. 002
+# $Id: 1.1 $
+#
+# simple inode link count test for a regular file
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=kenmcd@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+tmp=/tmp/$$
+here=`pwd`
+status=0       # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# real QA test starts here
+
+echo "Silence is goodness ..."
+
+# ensure target directory exists
+mkdir `dirname $TEST_DIR/$tmp` 2>/dev/null
+
+touch $TEST_DIR/$tmp.1
+for l in 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+do
+    ln $TEST_DIR/$tmp.1 $TEST_DIR/$tmp.$l
+    x=`src/lstat64 $TEST_DIR/$tmp.1 | sed -n -e '/ Links: /s/.*Links: *//p'`
+    if [ "$l" -ne $x ]
+    then
+       echo "Arrgh, created link #$l and lstat64 looks like ..."
+       src/lstat64 $TEST_DIR/$tmp.1
+       status=1
+    fi
+done
+
+for l in 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
+do
+    x=`src/lstat64 $TEST_DIR/$tmp.1 | sed -n -e '/ Links: /s/.*Links: *//p'`
+    if [ "$l" -ne $x ]
+    then
+       echo "Arrgh, about to remove link #$l and lstat64 looks like ..."
+       src/lstat64 $TEST_DIR/$tmp.1
+       status=1
+    fi
+    rm -f $TEST_DIR/$tmp.$l
+done
+
+# success, all done
+exit
diff --git a/002.out b/002.out
new file mode 100644 (file)
index 0000000..11426b5
--- /dev/null
+++ b/002.out
@@ -0,0 +1,2 @@
+QA output created by 002
+Silence is goodness ...
diff --git a/003 b/003
new file mode 100755 (executable)
index 0000000..c3147c1
--- /dev/null
+++ b/003
@@ -0,0 +1,104 @@
+#! /bin/sh
+#
+# XFS QA Test No. 003
+# $Id: 1.1 $
+#
+# exercise xfs_db bug #784078
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=nathans@melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+tmp=/tmp/$$
+here=`pwd`
+status=0       # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+_need_to_be_root
+
+# real QA test starts here
+
+PATH=".:$PATH"
+
+[ -f core ] && rm -f core
+[ -f core ] && echo "Warning: can't nuke existing core file!"
+
+test_done()
+{
+        sts=$?
+        [ -f core ] && echo "FAILED - core file"
+        [ ! -f core -a $sts != 0 ] && echo "FAILED - non-zero exit status"
+        rm -f core
+}
+
+# real QA test starts here
+
+echo "=== TEST 1 ==="
+xfs_db -r -c 'pop' -c 'type sb' $TEST_DEV
+test_done
+
+echo "=== TEST 2 ==="
+xfs_db -r -c 'push sb' $TEST_DEV
+test_done
+
+echo "=== TEST 3 ==="
+xfs_db -r -c 'pop' -c 'push sb' $TEST_DEV
+test_done
+
+echo "=== TEST 4 ==="
+xfs_db -r -c 'type sb' -c 'print' $TEST_DEV
+test_done
+
+echo "=== TEST 5 ==="
+xfs_db -r -c 'inode 128' -c 'push' -c 'type' $TEST_DEV >$tmp.out 2>&1
+test_done
+if ! grep -q "current type is \"inode\"" $tmp.out
+then
+       cat $tmp.out
+fi
+
+echo "=== TEST 6 ==="
+xfs_db -r -c 'sb' -c 'a' $TEST_DEV >$tmp.out 2>&1 # don't care about output
+test_done
+
+echo "=== TEST 7 ==="
+xfs_db -r -c 'ring' $TEST_DEV
+test_done
diff --git a/003.out b/003.out
new file mode 100644 (file)
index 0000000..e55df2e
--- /dev/null
+++ b/003.out
@@ -0,0 +1,12 @@
+QA output created by 003
+=== TEST 1 ===
+no current object
+=== TEST 2 ===
+=== TEST 3 ===
+=== TEST 4 ===
+no current object
+no current type
+=== TEST 5 ===
+=== TEST 6 ===
+=== TEST 7 ===
+no entries in location ring.
diff --git a/004 b/004
new file mode 100755 (executable)
index 0000000..54df4f9
--- /dev/null
+++ b/004
@@ -0,0 +1,139 @@
+#! /bin/sh
+# XFS QA Test No. 004
+# $Id: 1.1 $
+#
+# exercise xfs_db bug #789674 and other freesp functionality
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=nathans@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0
+
+_cleanup()
+{
+       umount $SCRATCH_MNT
+       rm -f $tmp.*
+       exit $status
+}
+trap "_cleanup" 0 1 2 3 15
+
+_populate_scratch()
+{
+       mkfs -t xfs -f $SCRATCH_DEV >/dev/null 2>&1
+       mount -t xfs $SCRATCH_DEV $SCRATCH_MNT
+       dd if=/dev/zero of=$SCRATCH_MNT/foo count=200 bs=4096 >/dev/null 2>&1 &
+       dd if=/dev/zero of=$SCRATCH_MNT/goo count=400 bs=4096 >/dev/null 2>&1 &
+       dd if=/dev/zero of=$SCRATCH_MNT/moo count=800 bs=4096 >/dev/null 2>&1 &
+       wait
+       umount $SCRATCH_MNT                     # flush everything
+       mount -t xfs $SCRATCH_DEV $SCRATCH_MNT  # and then remount
+}
+
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_need_to_be_root
+_require_scratch
+
+# real QA test starts here
+rm -f $seq.full
+
+_populate_scratch
+
+eval `df -P -T --block-size=512 $SCRATCH_MNT 2>&1 \
+       | $AWK_PROG 'END { printf "blocks=%u used=%u avail=%u\n", $3, $4, $5 }'`
+echo "df gave: blocks=$blocks used=$used avail=$avail" >>$seq.full
+
+blksize=`xfs_db -r -c sb -c p $SCRATCH_DEV |grep blocksize |sed -e 's/.*= *//'`
+if [ -z "$blksize" ]
+then
+       echo "Arrgh ... cannot determine blocksize for $fs, xfs_db reports"
+       xfs_db -r -c sb -c p $SCRATCH_DEV
+       status=1
+       continue
+fi
+echo "blocksize from xfs_db is '$blksize'" >>$seq.full
+
+xfs_db -r -c "freesp -s" $SCRATCH_DEV >$tmp.xfs_db
+echo "xfs_db for $SCRATCH_DEV" >>$seq.full
+cat $tmp.xfs_db >>$seq.full
+
+# check the 'blocks' field from freesp command is OK
+perl -ne '
+           BEGIN       { $avail ='$avail' * 512;
+                         $answer="(no xfs_db free blocks line?)" }
+           /free blocks (\d+)$/        || next;
+           $freesp = $1 * '$blksize';
+           if ($freesp == $avail)      { $answer = "yes"; }
+           else                        { $answer = "no ($freesp != $avail)"; }
+           END { print "$answer\n" }
+       ' <$tmp.xfs_db >$tmp.ans
+ans="`cat $tmp.ans`"
+echo "Checking blocks column same as df: $ans"
+if [ "$ans" != yes ]
+then
+       echo "Error: $SCRATCH_DEV: freesp mismatch: $ans"
+       echo "xfs_db output ..."
+       cat $tmp.xfs_db
+       status=1
+fi
+
+# check the 'pct' field from freesp command is good
+perl -ne '
+           BEGIN       { $percent = 0; }
+           /free/      && next;        # skip over free extent size number
+           if (/\s+(\d+\.\d+)$/) {
+               $percent += $1;
+           }
+           END { $percent += 0.5; print int($percent), "\n" }  # round up
+' <$tmp.xfs_db >$tmp.ans
+ans="`cat $tmp.ans`"
+echo "Checking percent column yields 100: $ans"
+if [ "$ans" != 100 ]
+then
+       echo "Error: $SCRATCH_DEV: pct mismatch: $ans (expected 100)"
+       echo "xfs_db output ..."
+       cat $tmp.xfs_db
+       status=1
+fi
+
+exit
diff --git a/004.out b/004.out
new file mode 100644 (file)
index 0000000..b598b90
--- /dev/null
+++ b/004.out
@@ -0,0 +1,3 @@
+QA output created by 004
+Checking blocks column same as df: yes
+Checking percent column yields 100: 100
diff --git a/005 b/005
new file mode 100755 (executable)
index 0000000..692035d
--- /dev/null
+++ b/005
@@ -0,0 +1,87 @@
+#! /bin/sh
+# XFS QA Test No. 005
+# $Id: 1.1 $
+#
+# Test symlinks & ELOOP
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+#
+# note ELOOP limit used to be 32 but changed to 8. Who know what
+# it might be next.
+#
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    cd $TEST_DIR
+    rm -f symlink_{0,1,2,3}{0,1,2,3,4,5,6,7,8,9} symlink_self empty_file
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+cd $TEST_DIR
+
+o=empty_file
+touch $o
+for f in symlink_{0,1,2,3}{0,1,2,3,4,5,6,7,8,9}
+do
+    ln -s $o $f
+    o=$f
+done
+
+ln -s symlink_self symlink_self
+
+echo "*** touch deep symlinks"
+echo ""
+touch symlink_{0,1,2,3}{0,1,2,3,4,5,6,7,8,9}
+echo ""
+echo "*** touch recusive symlinks"
+echo ""
+touch symlink_self
+
+exit
diff --git a/005.out b/005.out
new file mode 100644 (file)
index 0000000..890720f
--- /dev/null
+++ b/005.out
@@ -0,0 +1,39 @@
+QA output created by 005
+*** touch deep symlinks
+
+touch: symlink_08: Too many levels of symbolic links
+touch: symlink_09: Too many levels of symbolic links
+touch: symlink_10: Too many levels of symbolic links
+touch: symlink_11: Too many levels of symbolic links
+touch: symlink_12: Too many levels of symbolic links
+touch: symlink_13: Too many levels of symbolic links
+touch: symlink_14: Too many levels of symbolic links
+touch: symlink_15: Too many levels of symbolic links
+touch: symlink_16: Too many levels of symbolic links
+touch: symlink_17: Too many levels of symbolic links
+touch: symlink_18: Too many levels of symbolic links
+touch: symlink_19: Too many levels of symbolic links
+touch: symlink_20: Too many levels of symbolic links
+touch: symlink_21: Too many levels of symbolic links
+touch: symlink_22: Too many levels of symbolic links
+touch: symlink_23: Too many levels of symbolic links
+touch: symlink_24: Too many levels of symbolic links
+touch: symlink_25: Too many levels of symbolic links
+touch: symlink_26: Too many levels of symbolic links
+touch: symlink_27: Too many levels of symbolic links
+touch: symlink_28: Too many levels of symbolic links
+touch: symlink_29: Too many levels of symbolic links
+touch: symlink_30: Too many levels of symbolic links
+touch: symlink_31: Too many levels of symbolic links
+touch: symlink_32: Too many levels of symbolic links
+touch: symlink_33: Too many levels of symbolic links
+touch: symlink_34: Too many levels of symbolic links
+touch: symlink_35: Too many levels of symbolic links
+touch: symlink_36: Too many levels of symbolic links
+touch: symlink_37: Too many levels of symbolic links
+touch: symlink_38: Too many levels of symbolic links
+touch: symlink_39: Too many levels of symbolic links
+
+*** touch recusive symlinks
+
+touch: symlink_self: Too many levels of symbolic links
diff --git a/006 b/006
new file mode 100755 (executable)
index 0000000..d185a0c
--- /dev/null
+++ b/006
@@ -0,0 +1,89 @@
+#! /bin/sh
+# XFS QA Test No. 006
+# $Id: 1.1 $
+#
+# permname
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    rm -rf $TEST_DIR/permname.$$
+}
+
+_count()
+{
+    $AWK_PROG '
+        BEGIN   { count = 0 }
+                { count ++ }
+        END     { print count " files created" }
+    '
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+
+mkdir $TEST_DIR/permname.$$
+
+echo ""
+echo "single thread permname"
+echo "----------------------"
+mkdir $TEST_DIR/permname.$$/a
+cd $TEST_DIR/permname.$$/a
+$here/src/permname -c 4 -l 6 -p 1 || echo "permname returned $?"
+find . | _count
+
+echo ""
+echo "multi thread permname"
+echo "----------------------"
+mkdir $TEST_DIR/permname.$$/b
+cd $TEST_DIR/permname.$$/b
+$here/src/permname -c 4 -l 6 -p 4 || echo "permname returned $?"
+find . | _count
+
+exit
diff --git a/006.out b/006.out
new file mode 100644 (file)
index 0000000..ce17a49
--- /dev/null
+++ b/006.out
@@ -0,0 +1,11 @@
+QA output created by 006
+
+single thread permname
+----------------------
+alpha size = 4, name length = 6, total files = 4096, nproc=1
+4097 files created
+
+multi thread permname
+----------------------
+alpha size = 4, name length = 6, total files = 4096, nproc=4
+4097 files created
diff --git a/007 b/007
new file mode 100755 (executable)
index 0000000..84b78d6
--- /dev/null
+++ b/007
@@ -0,0 +1,90 @@
+#! /bin/sh
+# XFS QA Test No. 007
+# $Id: 1.1 $
+#
+# drive the src/nametest program
+# which does a heap of open(create)/unlink/stat
+# and checks that error codes make sense with its
+# memory of the files created.
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    rm -f $tmp.*
+    rm -rf $TEST_DIR/$seq
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+status=1 # default failure 
+sourcefile=$tmp.nametest
+seed=1
+iterations=100000
+num_filenames=100
+
+# need to create an input file with a list of
+# filenames on each line 
+i=1
+while [ $i -le $num_filenames ]; do
+  echo "nametest.$i" >>$sourcefile
+  i=`expr $i + 1`
+done
+
+mkdir $TEST_DIR/$seq
+cd $TEST_DIR/$seq
+$here/src/nametest -l $sourcefile -s $seed -i $iterations -z
+
+
+#optional stuff if your test has verbose output to help resolve problems
+#echo
+#echo "If failure, check $seq.full (this) and $seq.full.ok (reference)"
+
+
+# success, all done
+status=0
+exit
diff --git a/007.out b/007.out
new file mode 100644 (file)
index 0000000..514b44a
--- /dev/null
+++ b/007.out
@@ -0,0 +1,22 @@
+QA output created by 007
+.Seed = 1 (use "-s 1" to re-execute this test)
+.......................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+.........................................................................
+....................................................
+creates:  18736 OK,  18802 EEXIST  ( 37538 total, 50% EEXIST)
+removes:  18675 OK,  19927 ENOENT  ( 38602 total, 51% ENOENT)
+lookups:  12000 OK,  11860 ENOENT  ( 23860 total, 49% ENOENT)
+total  :  49411 OK,  50589 w/error (100000 total, 50% w/error)
+
+cleanup:     61 removes
diff --git a/008 b/008
new file mode 100755 (executable)
index 0000000..86ecf4f
--- /dev/null
+++ b/008
@@ -0,0 +1,98 @@
+#! /bin/sh
+# XFS QA Test No. 008
+# $Id: 1.1 $
+#
+# randholes test
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.*; _cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    rm -rf $TEST_DIR/randholes.$$.*
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_do_test()
+{
+    _n="$1"
+    _holes="$2"
+    _param="$3"
+    
+    out=$TEST_DIR/randholes.$$.$_n
+    echo ""
+    echo "randholes.$_n : $_param"
+    echo "------------------------------------------"
+    if $here/src/randholes $_param $out >$tmp.out
+    then
+        # quick check - how many holes did we get?
+        count=`xfs_bmap $out | egrep -c ': hole'`
+        # blocks can end up adjacent, therefore number of holes varies
+        _within_tolerance "holes" $count $_holes 10% -v
+    else
+        echo "    randholes returned $? - see $seq.out.full"
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        echo "$_n - output from randholes:"                 >>$here/$seq.out.full
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        cat $tmp.out                                        >>$here/$seq.out.full
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        echo "$_n - output from bmap:"                      >>$here/$seq.out.full
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        xfs_bmap -vvv $out                                  >>$here/$seq.out.full
+        status=1
+    fi
+}
+
+# real QA test starts here
+
+rm -f $here/$seq.out.full
+
+_do_test 1 50 "-l 5000000 -c 50 -b 4096"
+_do_test 2 100 "-l 10000000 -c 100 -b 4096"
+_do_test 3 100 "-l 10000000 -c 100 -b 512"   # test partial pages
+
+# success, all done
+exit
diff --git a/008.out b/008.out
new file mode 100644 (file)
index 0000000..7bac019
--- /dev/null
+++ b/008.out
@@ -0,0 +1,13 @@
+QA output created by 008
+
+randholes.1 : -l 5000000 -c 50 -b 4096
+------------------------------------------
+holes is in range
+
+randholes.2 : -l 10000000 -c 100 -b 4096
+------------------------------------------
+holes is in range
+
+randholes.3 : -l 10000000 -c 100 -b 512
+------------------------------------------
+holes is in range
diff --git a/009 b/009
new file mode 100755 (executable)
index 0000000..6758c99
--- /dev/null
+++ b/009
@@ -0,0 +1,197 @@
+#! /bin/sh
+# XFS QA Test No. 009
+# $Id: 1.1 $
+#
+# alloc test
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    echo "*** unmount"
+    umount $SCRATCH_MNT
+}
+
+_block_filter()
+{
+   sed -e 's/[0-9][0-9]*\.\.[0-9][0-9]*/BLOCKRANGE/g'
+}
+
+_init()
+{
+    echo "*** mkfs"
+    if ! mkfs -t xfs -f $SCRATCH_DEV >$tmp.out 2>&1
+    then
+       cat $tmp.out
+        echo "failed to mkfs $SCRATCH_DEV"
+        exit 1
+    fi
+
+    echo "*** mount"
+    if ! mount $SCRATCH_DEV $SCRATCH_MNT -t xfs
+    then
+        echo "failed to mount $SCRATCH_DEV"
+        exit 1
+    fi
+}
+
+_filesize()
+{
+    ls -l $1 | $AWK_PROG '{print "filesize = " $5}'
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+_require_scratch
+
+_init
+out=$SCRATCH_MNT/$$.tmp
+
+# since we're using a clean FS here, we make some assumptions
+# about availability of contiguous blocks
+
+# also interesting to note is that ALLOC == FREE. seriously.
+# the _length is ignored_ in irix. the file is allocated up
+# to the specified offset, and zero filled if previously
+# unallocated. the file is truncated at the specified point.
+
+echo "*** test 1 - reservations cleared on O_TRUNC"
+rm -f $out
+cat <<EOF | src/alloc -n -b 4096 -f $out | _block_filter
+r 0 1000b
+m
+EOF
+_filesize $out
+
+cat <<EOF | src/alloc -n -b 4096 -f $out -t | _block_filter
+m
+EOF
+_filesize $out
+
+echo "*** test 2 - reserve & filesize"
+rm -f $out
+cat <<EOF | src/alloc -n -b 4096 -f $out | _block_filter
+r 0 1000b
+EOF
+
+_filesize $out
+
+echo "*** test 3 - alloc & filesize"
+rm -f $out
+cat <<EOF | src/alloc -n -b 4096 -f $out | _block_filter
+a 1000b
+EOF
+
+_filesize $out
+
+echo "*** test 4 - allocations cleared on O_TRUNC"
+rm -f $out
+cat <<EOF | src/alloc -n -b 4096 -f $out | _block_filter
+a 1000b
+EOF
+_filesize $out
+
+cat <<EOF | src/alloc -n -b 4096 -f $out -t | _block_filter
+m
+EOF
+_filesize $out
+
+echo "*** test 5 - reserve / unreserve"
+rm -f $out
+cat <<EOF | src/alloc -n -b 4096 -f $out | _block_filter
+r 0 100b
+u 100b 500b
+m
+u 900b 200b
+m
+EOF
+
+echo "*** test 6 - reserve adjacent"
+rm -f $out
+cat <<EOF | src/alloc -t -n -b 4096 -f $out | _block_filter
+r 0 100b
+r 100b 100b
+m
+EOF
+
+echo "*** test 7 - alloc"
+rm -f $out
+cat <<EOF | src/alloc -n -b 4096 -f $out | _block_filter
+a 1000b
+m
+a 2000b
+m
+EOF
+
+_filesize $out
+
+echo "*** test 8 - alloc & truncate"
+rm -f $out
+cat <<EOF | src/alloc -n -b 4096 -f $out | _block_filter
+a 1000b
+m
+t 500b
+m
+EOF
+
+_filesize $out
+
+echo "*** test 9 - reserve & truncate"
+rm -f $out
+cat <<EOF | src/alloc -n -b 4096 -f $out | _block_filter
+r 0 1000b
+m
+t 500b
+m
+EOF
+
+_filesize $out
+
+
+status=0
+exit
diff --git a/009.out b/009.out
new file mode 100644 (file)
index 0000000..9a706ec
--- /dev/null
+++ b/009.out
@@ -0,0 +1,114 @@
+QA output created by 009
+*** mkfs
+*** mount
+*** test 1 - reservations cleared on O_TRUNC
+    blocksize 4096
+    CMD resvsp, off=0, len=4096000
+    MAP off=0, len=4096000 [0,1000]
+        [ofs,count]: start..end
+        [0,1000]: BLOCKRANGE
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,1000]: BLOCKRANGE
+filesize = 0
+    blocksize 4096
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+filesize = 0
+*** test 2 - reserve & filesize
+    blocksize 4096
+    CMD resvsp, off=0, len=4096000
+    MAP off=0, len=4096000 [0,1000]
+        [ofs,count]: start..end
+        [0,1000]: BLOCKRANGE
+filesize = 0
+*** test 3 - alloc & filesize
+    blocksize 4096
+    CMD allocsp, off=4096000, len=-1
+    MAP off=4096000, len=-1 [1000-]
+        [ofs,count]: start..end
+filesize = 4096000
+*** test 4 - allocations cleared on O_TRUNC
+    blocksize 4096
+    CMD allocsp, off=4096000, len=-1
+    MAP off=4096000, len=-1 [1000-]
+        [ofs,count]: start..end
+filesize = 4096000
+    blocksize 4096
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+filesize = 0
+*** test 5 - reserve / unreserve
+    blocksize 4096
+    CMD resvsp, off=0, len=409600
+    MAP off=0, len=409600 [0,100]
+        [ofs,count]: start..end
+        [0,100]: BLOCKRANGE
+    CMD unresvsp, off=409600, len=2048000
+    MAP off=409600, len=2048000 [100,500]
+        [ofs,count]: start..end
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,100]: BLOCKRANGE
+    CMD unresvsp, off=3686400, len=819200
+    MAP off=3686400, len=819200 [900,200]
+        [ofs,count]: start..end
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,100]: BLOCKRANGE
+*** test 6 - reserve adjacent
+    blocksize 4096
+    CMD resvsp, off=0, len=409600
+    MAP off=0, len=409600 [0,100]
+        [ofs,count]: start..end
+        [0,100]: BLOCKRANGE
+    CMD resvsp, off=409600, len=409600
+    MAP off=409600, len=409600 [100,100]
+        [ofs,count]: start..end
+        [100,100]: BLOCKRANGE
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,200]: BLOCKRANGE
+*** test 7 - alloc
+    blocksize 4096
+    CMD allocsp, off=4096000, len=-1
+    MAP off=4096000, len=-1 [1000-]
+        [ofs,count]: start..end
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,1000]: BLOCKRANGE
+    CMD allocsp, off=8192000, len=-1
+    MAP off=8192000, len=-1 [2000-]
+        [ofs,count]: start..end
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,2000]: BLOCKRANGE
+filesize = 8192000
+*** test 8 - alloc & truncate
+    blocksize 4096
+    CMD allocsp, off=4096000, len=-1
+    MAP off=4096000, len=-1 [1000-]
+        [ofs,count]: start..end
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,1000]: BLOCKRANGE
+    TRUNCATE off=2048000
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,500]: BLOCKRANGE
+filesize = 2048000
+*** test 9 - reserve & truncate
+    blocksize 4096
+    CMD resvsp, off=0, len=4096000
+    MAP off=0, len=4096000 [0,1000]
+        [ofs,count]: start..end
+        [0,1000]: BLOCKRANGE
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,1000]: BLOCKRANGE
+    TRUNCATE off=2048000
+    MAP off=0, len=-1 [0-]
+        [ofs,count]: start..end
+        [0,1000]: BLOCKRANGE
+filesize = 2048000
+*** unmount
diff --git a/010 b/010
new file mode 100755 (executable)
index 0000000..d9e1d14
--- /dev/null
+++ b/010
@@ -0,0 +1,73 @@
+#! /bin/sh
+# XFS QA Test No. 010
+# $Id: 1.1 $
+#
+# dbtest
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=ivanr@sherman.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+
+_cleanup()
+{
+    rm -f $TEST_DIR/DBtest*.{pag,dir}
+}
+trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# filter random number output from dbtest
+#
+_filter_dbtest()
+{
+    sed \
+        -e '/were [0-9][0-9]* duplicate/s//were BLEEP duplicate/' \
+        -e '/using [0-9][0-9]* as seed/s//using BLEEP as seed/'
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+cd $TEST_DIR
+$here/src/dbtest -l 5 -n 3000 | _filter_dbtest
+
+# success, all done
+exit
diff --git a/010.out b/010.out
new file mode 100644 (file)
index 0000000..6472a5d
--- /dev/null
+++ b/010.out
@@ -0,0 +1,58 @@
+QA output created by 010
+dbtest v1.0
+
+Creating database containing 3000 records...
+       performing lookups for 5 iterations...
+       using BLEEP as seed for srandom()...
+
+       
+There were BLEEP duplicate checksums generated
+
+Performing lookups on database...
+
+       Sequential lookups...
+
+
+       Random lookups...
+
+Lookups succeeded...
+
+Performing lookups on database...
+
+       Sequential lookups...
+
+
+       Random lookups...
+
+Lookups succeeded...
+
+Performing lookups on database...
+
+       Sequential lookups...
+
+
+       Random lookups...
+
+Lookups succeeded...
+
+Performing lookups on database...
+
+       Sequential lookups...
+
+
+       Random lookups...
+
+Lookups succeeded...
+
+Performing lookups on database...
+
+       Sequential lookups...
+
+
+       Random lookups...
+
+Lookups succeeded...
+
+Cleaning up database...
+       
+There were BLEEP duplicate checksums generated
diff --git a/011 b/011
new file mode 100755 (executable)
index 0000000..10792ed
--- /dev/null
+++ b/011
@@ -0,0 +1,98 @@
+#! /bin/sh
+# XFS QA Test No. 011
+# $Id: 1.1 $
+#
+# dirstress
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+out=$TEST_DIR/dirstress.$$
+trap "rm -f $tmp.*; _cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    rm -rf $out
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+count=1000
+if ! mkdir $out
+then
+    echo "!! couldn't mkdir $out"
+    status=1
+    exit
+fi
+
+rm -f $seq.out.full
+
+_test()
+{
+    test="$1"
+    args="$2"
+    count="$3"
+    
+    echo "*** TEST $test $args -f <count>"
+    if ! $here/src/dirstress -d $out -f $count $args >$tmp.out 2>&1
+    then
+        echo "    dirstress failed"
+        echo "*** TEST $test -d $out -f $count $args" >>$seq.out.full
+        cat $tmp.out >>$seq.out.full
+        status=1
+    fi
+}
+
+# dirstress doesn't check returns - this is a crash & burn test.
+
+count=1000
+_test 1 "-p 1 -n 1" $count
+_test 2 "-p 5 -n 1" $count
+_test 3 "-p 5 -n 5" $count
+
+# if error
+exit
diff --git a/011.out b/011.out
new file mode 100644 (file)
index 0000000..546a4db
--- /dev/null
+++ b/011.out
@@ -0,0 +1,4 @@
+QA output created by 011
+*** TEST 1 -p 1 -n 1 -f <count>
+*** TEST 2 -p 5 -n 1 -f <count>
+*** TEST 3 -p 5 -n 5 -f <count>
diff --git a/012 b/012
new file mode 100755 (executable)
index 0000000..83d997a
--- /dev/null
+++ b/012
@@ -0,0 +1,131 @@
+#! /bin/sh
+# XFS QA Test No. 012
+# $Id: 1.1 $
+#
+# holes
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.*; _cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    rm -rf $TEST_DIR/holes.$$.*
+}
+
+_filesize()
+{
+    ls -l $1 | $AWK_PROG '{print "    filesize = " $5}'
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_do_test()
+{
+    _n="$1"
+    _param="$2"
+    _count="$3"
+    
+    failed=0
+    
+    out=$TEST_DIR/holes.$$.$_n
+    echo ""
+    echo "holes.$_n : $_param"
+    echo "-----------------------------------------------"
+    if  ! $here/src/holes $_param $out >$tmp.out
+    then
+        echo "    holes returned $? - see $seq.out.full"
+        failed=1
+        status=1
+    fi
+        
+
+    if [ $failed -eq 0 ]
+    then        
+        # quick check - how many holes did we get?
+        count=`xfs_bmap $out | egrep -c ': hole'`
+        echo "    $count hole(s) detected"
+        # and how big was the file?
+        _filesize $out
+        
+        if [ $count -ne $_count ]
+        then
+            echo "    unexpected number of holes - see $seq.out.full"
+            status=1
+            failed=1
+        fi
+    fi
+        
+    if [ $failed -eq 1 ]
+    then
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        echo "$_n - output from holes:"                     >>$here/$seq.out.full
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        cat $tmp.out                                        >>$here/$seq.out.full
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        echo "$_n - output from bmap:"                      >>$here/$seq.out.full
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        xfs_bmap -vvv $out                                  >>$here/$seq.out.full
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        echo "$_n - output from ls -li:"                    >>$here/$seq.out.full
+        echo "--------------------------------------"       >>$here/$seq.out.full
+        ls -li $out                                         >>$here/$seq.out.full
+        status=1
+    fi
+}
+
+# real QA test starts here
+
+rm -f $here/$seq.out.full
+
+# small & fairly dense
+_do_test 1 "-l 40960000 -b 40960 -i 10 -c 1" 100
+
+# big & sparse
+_do_test 2 "-l 409600000 -b 40960 -i 1000 -c 1" 10
+
+# no holes, but a very nasty way to write a file (lots of extents)
+_do_test 3 "-l 40960000 -b 40960 -i 10 -c 10" 0
+
+exit
diff --git a/012.out b/012.out
new file mode 100644 (file)
index 0000000..6dc7ce8
--- /dev/null
+++ b/012.out
@@ -0,0 +1,16 @@
+QA output created by 012
+
+holes.1 : -l 40960000 -b 40960 -i 10 -c 1
+-----------------------------------------------
+    100 hole(s) detected
+    filesize = 40960000
+
+holes.2 : -l 409600000 -b 40960 -i 1000 -c 1
+-----------------------------------------------
+    10 hole(s) detected
+    filesize = 409600000
+
+holes.3 : -l 40960000 -b 40960 -i 10 -c 10
+-----------------------------------------------
+    0 hole(s) detected
+    filesize = 40960000
diff --git a/013 b/013
new file mode 100755 (executable)
index 0000000..9de5028
--- /dev/null
+++ b/013
@@ -0,0 +1,141 @@
+#! /bin/sh
+# XFS QA Test No. 013
+# $Id: 1.1 $
+#
+# fsstress
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    # we might get here with a RO FS
+    mount -o remount,rw $TEST_DEV >/dev/null 2>&1
+    # now kill!
+    rm -rf $TEST_DIR/fsstress.$$.*
+}
+
+_filesize()
+{
+    ls -l $1 | $AWK_PROG '{print "    filesize = " $5}'
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_do_test()
+{
+    _n="$1"
+    _param="$2"
+    _count="$3"
+    
+    failed=0
+    
+    out=$TEST_DIR/fsstress.$$.$_n
+    rm -rf $out
+    if ! mkdir $out
+    then
+        echo "    failed to mkdir $out"
+        status=1
+        exit
+    fi
+    
+    echo ""
+    echo "-----------------------------------------------"
+    echo "fsstress.$_n : $_param"
+    echo "-----------------------------------------------"
+    # -v >$tmp.out
+    if ! $here/src/fsstress $_param $FSSTRESS_AVOID -n $_count -d $out >/dev/null 2>&1
+    then
+        echo "    fsstress (count=$_count) returned $? - see $seq.full"
+        
+        echo "--------------------------------------"       >>$here/$seq.full
+        echo "$_n - output from fsstress:"                  >>$here/$seq.full
+        echo "--------------------------------------"       >>$here/$seq.full
+        echo "<NOT LOGGED>"                                 >>$here/$seq.full
+        #cat $tmp.out                                       >>$here/$seq.full
+        status=1
+    fi
+    
+    _check_fs $TEST_DEV
+}
+
+
+# real QA test starts here
+
+rm -f $here/$seq.full
+echo "berevity is wit..."
+
+count=1000
+
+_check_fs $TEST_DEV
+
+# the default
+
+_do_test 1 "-r" $count
+
+# and the default with multiprocess
+
+_do_test 2 "-p 5 -r" $count
+
+# from Glen's notes
+
+_do_test 3 "-p 4 -z -f rmdir=10 -f link=10 -f creat=10 -f mkdir=10 -f rename=30 -f stat=30 -f unlink=30 -f truncate=20" $count
+
+exit
+
+# Test with error injection:
+# 
+# (error injection)
+# fsstress -n 1000 -d $scratch -p 4 -z -f rmdir=10 -f link=10 -f creat=10 \
+#          -f mkdir=10 -f rename=30 -f stat=30 -f unlink=30 -f truncate=20 \
+#          -e 1
+# 
+# Error values 1 - 6 test IFLUSH
+#         1 - corrupt buffer being flushed to di_core.di_magic
+#         2 - corrupt inode being flushed i_d.di_magic
+#         3 - corrupt IFREG format check
+#         4 - corrupt IFDIR format check
+#         5 - corrupt i_d.di_nextents
+#         6 - corrupt i_d.di_forkoff > sb_inodesize
diff --git a/013.out b/013.out
new file mode 100644 (file)
index 0000000..547369e
--- /dev/null
+++ b/013.out
@@ -0,0 +1,14 @@
+QA output created by 013
+berevity is wit...
+
+-----------------------------------------------
+fsstress.1 : -r
+-----------------------------------------------
+
+-----------------------------------------------
+fsstress.2 : -p 5 -r
+-----------------------------------------------
+
+-----------------------------------------------
+fsstress.3 : -p 4 -z -f rmdir=10 -f link=10 -f creat=10 -f mkdir=10 -f rename=30 -f stat=30 -f unlink=30 -f truncate=20
+-----------------------------------------------
diff --git a/014 b/014
new file mode 100755 (executable)
index 0000000..2c8949e
--- /dev/null
+++ b/014
@@ -0,0 +1,73 @@
+#! /bin/sh
+# XFS QA Test No. 014
+# $Id: 1.1 $
+#
+# truncfile
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.*; _cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    rm -rf $TEST_DIR/truncfile.$$.*
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+
+echo "berevity is wit..."
+
+echo "------"
+echo "test 1"
+echo "------"
+if ! src/truncfile -c 10000 $TEST_DIR/truncfile.$$.0 >$tmp.out 2>&1
+then
+    out=`cat $tmp.out`
+    echo "truncfile returned $? : \"$out\""
+else
+    echo "OK"
+fi
+
+exit
diff --git a/014.out b/014.out
new file mode 100644 (file)
index 0000000..960fcb0
--- /dev/null
+++ b/014.out
@@ -0,0 +1,6 @@
+QA output created by 014
+berevity is wit...
+------
+test 1
+------
+OK
diff --git a/015 b/015
new file mode 100755 (executable)
index 0000000..cec1380
--- /dev/null
+++ b/015
@@ -0,0 +1,135 @@
+#! /bin/sh
+# XFS QA Test No. 015
+# $Id: 1.1 $
+#
+# check out-of-space behaviour
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # success is the default!
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_cleanup()
+{
+       umount $SCRATCH_MNT
+}
+
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_free()
+{
+    _df_dir $TEST_DIR | $AWK_PROG '{ print $5 }'
+}
+
+_filter_dd()
+{
+    $AWK_PROG '
+        /records in/                { next }
+        /records out/               { next }
+        /No space left on device/   { print "   !!! disk full (expected)" 
+                                      next }
+                                    { print "   *** " $0 }
+    '
+}
+
+# real QA test starts here
+_require_scratch
+
+mkfs -t xfs -f -d size=50m $SCRATCH_DEV >/dev/null
+mount -t xfs $SCRATCH_DEV $SCRATCH_MNT
+out=$SCRATCH_MNT/fillup.$$
+
+free0=`_free`
+if [ -z "$free0" ]
+then
+    echo "   *** failed to get free space (0)"
+    exit 1
+fi
+
+echo "fill disk:"      # well, filesystem really - not disk
+
+dd if=/dev/zero of=$out bs=1024k 2>&1 | _filter_dd
+
+if [ ! -e $out ]
+then
+    echo "   *** file not created"
+    exit 1
+fi
+
+if [ ! -s $out ]
+then
+    echo "   *** file created with zero length"
+    ls -l $out
+    exit 1
+fi
+
+echo "delete fill:"
+
+if ! rm $out
+then
+    echo "   *** file not deleted"
+    exit 1
+fi
+
+if [ -e $out ]
+then
+    echo "   *** file still exists"
+    ls -l $out
+    exit 1
+fi
+
+echo "check free space:"
+
+free1=`_free`
+if [ -z "$free1" ]
+then
+    echo "   *** failed to get free space (1)"
+    exit 1
+fi
+
+echo -n "   !!! "
+_within_tolerance "free space" $free1 $free0 1% -v
+
+status=0
+exit
diff --git a/015.out b/015.out
new file mode 100644 (file)
index 0000000..d2c5ae6
--- /dev/null
+++ b/015.out
@@ -0,0 +1,6 @@
+QA output created by 015
+fill disk:
+   !!! disk full (expected)
+delete fill:
+check free space:
+   !!! free space is in range
diff --git a/016 b/016
new file mode 100755 (executable)
index 0000000..9043483
--- /dev/null
+++ b/016
@@ -0,0 +1,206 @@
+#! /bin/sh
+# XFS QA Test No. 016
+# $Id: 1.1 $
+#
+# test end of log overwrite bug #796141
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+#
+# pv 796141
+#
+# create a new FS, mostly fill the log. Then wrap the log back to the
+# start bit by bit to force wiping of stale blocks near the end of the
+# log. Check the block after the log ends to check for corruption
+#
+# assumptions : 
+#    - given we're only touching a single inode, the block after the
+#      log which is in the middle ag should never be touched.
+#      if it changes, we assume the log is writing over it
+#
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1
+
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    echo "*** unmount"
+    umount $SCRATCH_MNT 2>/dev/null
+}
+
+_block_filter()
+{
+    sed -e 's/[0-9][0-9]*\.\.[0-9][0-9]*/BLOCKRANGE/g'
+}
+
+_init()
+{
+    echo "*** reset partition"
+    $here/src/devzero -b 2048 -n 50 -v 198 $SCRATCH_DEV
+    echo "*** mkfs"
+    if ! mkfs -t xfs -f -d size=50m -l size=512b $SCRATCH_DEV >$tmp.out 2>&1
+    then
+       cat $tmp.out
+        echo "failed to mkfs $SCRATCH_DEV"
+        exit 1
+    fi
+}
+
+_log_traffic()
+{
+    count=$1
+    echo "*** generate log traffic"
+    
+    out=$SCRATCH_MNT/$$.tmp
+    
+    echo "   *** mount"
+    if ! mount $SCRATCH_DEV $SCRATCH_MNT -t xfs
+    then
+        echo "failed to mount $SCRATCH_DEV"
+        exit 1
+    fi
+
+    # having quota enabled means extra log traffic - evil!
+    $here/src/feature -u $SCRATCH_DEV && _notrun "User quota are enabled"
+    $here/src/feature -g $SCRATCH_DEV && _notrun "Group quota are enabled"
+    echo "   *** fiddle"
+    while [ $count -ge 0 ]
+    do
+        touch $out 
+        rm $out
+        let "count = count - 1"
+    done
+    
+    echo "   *** unmount"
+    if ! umount $SCRATCH_DEV
+    then
+        echo "failed to unmount $SCRATCH_DEV"
+        exit 1
+    fi
+}
+
+_log_size()
+{
+    xfs_logprint -tb $SCRATCH_DEV | $AWK_PROG '
+        /log device/ {  print $7}
+    '
+}
+
+_log_head()
+{
+    xfs_logprint -tb $SCRATCH_DEV | $AWK_PROG '
+        /head:/ { print $5 }
+    '
+}
+
+_after_log()
+{
+    xfs_db -r $1 -c "sb" -c "print" | $AWK_PROG '
+        /logstart/  { logstart = $3 }
+        /logblocks/ { logblocks = $3 }
+        END {
+            print logstart + logblocks
+        }
+    '
+}
+
+_check_corrupt()
+{
+    f="c6c6c6c6"
+    echo "*** check for corruption"
+    echo "expect $f..." >>$seq.full
+    xfs_db -r $1 -c "fsblock $2" -c "print" | head | tee -a $seq.full | \
+        grep -q -v "$f $f $f $f $f $f $f $f" && \
+            _fail "!!! block $2 corrupted!"
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+rm -f $seq.full
+
+_require_scratch
+_init
+
+block=`_after_log $SCRATCH_DEV`
+echo "fsblock after log = $block"               >>$seq.full
+_check_corrupt $SCRATCH_DEV $block
+
+size=`_log_size`
+echo "log size = $size BB"                      >>$seq.full
+head=`_log_head`
+echo "log position = $head"                     >>$seq.full
+
+[ $size -eq 4096 ] || \
+    _fail "!!! unexpected log size $size"
+[ $head -eq 2 ] || \
+    _fail "!!! unexpected initial log position $head"
+
+echo "    lots of traffic"                      >>$seq.full
+_log_traffic 850
+head=`_log_head`
+echo "log position = $head"                     >>$seq.full
+
+[ $head -gt 3850 -a $head -lt 4050 ] || \
+    _fail "!!! unexpected log position $head"
+
+for c in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+do
+    echo "   little traffic"            >>$seq.full
+    _log_traffic 2
+    head=`_log_head`
+    echo "log position = $head"         >>$seq.full
+    _check_corrupt $SCRATCH_DEV $block
+done
+
+[ $head -lt 1000 ] || \
+    _fail "!!! unexpected log position $head"
+
+
+# happy exit
+rm $seq.full
+status=0
+exit 0
diff --git a/016.out b/016.out
new file mode 100644 (file)
index 0000000..f4f9a67
--- /dev/null
+++ b/016.out
@@ -0,0 +1,115 @@
+QA output created by 016
+*** reset partition
+Wrote 51200.00Kb (value 0xc6)
+*** mkfs
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** generate log traffic
+   *** mount
+   *** fiddle
+   *** unmount
+*** check for corruption
+*** unmount
diff --git a/017 b/017
new file mode 100755 (executable)
index 0000000..0ae5353
--- /dev/null
+++ b/017
@@ -0,0 +1,109 @@
+#! /bin/sh
+# XFS QA Test No. 017
+# $Id: 1.1 $
+#
+# test remount ro - pv 795642 
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1
+
+_cleanup()
+{
+    echo "*** unmount"
+    umount $SCRATCH_MNT 2>/dev/null
+}
+trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+_clean_log()
+{
+    echo ""                                 >>$seq.full
+    echo "*** xfs_logprint ***"             >>$seq.full
+    echo ""                                 >>$seq.full
+    xfs_logprint -tb $1                     | tee -a $seq.full \
+        | head | grep -q "<CLEAN>" || _fail "DIRTY LOG"
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+_require_scratch
+
+echo "*** init FS"
+
+rm -f $seq.full
+umount $SCRATCH_DEV >/dev/null 2>&1
+echo "*** MKFS ***"                         >>$seq.full
+echo ""                                     >>$seq.full
+mkfs -t xfs -f $SCRATCH_DEV                 >>$seq.full 2>&1 \
+    || _fail "mkfs failed"
+mount -t xfs $SCRATCH_DEV $SCRATCH_MNT      >>$seq.full 2>&1 \
+    || _fail "mount failed"
+
+echo "*** test"
+
+for l in 0 1 2 3 4
+do
+        echo "    *** test $l"
+        src/fsstress -d $SCRATCH_MNT -n 1000 $FSSTRESS_AVOID >>$seq.full
+        
+        mount -o remount,ro $SCRATCH_DEV \
+            || _fail "remount ro failed"
+            
+        _clean_log $SCRATCH_DEV 
+        
+        echo ""                             >>$seq.full
+        echo "*** XFS_CHECK ***"            >>$seq.full
+        echo ""                             >>$seq.full
+        xfs_check $SCRATCH_DEV              >>$seq.full 2>&1 \
+            || _fail "xfs_check failed"
+        mount -o remount,rw $SCRATCH_DEV \
+            || _fail "remount rw failed"
+done
+
+echo "*** done"
+# happy exit
+rm -f $seq.full
+status=0
+exit 0
diff --git a/017.out b/017.out
new file mode 100644 (file)
index 0000000..2d11c94
--- /dev/null
+++ b/017.out
@@ -0,0 +1,10 @@
+QA output created by 017
+*** init FS
+*** test
+    *** test 0
+    *** test 1
+    *** test 2
+    *** test 3
+    *** test 4
+*** done
+*** unmount
diff --git a/018 b/018
new file mode 100755 (executable)
index 0000000..fd02e4d
--- /dev/null
+++ b/018
@@ -0,0 +1,143 @@
+#! /bin/sh
+# XFS QA Test No. 018
+# $Id: 1.1 $
+#
+# xfs_logprint test
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_cleanup()
+{
+    echo "*** unmount"
+    umount $SCRATCH_MNT 2>/dev/null
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_full()
+{
+    echo ""            >>$seq.full      
+    echo "*** $* ***"  >>$seq.full
+    echo ""            >>$seq.full
+}
+
+_clean_log()
+{
+    _full "clean_log : xfs_logprint"
+    xfs_logprint -t $1                     | tee -a $seq.full \
+        | head | grep -q "<CLEAN>" || _fail "DIRTY LOG"
+}
+
+_filter_logprint()
+{
+    sed '
+        s/data device: 0x[0-9a-f][0-9a-f]*/data device: <DEVICE>/;
+        s/log device: 0x[0-9a-f][0-9a-f]*/log device: <DEVICE>/;
+        s/daddr: [0-9][0-9]*/daddr: <DADDR>/;
+        s/length: [0-9][0-9]*/length: <LENGTH>/;
+        s/length: [0-9][0-9]*/length: <LENGTH>/;
+        s/^cycle num overwrites: .*$/cycle num overwrites: <TIDS>/;
+        s/tid: [0-9a-f][0-9a-f]*/tid: <TID>/;
+        s/tid:0x[0-9a-f][0-9a-f]*/tid:<TID>/;
+        s/q:0x[0-9a-f][0-9a-f]*/q:<Q>/;
+        s/a:0x[0-9a-f][0-9a-f]*/a:<A>/g;
+        s/blkno:0x[0-9a-f][0-9a-f]*/blkno:<BLKNO>/g;
+        s/blkno: [0-9][0-9]* (0x[0-9a-f]*)/blkno: <BLKNO> (<BLKNO>)/g;
+        s/blkno: [0-9][0-9]*/blkno: <BLKNO>/g;
+        s/boff: [0-9][0-9]*/boff: <BOFF>/g;
+        s/len: *[0-9][0-9]*/len:<LEN>/g;
+        s/skipped [0-9][0-9]* zeroed blocks/skipped <COUNT> zeroed blocks/;
+        s/atime:[0-9a-fx]*  *mtime:[0-9a-fx]*  *ctime:[0-9a-fx]*/atime:<TIME>  mtime:<TIME>  ctime:<TIME>/;
+        s/atime 0x[0-9a-f]* mtime 0x[0-9a-f]* ctime 0x[0-9a-f]*/atime <TIME>  mtime <TIME>  ctime <TIME>/;
+        s/block [0-9][0-9]*/block <BLOCK>/;
+        s/icount: *[0-9][0-9]*  *ifree: *[0-9][0-9]*  *fdblks: *[0-9][0-9]*  *frext: *[0-9][0-9]*/icount:<COUNT> ifree:<FREE> fdblks:<BLOCKS> frext:<COUNT>/;
+        s/1st: *[0-9][0-9]*  *last: *[0-9][0-9]*  *cnt: *[0-9][0-9]*  *freeblks: *[0-9][0-9]*  *longest: *[0-9][0-9]*/1st:<NUM> last:<NUM> cnt:<COUNT> freeblks:<COUNT> longest:<NUM>/;
+        s/^uuid: *[0-9a-f-][0-9a-f-]* *format: *.*$/uuid: <UUID> format: <FORMAT>/;
+    '
+
+}
+
+_check_log()
+{
+    _clean_log $SCRATCH_DEV
+    echo "### xfs_logprint output ###"
+    xfs_logprint $SCRATCH_DEV 2>&1 | _filter_logprint
+    echo "### xfs_logprint -t -i -s 0 output ###"
+    xfs_logprint -t -i -s 0 $SCRATCH_DEV 2>&1 | _filter_logprint
+    echo "### xfs_logprint -t -b -s 0 output ###"
+    xfs_logprint -t -b -s 0 $SCRATCH_DEV 2>&1 | _filter_logprint
+}
+
+# real QA test starts here
+
+_require_scratch
+
+echo "*** init FS"
+
+rm -f $seq.full
+umount $SCRATCH_DEV >/dev/null 2>&1
+
+_full "mkfs"
+mkfs -t xfs -f $SCRATCH_DEV                 >>$seq.full 2>&1 \
+    || _fail "mkfs failed"
+_full " mount"
+mount -t xfs $SCRATCH_DEV $SCRATCH_MNT      >>$seq.full 2>&1 \
+    || _fail "mount failed"
+    
+# generate some log traffic - but not too much - life gets a little
+# more complicated if the log wraps around. This traffic is
+# pretty much arbitary, but could probably be made better than this.
+
+touch $SCRATCH_MNT/{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}
+    
+_full "umount"
+umount $SCRATCH_DEV >>$seq.full 2>&1 \
+    || _fail "umount failed"
+
+_check_log
+
+rm $seq.full
+exit
diff --git a/019 b/019
new file mode 100755 (executable)
index 0000000..bef42b0
--- /dev/null
+++ b/019
@@ -0,0 +1,162 @@
+#! /bin/sh
+# XFS QA Test No. 019
+# $Id: 1.1 $
+#
+# mkfs protofile test
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+seqfull="$seq.full"
+status=1       # failure is the default!
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_cleanup()
+{
+    echo "*** unmount"
+    umount $SCRATCH_MNT 2>/dev/null
+    rm -f $tmp.*
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_full()
+{
+    echo ""            >>$seqfull      
+    echo "*** $* ***"  >>$seqfull
+    echo ""            >>$seqfull
+}
+
+_filter_stat()
+{
+    sed '
+        /^Access:/d;
+        /^Modify:/d;
+        /^Change:/d;
+        s/Device: *[0-9][0-9]*,[0-9][0-9]*/Device: <DEVICE>/;
+        s/Inode: *[0-9][0-9]*/Inode: <INODE>/;
+    ' | tr -s ' '
+}
+
+# real QA test starts here
+
+_require_scratch
+
+protofile=$tmp.proto
+tempfile=$tmp.file
+
+echo fish >$tempfile
+$here/src/devzero -b 2048 -n 2 $tempfile.2 -c -v 44
+
+cat >$protofile <<EOF
+DUMMY1
+0 0
+: root directory
+d--777 3 1
+: a directory
+directory d--755 3 1 
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0 ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1 ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2 ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3 ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4 ---755 3 1 $tempfile
+$
+: back in the root
+setuid -u-666 0 0 $tempfile
+setgid --g666 0 0 $tempfile
+setugid -ug666 0 0 $tempfile
+block_device b--012 3 1 161 162 
+char_device c--345 3 1 177 178
+pipe p--670 0 0
+symlink l--123 0 0 bigfile
+: a file we actually read
+bigfile ---666 3 0 $tempfile.2
+: done
+$
+EOF
+
+if [ $? -ne 0 ]
+then
+    _fail "failed to create test protofile"
+fi
+
+_verify_fs()
+{
+       echo "*** create FS version $1"
+       VERSION="-n version=$1"
+
+       rm -f $seqfull
+       umount $SCRATCH_DEV >/dev/null 2>&1
+
+       _full "mkfs"
+       mkfs -t xfs -f $VERSION -p $protofile $SCRATCH_DEV >>$seqfull 2>&1 \
+               || _fail "mkfs failed"
+           
+       echo "*** check FS"
+       _check_fs $SCRATCH_DEV
+
+       echo "*** mount FS"
+       _full " mount"
+       mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >>$seqfull 2>&1 \
+               || _fail "mount failed"
+           
+       echo "*** verify FS"
+       (cd $SCRATCH_MNT ; find . | sort \
+               | xargs $here/src/lstat64 | _filter_stat)
+       diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
+               || _fail "bigfile corrupted"
+    
+       echo "*** unmount FS"
+       _full "umount"
+       umount $SCRATCH_DEV >>$seqfull 2>&1 \
+               || _fail "umount failed"
+           
+       echo "*** check FS"
+       _check_fs $SCRATCH_DEV
+}
+
+_verify_fs 1
+_verify_fs 2
+
+echo "*** done"
+rm $seqfull
+status=0
+exit
diff --git a/019.out b/019.out
new file mode 100644 (file)
index 0000000..d6397e1
--- /dev/null
+++ b/019.out
@@ -0,0 +1,164 @@
+QA output created by 019
+Wrote 2048.00Kb (value 0x2c)
+*** create FS version 1
+*** check FS
+*** mount FS
+*** verify FS
+ File: "."
+ Size: 4096 Filetype: Directory
+ Mode: (0777/drwxrwxrwx) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 3 
+
+ File: "./bigfile"
+ Size: 2097152 Filetype: Regular File
+ Mode: (0666/-rw-rw-rw-) Uid: (3) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./block_device"
+ Size: 0 Filetype: Block Device
+ Mode: (0012/b-----x-w-) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 161,162
+
+ File: "./char_device"
+ Size: 0 Filetype: Character Device
+ Mode: (0345/c-wxr--r-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 177,178
+
+ File: "./directory"
+ Size: 4096 Filetype: Directory
+ Mode: (0755/drwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 2 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./pipe"
+ Size: 0 Filetype: Fifo File
+ Mode: (0670/frw-rwx---) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setgid"
+ Size: 5 Filetype: Regular File
+ Mode: (2666/-rw-rwsrw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setugid"
+ Size: 5 Filetype: Regular File
+ Mode: (6666/-rwsrwsrw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setuid"
+ Size: 5 Filetype: Regular File
+ Mode: (4666/-rwsrw-rw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./symlink"
+ Size: 7 Filetype: Symbolic Link
+ Mode: (0123/l--x-w--wx) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+*** unmount FS
+*** check FS
+*** create FS version 2
+*** check FS
+*** mount FS
+*** verify FS
+ File: "."
+ Size: 138 Filetype: Directory
+ Mode: (0777/drwxrwxrwx) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 3 
+
+ File: "./bigfile"
+ Size: 2097152 Filetype: Regular File
+ Mode: (0666/-rw-rw-rw-) Uid: (3) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./block_device"
+ Size: 0 Filetype: Block Device
+ Mode: (0012/b-----x-w-) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 161,162
+
+ File: "./char_device"
+ Size: 0 Filetype: Character Device
+ Mode: (0345/c-wxr--r-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 177,178
+
+ File: "./directory"
+ Size: 4096 Filetype: Directory
+ Mode: (0755/drwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 2 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4"
+ Size: 5 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./pipe"
+ Size: 0 Filetype: Fifo File
+ Mode: (0670/frw-rwx---) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setgid"
+ Size: 5 Filetype: Regular File
+ Mode: (2666/-rw-rwsrw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setugid"
+ Size: 5 Filetype: Regular File
+ Mode: (6666/-rwsrwsrw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setuid"
+ Size: 5 Filetype: Regular File
+ Mode: (4666/-rwsrw-rw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./symlink"
+ Size: 7 Filetype: Symbolic Link
+ Mode: (0123/l--x-w--wx) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+*** unmount FS
+*** check FS
+*** done
+*** unmount
diff --git a/020 b/020
new file mode 100755 (executable)
index 0000000..d9faaab
--- /dev/null
+++ b/020
@@ -0,0 +1,206 @@
+#! /bin/sh
+# XFS QA Test No. 020
+# $Id: 1.1 $
+#
+# extended attributes
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.* $testfile; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_filter()
+{
+    sed "s#$TEST_DIR[^ :]*#<TESTFILE>#g; 
+            s#$tmp[^ :]*#<TMPFILE>#g;
+            s#/proc[^ :]*#<PROCFILE>#g" $1
+}
+
+_attr()
+{
+    xfs_attr $* 2>$tmp.err >$tmp.out
+    exit=$?
+    _filter $tmp.out
+    _filter $tmp.err 1>&2
+    return $exit
+}
+
+_attr_list()
+{
+    file=$1
+    
+    echo "   *** print attributes"
+    if ! _attr -l $file >$tmp.raw
+    then
+        echo "      !!! error return"
+        return 1
+    fi
+    
+    $AWK_PROG -v file=$file '
+        {
+            print substr($2,2,length($2)-2)
+            count++
+        }
+        END { 
+            exit count 
+        }
+        ' <$tmp.raw >$tmp.list
+        
+    echo "      *** $? attribute(s)"
+    for l in `cat $tmp.list`
+    do
+        if ! _attr -g $l $file >$tmp.raw
+        then
+            echo "         *** $l"
+            echo "         !!! error return"
+            return 1
+        fi
+        $AWK_PROG '
+            NR==1 {
+                print "         *** field: " substr($2,2,length($2)-2) \
+                      " length: " $5
+                next
+            }
+            {
+                print "            ::: " $0
+            }
+        ' <$tmp.raw
+        
+    done
+}
+
+
+# real QA test starts here
+
+testfile=$TEST_DIR/attribute_$$
+
+echo "*** list non-existant file"
+_attr_list $testfile
+
+echo "*** list non-xfs file (in /proc)"
+_attr_list /proc/devices
+
+echo "*** list empty file"
+touch $testfile
+_attr_list $testfile
+
+echo "*** query non-existant attribute"
+_attr -g "nonexistant" $testfile 2>&1
+
+echo "*** one attribute"
+echo "fish" | _attr -s fish $testfile
+_attr_list $testfile
+
+echo "*** replace attribute"
+echo "fish3" | _attr -s fish $testfile
+_attr_list $testfile
+
+echo "*** add attribute"
+echo "fish2" | _attr -s snrub $testfile
+_attr_list $testfile
+
+echo "*** remove attribute"
+_attr -r fish $testfile
+_attr_list $testfile
+
+echo "*** add lots of attributes"
+v=0
+while [ $v -lt 1000 ]
+do
+    echo "value_$v" | xfs_attr -s "attribute_$v" $testfile >/dev/null
+    if [ $? -ne 0 ]
+    then
+        echo "!!! failed to add \"attribute_$v\""
+        exit 1
+    fi
+    
+    let "v = v + 1"
+done
+
+echo "*** check"
+# don't print it all out...
+xfs_attr -l $testfile \
+    | $AWK_PROG '{ l++ } END {print "   *** " l " attribute(s)" }'
+
+echo "*** remove lots of attributes"
+v=0
+while [ $v -lt 1000 ]
+do
+    if ! xfs_attr -r "attribute_$v" $testfile >/dev/null
+    then
+        echo "!!! failed to add \"attribute_$v\""
+        exit 1
+    fi
+    
+    let "v = v + 1"
+done
+
+_attr_list $testfile
+
+echo "*** really long value"
+dd if=/dev/zero bs=1024 count=100 2>/dev/null \
+    | _attr -s "long_attr" $testfile >/dev/null
+    
+_attr -g "long_attr" $testfile | tail -n +2 | od -t x1
+_attr -r "long_attr" $testfile >/dev/null
+
+
+echo "*** set/get/remove really long names (expect failure)"
+short="XXXXXXXXXX"
+long="$short$short$short$short$short$short$short$short$short$short"
+vlong="$long$long$long"
+
+_attr -s $vlong -V fish $testfile 2>&1 >/dev/null
+_attr -g $vlong $testfile 2>&1 >/dev/null
+_attr -r $vlong $testfile 2>&1 >/dev/null
+
+echo "*** check final"
+
+_attr_list $testfile
+
+echo "*** delete"
+rm -f $testfile
+
+exit
diff --git a/020.out b/020.out
new file mode 100644 (file)
index 0000000..82b5ddc
--- /dev/null
+++ b/020.out
@@ -0,0 +1,81 @@
+QA output created by 020
+*** list non-existant file
+   *** print attributes
+attr_list: No such file or directory
+Could not list attributes for <TESTFILE>
+      !!! error return
+*** list non-xfs file (in /proc)
+   *** print attributes
+attr_list: Invalid argument
+Could not list attributes for <PROCFILE>
+      !!! error return
+*** list empty file
+   *** print attributes
+      *** 0 attribute(s)
+*** query non-existant attribute
+attr_get: No data available
+Could not get "nonexistant" for <TESTFILE>
+*** one attribute
+Attribute "fish" set to a 5 byte value for <TESTFILE>:
+fish
+
+   *** print attributes
+      *** 1 attribute(s)
+         *** field: fish length: 5
+            ::: fish
+            ::: 
+*** replace attribute
+Attribute "fish" set to a 6 byte value for <TESTFILE>:
+fish3
+
+   *** print attributes
+      *** 1 attribute(s)
+         *** field: fish length: 6
+            ::: fish3
+            ::: 
+*** add attribute
+Attribute "snrub" set to a 6 byte value for <TESTFILE>:
+fish2
+
+   *** print attributes
+      *** 2 attribute(s)
+         *** field: fish length: 6
+            ::: fish3
+            ::: 
+         *** field: snrub length: 6
+            ::: fish2
+            ::: 
+*** remove attribute
+   *** print attributes
+      *** 1 attribute(s)
+         *** field: snrub length: 6
+            ::: fish2
+            ::: 
+*** add lots of attributes
+*** check
+   *** 1001 attribute(s)
+*** remove lots of attributes
+   *** print attributes
+      *** 1 attribute(s)
+         *** field: snrub length: 6
+            ::: fish2
+            ::: 
+*** really long value
+0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+*
+0200000 0a
+0200001
+*** set/get/remove really long names (expect failure)
+attr_set: Bad address
+Could not set "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" for <TESTFILE>
+attr_get: Bad address
+Could not get "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" for <TESTFILE>
+attr_remove: Bad address
+Could not remove "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" for <TESTFILE>
+*** check final
+   *** print attributes
+      *** 1 attribute(s)
+         *** field: snrub length: 6
+            ::: fish2
+            ::: 
+*** delete
diff --git a/021 b/021
new file mode 100755 (executable)
index 0000000..ac711b4
--- /dev/null
+++ b/021
@@ -0,0 +1,126 @@
+#! /bin/sh
+# XFS QA Test No. 021
+# $Id: 1.1 $
+#
+# xfs_db type attr test (pv 797508 linux-xfs & IRIX)
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_cleanup()
+{
+    echo "*** unmount"
+    umount $SCRATCH_MNT 2>/dev/null
+    rm -f $tmp.*
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_s()
+{
+    echo $2 | xfs_attr -s $1 $testfile >/dev/null
+}
+
+_attr()
+{
+    xfs_attr $* 2>$tmp.err >$tmp.out
+    exit=$?
+    sed "s#$SCRATCH_MNT[^ .:]*#<TESTFILE>#g; s#$tmp[^ :]*#<TMPFILE>#g;" $tmp.out
+    sed "s#$SCRATCH_MNT[^ .:]*#<TESTFILE>#g; s#$tmp[^ :]*#<TMPFILE>#g;" $tmp.err 1>&2
+    return $exit
+}
+
+# real QA test starts here
+
+_require_scratch
+
+
+echo "*** mkfs"
+
+rm -f $seq.full
+umount $SCRATCH_DEV >/dev/null 2>&1
+
+mkfs -t xfs -f $SCRATCH_DEV >/dev/null \
+    || _fail "mkfs failed"
+  
+echo "*** mount FS"
+mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >/dev/null \
+    || _fail "mount failed"
+    
+testfile=$SCRATCH_MNT/testfile
+echo "*** make test file 1"
+
+touch $testfile.1
+echo "v1" | _attr -s "a1" $testfile.1 >/dev/null
+echo "v2--" | _attr -s "a2--" $testfile.1 >/dev/null
+_attr -l $testfile.1
+inum_1=`ls -li $testfile.1 | $AWK_PROG '{ print $1 }'`
+
+echo "*** make test file 2"
+
+touch $testfile.2
+echo "value_1" | _attr -s "a1" $testfile.2 >/dev/null
+echo "value_2" | _attr -s "a2-----" $testfile.2 >/dev/null
+
+(echo start ; dd if=/dev/zero bs=65525 count=1 ; echo end ) \
+    | _attr -s "a3" $testfile.2 >/dev/null
+    
+_attr -l $testfile.2
+inum_2=`ls -li $testfile.2 | $AWK_PROG '{ print $1 }'`
+    
+echo "*** unmount FS"
+umount $SCRATCH_DEV >>$seq.full 2>&1 \
+    || _fail "umount failed"
+    
+echo "*** dump attributes (1)"
+
+xfs_db -r -c "inode $inum_1" -c "print a.sfattr" $SCRATCH_DEV
+
+echo "*** dump attributes (2)"
+
+xfs_db -r -c "inode $inum_2" -c "a a.bmx[0].startblock" -c "print" $SCRATCH_DEV
+    
+echo "*** done"
+rm $seq.full
+exit
diff --git a/021.out b/021.out
new file mode 100644 (file)
index 0000000..34864b4
--- /dev/null
+++ b/021.out
@@ -0,0 +1,50 @@
+QA output created by 021
+*** mkfs
+*** mount FS
+*** make test file 1
+Attribute "a1" has a 3 byte value for <TESTFILE>.1
+Attribute "a2--" has a 5 byte value for <TESTFILE>.1
+*** make test file 2
+1+0 records in
+1+0 records out
+Attribute "a1" has a 8 byte value for <TESTFILE>.2
+Attribute "a3" has a 65535 byte value for <TESTFILE>.2
+Attribute "a2-----" has a 8 byte value for <TESTFILE>.2
+*** unmount FS
+*** dump attributes (1)
+a.sfattr.hdr.totsize = 24
+a.sfattr.hdr.count = 2
+a.sfattr.list[0].namelen = 2
+a.sfattr.list[0].valuelen = 3
+a.sfattr.list[0].root = 0
+a.sfattr.list[0].name = "a1"
+a.sfattr.list[0].value = "v1\d"
+a.sfattr.list[1].namelen = 4
+a.sfattr.list[1].valuelen = 5
+a.sfattr.list[1].root = 0
+a.sfattr.list[1].name = "a2--"
+a.sfattr.list[1].value = "v2--\d"
+*** dump attributes (2)
+hdr.info.forw = 0
+hdr.info.back = 0
+hdr.info.magic = 0xfbee
+hdr.count = 3
+hdr.usedbytes = 52
+hdr.firstused = 4044
+hdr.holes = 0
+hdr.freemap[0-2] = [base,size] 0:[56,3988] 1:[0,0] 2:[0,0]
+entries[0-2] = [hashval,nameidx,incomplete,root,local] 0:[0x30b1,4080,0,0,1] 1:[0x30b3,4044,0,0,0] 2:[0xd5aad33f,4060,0,0,1]
+nvlist[0].valuelen = 8
+nvlist[0].namelen = 2
+nvlist[0].name = "a1"
+nvlist[0].value = "value_1\d"
+nvlist[1].valueblk = 0x1
+nvlist[1].valuelen = 65535
+nvlist[1].namelen = 2
+nvlist[1].name = "a3"
+nvlist[2].valuelen = 8
+nvlist[2].namelen = 7
+nvlist[2].name = "a2-----"
+nvlist[2].value = "value_2\d"
+*** done
+*** unmount
diff --git a/022 b/022
new file mode 100755 (executable)
index 0000000..6d2bd16
--- /dev/null
+++ b/022
@@ -0,0 +1,66 @@
+#! /bin/sh
+# XFS QA Test No. 022
+# $Id: 1.1 $
+#
+# Test out a level 0 dump/restore to a tape of a subdir
+# i.e. it is testing out drive_scsitape.c
+#
+# Use src/fsstress to create a directory structure with a mix of files
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -rf $tmp.*; exit \$status" 0 1 2 3 15
+
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape
+_create_dumpdir_stress
+_erase_hard
+_do_dump_sub
+_do_restore
+_ls_compare_sub
+
+# success, all done
+exit
diff --git a/022.out b/022.out
new file mode 100644 (file)
index 0000000..fd4d03b
--- /dev/null
+++ b/022.out
@@ -0,0 +1,56 @@
+QA output created by 022
+Put scsi tape driver into variable block size mode
+Creating directory system to dump using src/fsstress.
+
+-----------------------------------------------
+fsstress : -f link=10 -f creat=10 -f mkdir=10 -f truncate=5 -f symlink=10
+-----------------------------------------------
+Erasing tape
+Dumping to tape...
+xfsdump  -s DUMP_SUBDIR -f TAPE_DEV -M stress_tape_media -L stress_022 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_022"
+xfsdump: ino map phase 1: parsing subtree selections
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: pruning unneeded subtrees
+xfsdump: ino map phase 4: estimating dump size
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 1048576 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -f TAPE_DEV  -L stress_022 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing listing of dump directory with restore directory
+Files TMP.dump_dir and TMP.restore_dir are identical
diff --git a/023 b/023
new file mode 100755 (executable)
index 0000000..b75cd27
--- /dev/null
+++ b/023
@@ -0,0 +1,66 @@
+#! /bin/sh
+# XFS QA Test No. 023
+# $Id: 1.1 $
+#
+# To test xfsdump/restore to tape using a directory with
+# files with data created by src/fill.
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@bruce.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -rf $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape
+_create_dumpdir_fill
+_erase_hard
+_do_dump_sub
+_do_restore
+_diff_compare_sub
+_ls_compare_sub
+
+# success, all done
+exit
diff --git a/023.out b/023.out
new file mode 100644 (file)
index 0000000..823c80f
--- /dev/null
+++ b/023.out
@@ -0,0 +1,90 @@
+QA output created by 023
+Put scsi tape driver into variable block size mode
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -s DUMP_SUBDIR -f TAPE_DEV -M stress_tape_media -L stress_023 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_023"
+xfsdump: ino map phase 1: parsing subtree selections
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: pruning unneeded subtrees
+xfsdump: ino map phase 4: estimating dump size
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 1048576 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -f TAPE_DEV  -L stress_023 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Comparing listing of dump directory with restore directory
+Files TMP.dump_dir and TMP.restore_dir are identical
diff --git a/024 b/024
new file mode 100755 (executable)
index 0000000..826b014
--- /dev/null
+++ b/024
@@ -0,0 +1,67 @@
+#! /bin/sh
+# XFS QA Test No. 024
+# $Id: 1.1 $
+#
+# Test out incremental dumps
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@bruce.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape
+_create_dumpdir_fill
+_erase_hard
+_do_dump
+_append_dumpdir_fill
+_erase_hard
+_do_dump_incremental
+_do_restore
+_diff_compare
+
+# success, all done
+exit
diff --git a/024.out b/024.out
new file mode 100644 (file)
index 0000000..83ea8bf
--- /dev/null
+++ b/024.out
@@ -0,0 +1,123 @@
+QA output created by 024
+Put scsi tape driver into variable block size mode
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -l0 -f TAPE_DEV -M stress_tape_media -L stress_024 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_024"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 1048576 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Erasing tape
+Dumping incrementally to tape...
+xfsdump  -l1 -f TAPE_DEV -M stress_tape_media -L stress_024 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 1 incremental dump of HOSTNAME:SCRATCH_MNT based on level 0 dump begun DATE
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_024"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: pruning unneeded subtrees
+xfsdump: ino map phase 4: estimating dump size
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 1048576 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -f TAPE_DEV  -L stress_024 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Only in DUMP_DIR: big
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Only in DUMP_DIR/sub: a00
+Only in DUMP_DIR/sub: a000
+Only in DUMP_DIR/sub: b
+Only in DUMP_DIR/sub: b00
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Only in DUMP_DIR/sub: c00
+Only in DUMP_DIR/sub: d
+Only in DUMP_DIR/sub: d00
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Only in DUMP_DIR/sub: e00
+Only in DUMP_DIR/sub: e000
+Only in DUMP_DIR/sub: f
+Only in DUMP_DIR/sub: f00
+Only in DUMP_DIR/sub: g
+Only in DUMP_DIR/sub: g00
+Only in DUMP_DIR/sub: h
+Only in DUMP_DIR/sub: h00
+Only in DUMP_DIR/sub: h000
+Only in DUMP_DIR/sub: i
+Only in DUMP_DIR/sub: i00
+Only in DUMP_DIR/sub: j
+Only in DUMP_DIR/sub: j00
+Only in DUMP_DIR/sub: k
+Only in DUMP_DIR/sub: k00
+Only in DUMP_DIR/sub: k000
+Only in DUMP_DIR/sub: l
+Only in DUMP_DIR/sub: l00
+Only in DUMP_DIR/sub: m
+Only in DUMP_DIR/sub: m00
+Only in DUMP_DIR/sub: n
+Only in DUMP_DIR/sub: n00
+Only in DUMP_DIR/sub: small
+Only in SCRATCH_MNT: RESTORE_SUBDIR
diff --git a/025 b/025
new file mode 100755 (executable)
index 0000000..4ad29fc
--- /dev/null
+++ b/025
@@ -0,0 +1,64 @@
+#! /bin/sh
+# XFS QA Test No. 025
+# $Id: 1.1 $
+#
+# Test dump/restore using -m option (min strategy) 
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@bruce.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape
+_create_dumpdir_fill
+_erase_hard
+_do_dump_min
+_do_restore_min
+_diff_compare
+
+# success, all done
+exit
diff --git a/025.out b/025.out
new file mode 100644 (file)
index 0000000..36e850d
--- /dev/null
+++ b/025.out
@@ -0,0 +1,84 @@
+QA output created by 025
+Put scsi tape driver into variable block size mode
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -m -b 1048576 -l0 -f TAPE_DEV -M stress_tape_media -L stress_025 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_025"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -m -b 1048576 -f TAPE_DEV  -L stress_025 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
diff --git a/026 b/026
new file mode 100755 (executable)
index 0000000..8f45c5b
--- /dev/null
+++ b/026
@@ -0,0 +1,62 @@
+#! /bin/sh
+# XFS QA Test No. 026
+# $Id: 1.1 $
+#
+# Test xfsdump/xfsrestore to a dump file (as opposed to a tape)
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@bruce.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_create_dumpdir_fill
+_do_dump_file
+_do_restore_file
+_diff_compare
+
+# success, all done
+exit
diff --git a/026.out b/026.out
new file mode 100644 (file)
index 0000000..25466e5
--- /dev/null
+++ b/026.out
@@ -0,0 +1,74 @@
+QA output created by 026
+Creating directory system to dump using src/fill.
+Setup ....................................
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L stress_026 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_026"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Restoring from file...
+xfsrestore  -f DUMP_FILE  -L stress_026 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
diff --git a/027 b/027
new file mode 100755 (executable)
index 0000000..59b98b0
--- /dev/null
+++ b/027
@@ -0,0 +1,61 @@
+#! /bin/sh
+# XFS QA Test No. 027
+# $Id: 1.1 $
+#
+# Test out "xfsdump | xfsrestore"
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_create_dumpdir_fill
+_do_dump_restore
+_diff_compare_sub
+
+# success, all done
+exit
diff --git a/027.out b/027.out
new file mode 100644 (file)
index 0000000..3e3f27d
--- /dev/null
+++ b/027.out
@@ -0,0 +1,82 @@
+QA output created by 027
+Creating directory system to dump using src/fill.
+Setup ....................................
+xfsdump|xfsrestore ...
+xfsdump  -s DUMP_SUBDIR - SCRATCH_MNT | xfsrestore  - RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: searching media for dump
+xfsrestore: examining media file 0
+xfsrestore: dump description: 
+xfsrestore: hostname: HOSTNAME
+xfsrestore: mount point: SCRATCH_MNT
+xfsrestore: volume: SCRATCH_DEV
+xfsrestore: session time: TIME
+xfsrestore: level: 0
+xfsrestore: session label: ""
+xfsrestore: media label: ""
+xfsrestore: file system id: ID
+xfsrestore: session id: ID
+xfsrestore: media id: ID
+xfsrestore: searching media for directory dump
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: ""
+xfsdump: ino map phase 1: parsing subtree selections
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: pruning unneeded subtrees
+xfsdump: ino map phase 4: estimating dump size
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
diff --git a/028 b/028
new file mode 100755 (executable)
index 0000000..e8bf4d2
--- /dev/null
+++ b/028
@@ -0,0 +1,90 @@
+#! /bin/sh
+# XFS QA Test No. 028
+# $Id: 1.1 $
+#
+# To test out xfsinvutil
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0       # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+# wipe test dir clean first
+# so dump can be real quick
+_wipe_fs
+
+#
+# Create 5 dumps
+# and on the 3rd dump note the date
+# which we'll use to prune against using xfsinvutil
+#
+i=0
+while [ $i -lt 5 ]; do
+    _do_dump_file -L "session.$i"
+    if [ $i -eq 2 ]; then
+       sleep 1
+       middate=`date '+%m/%d/%Y %T'`
+    fi
+    rm $dump_file
+    sleep 2
+    i=`expr $i + 1`
+done
+
+echo "middate = $middate" >>$seq.full
+
+#
+# Now do the xfsinvutil and
+# look and the inventory before and after
+# to see if it did the job
+#
+_dump_inventory
+_do_invutil -n
+_dump_inventory
+
+
+# success, all done
+exit
diff --git a/028.out b/028.out
new file mode 100644 (file)
index 0000000..f3e8c12
--- /dev/null
+++ b/028.out
@@ -0,0 +1,323 @@
+QA output created by 028
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.0 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.0"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.1 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.1"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.2 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.2"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.3 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.3"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.4 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.4"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+file system 0:
+       fs id: ID
+       session 0:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.0"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 1:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.1"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 2:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.2"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 3:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.3"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 4:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.4"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+Processing file /var/xfsdump/inventory/UUIDstab
+   Found entry for HOSTNAME:SCRATCH_MNT
+      processing index file 
+       /var/xfsdump/inventory/UUID.InvIndex
+         Checking access for
+          /var/xfsdump/inventory/UUID.StObj
+          Mount point match
+            Session 0: HOSTNAME:SCRATCH_MNT
+-------------------------------------------------
+Pruning this matching entry:
+UUID           :       ID
+MOUNT POINT    :       HOSTNAME:SCRATCH_MNT
+DEV PATH       :       HOSTNAME:SCRATCH_DEV
+LABEL          :       session.0
+TIME OF DUMP   :       TIME
+-------------------------------------------------
+
+            Session 1: HOSTNAME:SCRATCH_MNT
+-------------------------------------------------
+Pruning this matching entry:
+UUID           :       ID
+MOUNT POINT    :       HOSTNAME:SCRATCH_MNT
+DEV PATH       :       HOSTNAME:SCRATCH_DEV
+LABEL          :       session.1
+TIME OF DUMP   :       TIME
+-------------------------------------------------
+
+            Session 2: HOSTNAME:SCRATCH_MNT
+-------------------------------------------------
+Pruning this matching entry:
+UUID           :       ID
+MOUNT POINT    :       HOSTNAME:SCRATCH_MNT
+DEV PATH       :       HOSTNAME:SCRATCH_DEV
+LABEL          :       session.2
+TIME OF DUMP   :       TIME
+-------------------------------------------------
+
+            Session 3: HOSTNAME:SCRATCH_MNT
+            Session 4: HOSTNAME:SCRATCH_MNT
+file system 0:
+       fs id: ID
+       session 0:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.3"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 1:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.4"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
diff --git a/029 b/029
new file mode 100755 (executable)
index 0000000..c6491ff
--- /dev/null
+++ b/029
@@ -0,0 +1,85 @@
+#! /bin/sh
+# XFS QA Test No. 029
+# $Id: 1.1 $
+#
+# exercise mkfs log (internal/external) zeroing
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=nathans@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+mkfs_args=""
+logp_args=""
+if [ ! -z "$SCRATCH_LOGDEV" ]  # test external log if possible
+then
+       mkfs_args="-l logdev=$SCRATCH_LOGDEV,size=1200b"
+       logp_args="-l $SCRATCH_LOGDEV"
+fi
+
+_filter_logprint()
+{
+       perl -ne '
+           s/data device: ([\w|\/]+)/data device: DDEV/;
+           s/log device: ([\w|\/]+) daddr: (\d+) length: (\d+)/log device: LDEV daddr: XXX length: XXX/;
+           s/log file: "([\w|\/]+)" daddr: (\d+) length: (\d+)/log device: LDEV daddr: XXX length: XXX/;
+           s/skipped (\w+) zeroed blocks/skipped XXX zeroed blocks/;
+            s/^uuid: *[0-9a-f-][0-9a-f-]* *format: *.*$/uuid: <UUID> format: <FORMAT>/;
+           print;
+       '
+}
+
+# real QA test starts here
+# 
+_require_scratch
+
+echo
+mkfs -t xfs -f $mkfs_args $SCRATCH_DEV | _filter_mkfs 2>/dev/null
+
+echo
+xfs_logprint $logp_args $SCRATCH_DEV | _filter_logprint
+
+status=0
+exit
diff --git a/029.out b/029.out
new file mode 100644 (file)
index 0000000..591798e
--- /dev/null
+++ b/029.out
@@ -0,0 +1,26 @@
+QA output created by 029
+
+meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
+data     = bsize=XXX blocks=XXX, imaxpct=PCT
+         = sunit=XXX swidth=XXX, unwritten=X
+naming   =VERN bsize=XXX
+log      =LDEV bsize=XXX blocks=XXX
+realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX
+
+xfs_logprint:
+    data device: DDEV
+    log device: LDEV daddr: XXX length: XXX
+
+cycle: 1       version: 1              lsn: 1,0        tail_lsn: 1,0
+length of Log Record: 20       prev offset: -1         num ops: 1
+uuid: <UUID> format: <FORMAT>
+----------------------------------------------------------------------------
+Oper (0): tid: b0c0d0d0  len: 8  clientid: LOG  flags: UNMOUNT 
+Unmount filesystem
+
+============================================================================
+xfs_logprint: skipped XXX zeroed blocks
+xfs_logprint: physical end of log
+============================================================================
+xfs_logprint: logical end of log
+============================================================================
diff --git a/030 b/030
new file mode 100755 (executable)
index 0000000..f5166a2
--- /dev/null
+++ b/030
@@ -0,0 +1,99 @@
+#! /bin/sh
+# XFS QA Test No. 030
+# $Id: 1.3 $
+#
+# exercise xfs_repair repairing broken filesystems
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=nathans@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+. ./common.repair
+
+# 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"
+       done
+}
+
+# real QA test starts here
+_require_scratch
+
+# first we need to ensure there are no bogus secondary
+# superblocks between the primary and first secondary
+# superblock (hanging around from earlier tests)...
+# 
+size="-d size=100m"
+mkfs -t xfs -f $size $SCRATCH_DEV >/dev/null 2>&1
+if [ $? -ne 0 ]                # probably don't have a big enough scratch
+then
+       size=""
+       src/devzero -v -1 $SCRATCH_DEV >/dev/null
+else
+       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
+fi
+
+# now kick off the real repair test...
+# 
+mkfs -t xfs -f $size $SCRATCH_DEV | _filter_mkfs 2>$tmp.mkfs
+source $tmp.mkfs
+_check_ag 0
+_check_ag -1
+
+
+# success, all done
+status=0
+exit
diff --git a/030.out b/030.out
new file mode 100644 (file)
index 0000000..54275d1
--- /dev/null
+++ b/030.out
@@ -0,0 +1,295 @@
+QA output created by 030
+meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
+data     = bsize=XXX blocks=XXX, imaxpct=PCT
+         = sunit=XXX swidth=XXX, unwritten=X
+naming   =VERN bsize=XXX
+log      =LDEV bsize=XXX blocks=XXX
+realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX
+Corrupting sb 0 - setting bits to 0
+Wrote 0.50Kb (value 0x0)
+Phase 1 - find and verify superblock...
+bad primary superblock - bad magic number !!!
+
+attempting to find secondary superblock...
+found candidate secondary superblock...
+verified secondary superblock...
+writing modified primary superblock
+sb root inode value INO inconsistent with calculated value INO
+resetting superblock root inode pointer to INO
+sb realtime bitmap inode INO inconsistent with calculated value INO
+resetting superblock realtime bitmap ino pointer to INO
+sb realtime summary inode INO inconsistent with calculated value INO
+resetting superblock realtime summary ino pointer to INO
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+Note - stripe unit (0) and width (0) fields have been reset.
+Please set with mount -o sunit=<value>,swidth=<value>
+done
+Corrupting agf 0 - setting bits to 0
+Wrote 0.50Kb (value 0x0)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+bad magic # 0x0 for agf 0
+bad version # 0 for agf 0
+bad length 0 for agf 0, should be LENGTH
+reset bad agf for ag 0
+bad agbno AGBNO for btbno root, agno 0
+bad agbno AGBNO for btbcnt root, agno 0
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+done
+Corrupting agi 0 - setting bits to 0
+Wrote 0.50Kb (value 0x0)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+bad magic # 0x0 for agi 0
+bad version # 0 for agi 0
+bad length # 0 for agi 0, should be LENGTH
+reset bad agi for ag 0
+bad agbno AGBNO for inobt root, agno 0
+root inode chunk not found
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+error following ag 0 unlinked list
+        - process known inodes and perform inode discovery...
+imap claims in-use inode 131 is free, correcting imap
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+done
+Corrupting agfl 0 - setting bits to 0
+Wrote 0.50Kb (value 0x0)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+done
+Corrupting sb 0 - setting bits to -1
+Wrote 0.50Kb (value 0xffffffff)
+Phase 1 - find and verify superblock...
+bad primary superblock - bad magic number !!!
+
+attempting to find secondary superblock...
+found candidate secondary superblock...
+verified secondary superblock...
+writing modified primary superblock
+sb root inode value INO inconsistent with calculated value INO
+resetting superblock root inode pointer to INO
+sb realtime bitmap inode INO inconsistent with calculated value INO
+resetting superblock realtime bitmap ino pointer to INO
+sb realtime summary inode INO inconsistent with calculated value INO
+resetting superblock realtime summary ino pointer to INO
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+Note - stripe unit (0) and width (0) fields have been reset.
+Please set with mount -o sunit=<value>,swidth=<value>
+done
+Corrupting agf 0 - setting bits to -1
+Wrote 0.50Kb (value 0xffffffff)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+bad magic # 0xffffffff for agf 0
+bad version # -1 for agf 0
+bad sequence # -1 for agf 0
+bad length -1 for agf 0, should be LENGTH
+flfirst -1 in agf 0 too large (max = MAX)
+fllast -1 in agf 0 too large (max = MAX)
+reset bad agf for ag 0
+freeblk count 1 != flcount -1 in ag 0
+bad agbno AGBNO for btbno root, agno 0
+bad agbno AGBNO for btbcnt root, agno 0
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+done
+Corrupting agi 0 - setting bits to -1
+Wrote 0.50Kb (value 0xffffffff)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+bad magic # 0xffffffff for agi 0
+bad version # -1 for agi 0
+bad sequence # -1 for agi 0
+bad length # -1 for agi 0, should be LENGTH
+reset bad agi for ag 0
+bad agbno AGBNO for inobt root, agno 0
+root inode chunk not found
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+imap claims in-use inode 131 is free, correcting imap
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+done
+Corrupting agfl 0 - setting bits to -1
+Wrote 0.50Kb (value 0xffffffff)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+done
diff --git a/031 b/031
new file mode 100755 (executable)
index 0000000..3a62956
--- /dev/null
+++ b/031
@@ -0,0 +1,133 @@
+#! /bin/sh
+# XFS QA Test No. 031
+# $Id: 1.1 $
+#
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=nathans@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.filter
+
+_check_repair()
+{
+       xfs_repair $SCRATCH_DEV >$tmp.0 2>&1
+       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
+               # echo all interesting stuff...
+               perl -ne '
+                       s/(rebuilding directory inode) (\d+)/\1 INO/g;
+                       /^\S+/ && print;
+               ' $tmp.$i
+       done
+       echo
+}
+
+# prototype file to create various directory forms
+_create_proto()
+{
+       total=$1
+       count=0
+
+       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
+               count=`expr $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
+# 
+_require_scratch
+
+MKFSV1="-t xfs -f -p $tmp.proto -n version=1 $SCRATCH_DEV"
+MKFSV2="-t xfs -f -p $tmp.proto -n version=2 $SCRATCH_DEV"
+
+# sanity test - default + one root directory entry
+_create_proto 0
+echo "=== version 1, one entry"
+mkfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
+_check_repair
+echo "=== version 2, one entry (shortform)"
+mkfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
+_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
+_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
+_check_repair
+
+# success, all done
+status=0
+exit
diff --git a/031.out b/031.out
new file mode 100644 (file)
index 0000000..949df35
--- /dev/null
+++ b/031.out
@@ -0,0 +1,237 @@
+QA output created by 031
+=== version 1, one entry
+Repairing, iteration 1
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 2
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 3
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 4
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+
+=== version 2, one entry (shortform)
+Repairing, iteration 1
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 2
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 3
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 4
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+
+=== version 1, twenty entries
+Repairing, iteration 1
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 2
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 3
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 4
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+
+=== version 2, twenty entries (block form)
+Repairing, iteration 1
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+rebuilding directory inode INO
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 2
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+rebuilding directory inode INO
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 3
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+rebuilding directory inode INO
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 4
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+rebuilding directory inode INO
+Phase 7 - verify and correct link counts...
+done
+
+=== version 1, thousand entries
+Repairing, iteration 1
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 2
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 3
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 4
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+Phase 7 - verify and correct link counts...
+done
+
+=== version 2, thousand entries (leaf form)
+Repairing, iteration 1
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+rebuilding directory inode INO
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 2
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+rebuilding directory inode INO
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 3
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+rebuilding directory inode INO
+Phase 7 - verify and correct link counts...
+done
+Repairing, iteration 4
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+Phase 3 - for each AG...
+Phase 4 - check for duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+Phase 6 - check inode connectivity...
+rebuilding directory inode INO
+Phase 7 - verify and correct link counts...
+done
+
diff --git a/032 b/032
new file mode 100755 (executable)
index 0000000..f3f8bb4
--- /dev/null
+++ b/032
@@ -0,0 +1,89 @@
+#! /bin/sh
+# XFS QA Test No. 032
+# $Id: 1.1 $
+#
+# cross check mkfs detection of foreign filesystems
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=nathans@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.filter
+
+# real QA test starts here
+# 
+_require_scratch
+
+echo "Silence is golden."
+for fs in `echo /sbin/mkfs.* | sed -e 's/.sbin.mkfs.//g'`
+do
+       preop=""        # for special input needs
+       preargs=""      # for any special pre-device options
+       postargs=""     # for any special post-device options
+
+       # minix mkfs fails for large devices, restrict to 2000 blocks
+       [ $fs = "minix" ] && postargs=2000
+       # these folk prompt before writing
+       [ $fs = "jfs" ] && preop="echo Y |"
+       [ $fs = "reiserfs" ] && preop="echo y |"
+
+       # overwite the first few Kb - should blow away superblocks
+       src/devzero -n 20 $SCRATCH_DEV >/dev/null
+
+       # create a filesystem of this type
+       echo "=== Creating $fs filesystem..." >>$seq.full
+       echo "    ( mkfs -t $fs $SCRATCH_DEV )" >>$seq.full
+       eval $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs >>$seq.full 2>&1
+
+       # next, ensure we don't overwrite it
+       echo "=== Attempting XFS overwrite of $fs..." >>$seq.full
+       mkfs -t xfs $SCRATCH_DEV >>$seq.full 2>&1
+
+       [ $? -eq 0 ] && echo "Failed - overwrote fs type ${fs}!"
+done
+
+# success, all done
+status=0
+exit
diff --git a/032.out b/032.out
new file mode 100644 (file)
index 0000000..9265732
--- /dev/null
+++ b/032.out
@@ -0,0 +1,2 @@
+QA output created by 032
+Silence is golden.
diff --git a/033 b/033
new file mode 100755 (executable)
index 0000000..78a7965
--- /dev/null
+++ b/033
@@ -0,0 +1,81 @@
+#! /bin/sh
+# XFS QA Test No. 033
+# $Id: 1.1 $
+#
+# exercise xfs_repair repairing broken filesystems (root inodes)
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=nathans@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+. ./common.repair
+
+# nuke the root, rt bitmap, and rt summary inodes
+# 
+_check_root_inos()
+{
+       echo "Corrupting root inode - setting bits to $1"
+       _check_repair $1 "inode $rootino"
+       echo "Corrupting rt bitmap inode - setting bits to $1"
+       _check_repair $1 "inode $rbmino"
+       echo "Corrupting rt summary inode - setting bits to $1"
+       _check_repair $1 "inode $rsumino"
+}
+
+# real QA test starts here
+_require_scratch
+
+# devzero blows away 512byte blocks, so make 512byte inodes
+mkfs -t xfs -f -i size=512 $SCRATCH_DEV | _filter_mkfs 2>/dev/null
+`xfs_db -r -c sb -c p $SCRATCH_DEV | grep 'ino = ' | \
+       sed -e 's/ //g' -e 's/^/export /'`
+# rootino, rbmino, and rsumino are now set (lets blow em away!)
+_check_root_inos 0
+_check_root_inos -1
+
+
+# success, all done
+status=0
+exit
diff --git a/033.out b/033.out
new file mode 100644 (file)
index 0000000..00244ee
--- /dev/null
+++ b/033.out
@@ -0,0 +1,229 @@
+QA output created by 033
+meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
+data     = bsize=XXX blocks=XXX, imaxpct=PCT
+         = sunit=XXX swidth=XXX, unwritten=X
+naming   =VERN bsize=XXX
+log      =LDEV bsize=XXX blocks=XXX
+realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX
+Corrupting root inode - setting bits to 0
+Wrote 0.50Kb (value 0x0)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+bad magic number 0x0 on inode INO
+bad version number 0x0 on inode INO
+bad magic number 0x0 on inode INO, resetting magic number
+bad version number 0x0 on inode INO, resetting version number
+imap claims a free inode INO is in use, correcting imap and clearing inode
+cleared root inode INO
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+root inode lost
+        - clear lost+found (if it exists) ...
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+reinitializing root directory
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+resetting inode INO nlinks from 2 to 3
+done
+Corrupting rt bitmap inode - setting bits to 0
+Wrote 0.50Kb (value 0x0)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+bad magic number 0x0 on inode INO
+bad version number 0x0 on inode INO
+bad magic number 0x0 on inode INO, resetting magic number
+bad version number 0x0 on inode INO, resetting version number
+imap claims a free inode INO is in use, correcting imap and clearing inode
+cleared realtime bitmap inode INO
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+reinitializing realtime bitmap inode
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+done
+Corrupting rt summary inode - setting bits to 0
+Wrote 0.50Kb (value 0x0)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+bad magic number 0x0 on inode INO
+bad version number 0x0 on inode INO
+bad magic number 0x0 on inode INO, resetting magic number
+bad version number 0x0 on inode INO, resetting version number
+imap claims a free inode INO is in use, correcting imap and clearing inode
+cleared realtime summary inode INO
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+reinitializing realtime summary inode
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+Phase 7 - verify and correct link counts...
+done
+Corrupting root inode - setting bits to -1
+Wrote 0.50Kb (value 0xffffffff)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+bad magic number 0xffff on inode INO
+bad version number 0xffffffff on inode INO
+bad (negative) size -1 on inode INO
+bad magic number 0xffff on inode INO, resetting magic number
+bad version number 0xffffffff on inode INO, resetting version number
+bad (negative) size -1 on inode INO
+cleared root inode INO
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+root inode lost
+        - clear lost+found (if it exists) ...
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+reinitializing root directory
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+disconnected dir inode INO, moving to lost+found
+Phase 7 - verify and correct link counts...
+resetting inode INO nlinks from 2 to 3
+done
+Corrupting rt bitmap inode - setting bits to -1
+Wrote 0.50Kb (value 0xffffffff)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+bad magic number 0xffff on inode INO
+bad version number 0xffffffff on inode INO
+bad (negative) size -1 on inode INO
+bad magic number 0xffff on inode INO, resetting magic number
+bad version number 0xffffffff on inode INO, resetting version number
+bad (negative) size -1 on inode INO
+cleared realtime bitmap inode INO
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+reinitializing realtime bitmap inode
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+disconnected dir inode INO, moving to lost+found
+Phase 7 - verify and correct link counts...
+done
+Corrupting rt summary inode - setting bits to -1
+Wrote 0.50Kb (value 0xffffffff)
+Phase 1 - find and verify superblock...
+Phase 2 - using internal log
+        - zero log...
+        - scan filesystem freespace and inode maps...
+        - found root inode chunk
+Phase 3 - for each AG...
+        - scan and clear agi unlinked lists...
+        - process known inodes and perform inode discovery...
+bad magic number 0xffff on inode INO
+bad version number 0xffffffff on inode INO
+bad (negative) size -1 on inode INO
+bad magic number 0xffff on inode INO, resetting magic number
+bad version number 0xffffffff on inode INO, resetting version number
+bad (negative) size -1 on inode INO
+cleared realtime summary inode INO
+        - process newly discovered inodes...
+Phase 4 - check for duplicate blocks...
+        - setting up duplicate extent list...
+        - clear lost+found (if it exists) ...
+        - clearing existing "lost+found" inode
+        - deleting existing "lost+found" entry
+        - check for inodes claiming duplicate blocks...
+Phase 5 - rebuild AG headers and trees...
+        - reset superblock...
+Phase 6 - check inode connectivity...
+reinitializing realtime summary inode
+        - resetting contents of realtime bitmap and summary inodes
+        - ensuring existence of lost+found directory
+        - traversing filesystem starting at / ... 
+        - traversal finished ... 
+        - traversing all unattached subtrees ... 
+        - traversals finished ... 
+        - moving disconnected inodes to lost+found ... 
+disconnected dir inode INO, moving to lost+found
+Phase 7 - verify and correct link counts...
+done
diff --git a/034 b/034
new file mode 100755 (executable)
index 0000000..100304a
--- /dev/null
+++ b/034
@@ -0,0 +1,104 @@
+#! /bin/sh
+# XFS QA Test No. 034
+# $Id: 1.1 $
+#
+# pv 801241 - check for reference leaks from the *handle ioctls
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=root@leesa.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+
+_cleanup()
+{
+    echo "*** unmount"
+    umount $SCRATCH_MNT 2>/dev/null
+}
+trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+_require_scratch
+
+echo "*** init FS"
+
+rm -f $seq.full
+umount $SCRATCH_DEV >/dev/null 2>&1
+echo "*** MKFS ***"                         >>$seq.full
+echo ""                                     >>$seq.full
+mkfs -t xfs -f $SCRATCH_DEV                 >>$seq.full 2>&1 \
+    || _fail "mkfs failed"
+mount -t xfs $SCRATCH_DEV $SCRATCH_MNT      >>$seq.full 2>&1 \
+    || _fail "mount failed"
+
+echo "*** test"
+
+_check_fs $SCRATCH_DEV
+
+if ! touch $SCRATCH_MNT/fish
+then
+    echo "!!! failed to touch fish"
+    exit
+fi
+
+if ! src/ioctl $SCRATCH_MNT $SCRATCH_MNT/fish >/dev/null 2>&1
+then
+    echo "!!! failed to run ioctl test program"
+    exit
+fi
+
+if ! rm $SCRATCH_MNT/fish
+then
+    echo "!!! failed to remove fish"
+    exit
+fi
+
+# pv 801241 causes corruption here (inode left in agi_unlinked list)
+_check_fs $SCRATCH_DEV
+
+echo "*** done"
+# happy exit
+rm -f $seq.full
+status=0
+exit 0
diff --git a/034.out b/034.out
new file mode 100644 (file)
index 0000000..b307447
--- /dev/null
+++ b/034.out
@@ -0,0 +1,5 @@
+QA output created by 034
+*** init FS
+*** test
+*** done
+*** unmount
diff --git a/035 b/035
new file mode 100755 (executable)
index 0000000..909e2ff
--- /dev/null
+++ b/035
@@ -0,0 +1,68 @@
+#! /bin/sh
+# XFS QA Test No. 035
+# $Id: 1.1 $
+#
+# Test doing multiple dumps to tape and restoring the 2nd one
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sagan.melbourne.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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape
+_create_dumpdir_fill
+_erase_hard
+_do_dump -L $seq.1
+_rewind
+_create_dumpdir_fill2
+_do_dump -L $seq.2
+_do_restore -L $seq.2
+_diff_compare
+
+# success, all done
+status=0
+exit
diff --git a/035.out b/035.out
new file mode 100644 (file)
index 0000000..b2fa3d5
--- /dev/null
+++ b/035.out
@@ -0,0 +1,98 @@
+QA output created by 035
+Put scsi tape driver into variable block size mode
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -l0 -f TAPE_DEV -M stress_tape_media -L 035.1 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "035.1"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 1048576 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Creating directory system to dump using src/fill.
+Setup ....
+Dumping to tape...
+xfsdump  -l0 -f TAPE_DEV -M stress_tape_media -L 035.2 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "035.2"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: preparing drive
+xfsdump: positioned at media file 0: dump 0, stream 0
+xfsdump: positioned at media file 1: dump 0, stream 0
+xfsdump: positioned at media file 2: dump 0, stream 0
+xfsdump: stream terminator found
+xfsdump: creating dump session media file 0 (media 0, file 2)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 3)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 4)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 1048576 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -f TAPE_DEV  -L 035.2 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: examining media file 1
+xfsrestore: examining media file 2
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/biggg and RESTORE_DIR/DUMP_SUBDIR/biggg are identical
+Files DUMP_DIR/smalll and RESTORE_DIR/DUMP_SUBDIR/smalll are identical
+Files DUMP_DIR/sub/biggg and RESTORE_DIR/DUMP_SUBDIR/sub/biggg are identical
+Files DUMP_DIR/sub/smalll and RESTORE_DIR/DUMP_SUBDIR/sub/smalll are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
diff --git a/036 b/036
new file mode 100755 (executable)
index 0000000..132a5eb
--- /dev/null
+++ b/036
@@ -0,0 +1,65 @@
+#! /bin/sh
+# XFS QA Test No. 036
+# $Id: 1.1 $
+#
+# Test xfsdump/restore minrmt to a remote IRIX tape 
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape $RMT_IRIXTAPE_DEV
+_create_dumpdir_fill
+_erase_soft
+_do_dump_min -o -F
+_do_restore_min
+_diff_compare
+
+# success, all done
+status=0
+exit
diff --git a/036.out b/036.out
new file mode 100644 (file)
index 0000000..dd8a67a
--- /dev/null
+++ b/036.out
@@ -0,0 +1,84 @@
+QA output created by 036
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -o -F -m -b 1048576 -l0 -f TAPE_DEV -M stress_tape_media -L stress_036 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_036"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: WARNING: media may contain data. Overwrite option specified
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -m -b 1048576 -f TAPE_DEV  -L stress_036 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
diff --git a/037 b/037
new file mode 100755 (executable)
index 0000000..29e680e
--- /dev/null
+++ b/037
@@ -0,0 +1,65 @@
+#! /bin/sh
+# XFS QA Test No. 037
+# $Id: 1.1 $
+#
+# Test xfsdump/restore minrmt to a remote linux tape 
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape $RMT_TAPE_DEV
+_create_dumpdir_fill
+_erase_soft
+_do_dump_min -o -F
+_do_restore_min
+_diff_compare
+
+# success, all done
+status=0
+exit
diff --git a/037.out b/037.out
new file mode 100644 (file)
index 0000000..de82872
--- /dev/null
+++ b/037.out
@@ -0,0 +1,84 @@
+QA output created by 037
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -o -F -m -b 1048576 -l0 -f TAPE_DEV -M stress_tape_media -L stress_037 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_037"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: WARNING: media may contain data. Overwrite option specified
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -m -b 1048576 -f TAPE_DEV  -L stress_037 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
diff --git a/038 b/038
new file mode 100755 (executable)
index 0000000..65defac
--- /dev/null
+++ b/038
@@ -0,0 +1,65 @@
+#! /bin/sh
+# XFS QA Test No. 038
+# $Id: 1.1 $
+#
+# Test xfsdump/restore to a remote linux tape 
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape $RMT_TAPE_DEV
+_create_dumpdir_fill
+_erase_hard
+_do_dump
+_do_restore
+_diff_compare
+
+# success, all done
+status=0
+exit
diff --git a/038.out b/038.out
new file mode 100644 (file)
index 0000000..c16806e
--- /dev/null
+++ b/038.out
@@ -0,0 +1,88 @@
+QA output created by 038
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -l0 -f TAPE_DEV -M stress_tape_media -L stress_038 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_038"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 245760 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -f TAPE_DEV  -L stress_038 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
diff --git a/039 b/039
new file mode 100755 (executable)
index 0000000..efbb393
--- /dev/null
+++ b/039
@@ -0,0 +1,65 @@
+#! /bin/sh
+# XFS QA Test No. 039
+# $Id: 1.1 $
+#
+# Test xfsdump/restore to a remote IRIX tape 
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape $RMT_IRIXTAPE_DEV
+_create_dumpdir_fill
+_erase_soft
+_do_dump -o -F
+_do_restore
+_diff_compare
+
+# success, all done
+status=0
+exit
diff --git a/039.out b/039.out
new file mode 100644 (file)
index 0000000..68780f6
--- /dev/null
+++ b/039.out
@@ -0,0 +1,89 @@
+QA output created by 039
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -o -F -l0 -f TAPE_DEV -M stress_tape_media -L stress_039 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_039"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: WARNING: media may contain data. Overwrite option specified
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 245760 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -f TAPE_DEV  -L stress_039 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
diff --git a/040 b/040
new file mode 100755 (executable)
index 0000000..8d8a3ea
--- /dev/null
+++ b/040
@@ -0,0 +1,83 @@
+#! /bin/sh
+# XFS QA Test No. 040
+# $Id: 1.1 $
+#
+# srcdiff test
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+cd `pwd`
+
+if [ -z "$WORKAREA" ]
+then
+    export WORKAREA=../../..
+fi
+
+if [ ! -f $WORKAREA/cmd/xfs/tools/srcdiff ]
+then
+    _notrun "Can't find srcdiff tool under \"$WORKAREA\""
+fi
+
+if [ ! -d $WORKAREA/linux/fs/xfs ]
+then
+    _notrun "Can't find XFS source under \"$WORKAREA\""
+fi
+
+if [ ! -d $WORKAREA/cmd/xfs/include ]
+then
+    _notrun "Can't find XFS command headers under \"$WORKAREA\""
+fi
+
+cd $WORKAREA/cmd/xfs/tools
+perl ./srcdiff -q
+
+# success, all done
+status=0
+exit
diff --git a/040.out b/040.out
new file mode 100644 (file)
index 0000000..c240969
--- /dev/null
+++ b/040.out
@@ -0,0 +1,7 @@
+QA output created by 040
+
+=== Checking headers ===
+
+=== Checking libxfs code ===
+
+=== Checking logprint code ===
diff --git a/041 b/041
new file mode 100755 (executable)
index 0000000..5b921b2
--- /dev/null
+++ b/041
@@ -0,0 +1,118 @@
+#! /bin/sh
+# XFS QA Test No. 041
+# $Id: 041,v 1.3 2000/09/27 00:24:17 ajag Exp ajag $
+#
+# growfs QA tests - repeatedly fill/grow the filesystem
+# check the filesystem contents after each operation
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+set +x
+# creator
+owner=ajag@melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+
+_cleanup()
+{
+    umount $SCRATCH_MNT
+    rm -f $tmp.*
+}
+trap "_cleanup ; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+_require_scratch
+
+_do()
+{
+    if [ $# -ne 1 ]; then echo "Usage: _do \"cmd\"" 1>&2 ; exit 1; fi
+    echo "*** $1" >>$seq.full
+    eval "$1 >>$seq.full 2>&1"
+}
+
+_fill()
+{
+    if [ $# -ne 1 ]; then echo "Usage: _fill \"path\"" 1>&2 ; exit 1; fi
+    echo -n "Fill filesystem... "
+    _do "(src/fill2fs --verbose --dir=$1 --seed=0 --filesize=65536 --stddev=32768 --list=- >>$tmp.manifest)"
+    echo "done"
+}
+
+rm -f $seq.full
+#agsize=16
+agsize=32
+echo -n "Make $agsize megabyte filesystem on SCRATCH_DEV and mount... "
+_do "mkfs -t xfs -d size=${agsize}m,agcount=1 -l internal -f $SCRATCH_DEV"
+_do "mount -t xfs $SCRATCH_DEV $SCRATCH_MNT"
+echo "done"
+
+# full allocation group -> partial; partial -> expand partial + new partial;
+# partial -> expand partial; partial -> full
+# 17 -> 33 -> 35 -> 48 megabytes, converted to fs blocks below
+#for size in 4352 8448 8960 12288
+# 33 -> 67 -> 75 -> 96 converted to fs blocks:
+for size in 8448 17512 19200 24576
+do
+    _fill $SCRATCH_MNT/fill_$size
+    echo -n "Grow filesystem to $size blocks... "
+    _do "xfs_growfs -D ${size} $SCRATCH_MNT"
+    echo "done"
+    echo -n "Flush filesystem... "
+    _do "umount $SCRATCH_MNT"
+    _do "mount -t xfs $SCRATCH_DEV $SCRATCH_MNT"
+    echo "done"
+    echo -n "Check files... "
+    if ! _do "src/fill2fs_check $tmp.manifest"; then
+       echo "fail"
+       echo "Files corrupt/missing after growfs. Test failed see $seq.full"
+       status=1; exit
+    fi
+    echo "done"
+#    echo -n "Checking filesystem... "
+#    _check_fs $SCRATCH_DEV
+#    echo "done"
+done
+
+# success, all done
+echo "Growfs tests passed."
+status=0 ; exit
diff --git a/041.out b/041.out
new file mode 100644 (file)
index 0000000..5266aeb
--- /dev/null
+++ b/041.out
@@ -0,0 +1,19 @@
+QA output created by 041
+Make 32 megabyte filesystem on SCRATCH_DEV and mount... done
+Fill filesystem... done
+Grow filesystem to 8448 blocks... done
+Flush filesystem... done
+Check files... done
+Fill filesystem... done
+Grow filesystem to 17512 blocks... done
+Flush filesystem... done
+Check files... done
+Fill filesystem... done
+Grow filesystem to 19200 blocks... done
+Flush filesystem... done
+Check files... done
+Fill filesystem... done
+Grow filesystem to 24576 blocks... done
+Flush filesystem... done
+Check files... done
+Growfs tests passed.
diff --git a/042 b/042
new file mode 100755 (executable)
index 0000000..9dc96f4
--- /dev/null
+++ b/042
@@ -0,0 +1,174 @@
+#! /bin/sh
+# XFS QA Test No. 042
+# $Id: 042,v 1.2 2000/09/27 00:24:22 ajag Exp ajag $
+#
+# fsr.xfs QA tests
+# create a large fragmented file and check that fsr.xfs doesn't corrupt
+# it or the other contents of the filesystem
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+set +x
+# creator
+owner=ajag@melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+
+_cleanup()
+{
+    umount $SCRATCH_MNT
+    rm -f $tmp.*
+}
+trap "_cleanup ; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+_require_scratch
+
+_cull_files()
+{
+    perl -e "\$manifest=\"$tmp.manifest\";" -e '
+       open MANIFEST, $manifest;
+       @in = <MANIFEST>;
+       close MANIFEST;
+       open MANIFEST, ">$manifest";
+       for ($i = 0; $i < @in; $i++) {
+           if (($i+1) % 2 == 0) {
+               # remove every second file
+               chomp($s = $in[$i]);
+               if (unlink($s) != 1) {
+                   print "_cull_files: could not delete \"$s\"\n";
+                   exit(1);
+               }
+           }
+           else {
+               print MANIFEST $in[$i];
+           }
+       }
+       close MANIFEST;'
+}
+
+_do()
+{
+    if [ $# -ne 1 ]; then echo "Usage: _do \"cmd\"" 1>&2 ; exit 1; fi
+    echo "*** $1" >>$seq.full
+    eval "$1 >>$seq.full 2>&1"
+}
+
+
+# create a large contiguous file using dd
+# use fill2fs to fill the filesystem up with 4k sized files
+# fill any remaining space using dd
+# delete every second 4k file - remaining free space should be fragmented
+# use fill2 to generate a very large file - run it until it fails producing a truncated file
+# delete the dd-generated file
+# run fsr.xfs on the filesystem
+# check checksums for remaining files
+
+# create 3 minimum sized (16Mb) allocation groups
+# xfs_repair is going to need three to verify the superblock
+rm -f $seq.full
+echo -n "Make a 48 megabyte filesystem on SCRATCH_DEV and mount... "
+_do "mkfs -t xfs -d size=48m,agcount=3 -l internal -f $SCRATCH_DEV"
+_do "mount -t xfs $SCRATCH_DEV $SCRATCH_MNT"
+echo "done"
+echo -n "Reserve 16 1Mb unfragmented regions... "
+for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+do
+    _do "dd if=/dev/zero of=$SCRATCH_MNT/hole$i bs=4096 count=256"
+    _do "dd if=/dev/zero of=$SCRATCH_MNT/space$i bs=4096 count=1"
+    _do "xfs_bmap $SCRATCH_MNT/hole$i"
+done
+echo "done" 
+echo -n "Fill filesystem with 4k files, generate manifest... "
+_do "(src/fill2fs --verbose --dir=$SCRATCH_MNT/fill --seed=0 --filesize=4096 --stddev=0 --list=$tmp.manifest)"
+echo "done"
+echo -n "Use up any further available space using dd... "
+_do "dd if=/dev/zero of=$SCRATCH_MNT/pad bs=4096"
+echo "done"
+echo -n "Delete every second file... "
+if ! _do "_cull_files"; then
+    echo "fail"
+    echo "Could not cull files. Test failed see $seq.full"
+    status=1; exit
+fi
+echo "done"
+echo -n "Create one very large file... "
+_do "src/fill2 -d nbytes=16000000,file=$SCRATCH_MNT/fragmented"
+echo "done"
+_do "xfs_bmap $SCRATCH_MNT/fragmented"
+_do "(sum $SCRATCH_MNT/fragmented >$tmp.sum1)"
+echo -n "Remove other files... "
+_do "rm -rf $SCRATCH_MNT/{pad,hole*}"
+echo "done"
+
+# flush everything
+_do "umount $SCRATCH_MNT"
+_do "mount -t xfs $SCRATCH_DEV $SCRATCH_MNT"
+
+echo -n "Run fsr.xfs on filesystem... "
+_do "fsr.xfs -v $SCRATCH_DEV"
+echo "done"
+_do "xfs_bmap $SCRATCH_MNT/fragmented"
+
+echo -n "Check 4k files... "
+if ! _do "src/fill2fs_check $tmp.manifest"; then
+    echo "fail"
+    echo "4k file is corrupt/missing after fsr. Test failed see $seq.full"
+    status=1; exit
+fi
+echo "done"
+echo -n "Check large file... "
+_do "(sum $SCRATCH_MNT/fragmented >$tmp.sum2)"
+if ! diff $tmp.sum1 $tmp.sum2; then
+    echo "fail"
+    echo "File is corrupt/missing after fsr. Test failed see $seq.full"
+    status=1; exit
+fi
+echo "done"
+
+echo -n "Checking filesystem... "
+_check_fs $SCRATCH_DEV
+echo "done"
+# success, all done
+echo "fsr.xfs tests passed."
+status=0 ; exit
diff --git a/042.out b/042.out
new file mode 100644 (file)
index 0000000..785d245
--- /dev/null
+++ b/042.out
@@ -0,0 +1,13 @@
+QA output created by 042
+Make a 48 megabyte filesystem on SCRATCH_DEV and mount... done
+Reserve 16 1Mb unfragmented regions... done
+Fill filesystem with 4k files, generate manifest... done
+Use up any further available space using dd... done
+Delete every second file... done
+Create one very large file... done
+Remove other files... done
+Run fsr.xfs on filesystem... done
+Check 4k files... done
+Check large file... done
+Checking filesystem... done
+fsr.xfs tests passed.
diff --git a/043 b/043
new file mode 100755 (executable)
index 0000000..db8aae5
--- /dev/null
+++ b/043
@@ -0,0 +1,69 @@
+#! /bin/sh
+# XFS QA Test No. 043
+# $Id: 1.1 $
+#
+# Test out xfsdump/restore but rmv inventory prior to restore.
+# This checks that the on-disk inventory can be successfully
+# rebuilt from the on-tape inventory.
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_require_tape
+_create_dumpdir_fill
+_erase_hard
+_do_dump_sub
+rm -rf /var/xfsdump/inventory # delete it - let cleanup fix it
+_do_restore
+_diff_compare_sub
+_ls_compare_sub
+
+# success, all done
+status=0
+exit
diff --git a/043.out b/043.out
new file mode 100644 (file)
index 0000000..035aa35
--- /dev/null
+++ b/043.out
@@ -0,0 +1,105 @@
+QA output created by 043
+Put scsi tape driver into variable block size mode
+Creating directory system to dump using src/fill.
+Setup ....................................
+Erasing tape
+Dumping to tape...
+xfsdump  -s DUMP_SUBDIR -f TAPE_DEV -M stress_tape_media -L stress_043 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_043"
+xfsdump: ino map phase 1: parsing subtree selections
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: pruning unneeded subtrees
+xfsdump: ino map phase 4: estimating dump size
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 1 (media 0, file 1)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size 1048576 bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+Rewinding tape
+Restoring from tape...
+xfsrestore  -f TAPE_DEV  -L stress_043 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: searching media for dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: found dump matching specified label:
+xfsrestore: hostname: HOSTNAME
+xfsrestore: mount point: SCRATCH_MNT
+xfsrestore: volume: SCRATCH_DEV
+xfsrestore: session time: TIME
+xfsrestore: level: 0
+xfsrestore: session label: "stress_043"
+xfsrestore: media label: "stress_tape_media"
+xfsrestore: file system id: ID
+xfsrestore: session id: ID
+xfsrestore: media id: ID
+xfsrestore: searching media for directory dump
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: examining media file 1
+xfsrestore: incorporating on-media session inventory into online inventory
+xfsrestore: /var/xfsdump/inventory created
+xfsrestore: using on-media session inventory
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Comparing listing of dump directory with restore directory
+Files TMP.dump_dir and TMP.restore_dir are identical
diff --git a/044 b/044
new file mode 100755 (executable)
index 0000000..014e545
--- /dev/null
+++ b/044
@@ -0,0 +1,171 @@
+#! /bin/sh
+# XFS QA Test No. 041
+# $Id: 1.1 $
+#
+# external log uuid/format tests
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+_require_logdev
+
+_filter_logprint()
+{
+       perl -ne '
+           s/data device: ([\w|\/]+)/data device: DDEV/;
+           s/log device: ([\w|\/]+) daddr: (\d+) length: (\d+)/log device: LDEV daddr: XXX length: XXX/;
+           s/log file: "([\w|\/]+)" daddr: (\d+) length: (\d+)/log device: LDEV daddr: XXX length: XXX/;
+           s/uuid: ([abcdef\d-]+)\s+format: (.+)/uuid: UUID format: FORMAT/;
+           s/skipped (\w+) zeroed blocks/skipped XXX zeroed blocks/;
+           print;
+       '
+}
+
+_check_mount()
+{
+    echo "    *** mount (expect success)"
+    if ! mount -t xfs -o logdev=$SCRATCH_LOGDEV $SCRATCH_DEV $SCRATCH_MNT
+    then
+        echo "        !!! mount failed (expecting success)"
+        status=1
+        exit
+    fi
+
+    echo "    *** umount"
+    if ! umount $SCRATCH_DEV
+    then
+        echo "        !!! umount failed (expecting success)"
+        status=1
+        exit
+    fi
+}
+
+_check_no_mount()
+{
+    echo "    *** mount (expect failure)"
+    if mount -t xfs -o logdev=$SCRATCH_LOGDEV $SCRATCH_DEV $SCRATCH_MNT >$tmp.err 2>&1
+    then
+        cat $tmp.err
+        echo "        !!! mount succeeded (expecting failure)"
+        status=1
+        exit
+    fi
+}
+
+_check_require_logdev()
+{
+    echo "    *** mount without logdev (expect failure)"
+    if mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >$tmp.err 2>&1
+    then
+        cat $tmp.err
+        echo "        !!! mount succeeded (expecting failure)"
+        status=1
+        exit
+    fi
+}
+
+
+
+# real QA test starts here
+# 
+_require_scratch
+
+echo -e -n "\n\r*** XFS QA 044 - expect mount failure messages\n\r\n\r" >/dev/console
+
+echo "*** mkfs"
+mkfs -t xfs -f -l logdev=$SCRATCH_LOGDEV,size=4096b $SCRATCH_DEV | _filter_mkfs 2>/dev/null
+_check_mount
+_check_require_logdev
+
+echo "*** set uuid"
+xfs_db -x $SCRATCH_DEV -l $SCRATCH_LOGDEV -c "uuid 02020202-0202-0202-0202-020202020202" \
+    || _unexpected
+_check_mount
+
+echo "*** zero log"
+$here/src/loggen -z 100 >$SCRATCH_LOGDEV
+_check_mount
+
+echo "*** write clean log"
+$here/src/loggen -u 2 -f 1 -m 1 -z 100 >$SCRATCH_LOGDEV
+_check_mount
+
+echo "*** write clean log (different format)"
+$here/src/loggen -u 2 -f 99 -m 1 -z 100 >$SCRATCH_LOGDEV
+_check_mount
+
+echo "*** write clean log (different uuid)"
+$here/src/loggen -u 7 -m 1 -z 100 >$SCRATCH_LOGDEV
+_check_no_mount
+
+echo "*** write clean log (different uuid & format)"
+$here/src/loggen -u 7 -f 99 -m 1 -z 100 >$SCRATCH_LOGDEV
+_check_no_mount
+
+echo "*** write dirty log"
+$here/src/loggen -u 2 -e 1 -z 100 >$SCRATCH_LOGDEV
+_check_mount
+
+echo "*** write dirty log (different format)"
+$here/src/loggen -u 2 -f 99 -e 1 -z 100 >$SCRATCH_LOGDEV
+_check_no_mount
+
+echo "*** write dirty log (irix style)"
+$here/src/loggen -u 0 -f 0 -e 1 -z 100 >$SCRATCH_LOGDEV
+_check_no_mount
+
+echo "*** write large dirty log"
+$here/src/loggen -u 2 -e 16000 -z 100 >$SCRATCH_LOGDEV
+_check_mount
+
+echo -e -n "\n\r*** XFS QA 044 - done\n\r\n\r" >/dev/console
+
+status=0
+# if error
+exit
diff --git a/044.out b/044.out
new file mode 100644 (file)
index 0000000..6a9db57
--- /dev/null
+++ b/044.out
@@ -0,0 +1,66 @@
+QA output created by 044
+*** mkfs
+meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
+data     = bsize=XXX blocks=XXX, imaxpct=PCT
+         = sunit=XXX swidth=XXX, unwritten=X
+naming   =VERN bsize=XXX
+log      =LDEV bsize=XXX blocks=XXX
+realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX
+    *** mount (expect success)
+    *** umount
+    *** mount without logdev (expect failure)
+*** set uuid
+clearing log and setting uuid
+writing all SBs
+new uuid = 02020202-0202-0202-0202-020202020202
+    *** mount (expect success)
+    *** umount
+*** zero log
+*** loggen
+   *** zero block (1BB) x 100
+    *** mount (expect success)
+    *** umount
+*** write clean log
+*** loggen
+   *** unmount record (2BB) x 1
+   *** zero block (1BB) x 100
+    *** mount (expect success)
+    *** umount
+*** write clean log (different format)
+*** loggen
+   *** unmount record (2BB) x 1
+   *** zero block (1BB) x 100
+    *** mount (expect success)
+    *** umount
+*** write clean log (different uuid)
+*** loggen
+   *** unmount record (2BB) x 1
+   *** zero block (1BB) x 100
+    *** mount (expect failure)
+*** write clean log (different uuid & format)
+*** loggen
+   *** unmount record (2BB) x 1
+   *** zero block (1BB) x 100
+    *** mount (expect failure)
+*** write dirty log
+*** loggen
+   *** empty record (2BB) x 1
+   *** zero block (1BB) x 100
+    *** mount (expect success)
+    *** umount
+*** write dirty log (different format)
+*** loggen
+   *** empty record (2BB) x 1
+   *** zero block (1BB) x 100
+    *** mount (expect failure)
+*** write dirty log (irix style)
+*** loggen
+   *** empty record (2BB) x 1
+   *** zero block (1BB) x 100
+    *** mount (expect failure)
+*** write large dirty log
+*** loggen
+   *** empty record (2BB) x 16000
+   *** zero block (1BB) x 100
+    *** mount (expect success)
+    *** umount
diff --git a/045 b/045
new file mode 100755 (executable)
index 0000000..94334bd
--- /dev/null
+++ b/045
@@ -0,0 +1,97 @@
+#! /bin/sh
+# XFS QA Test No. 045
+# $Id: 1.1 $
+#
+# test mount of two FSes with identical UUID and mount with unknown option
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_get_uuid()
+{
+        xfs_db -r $1 -c "uuid" | $AWK_PROG '
+                /^uuid/ { print $3 }
+        '
+}
+
+# real QA test starts here
+
+_require_scratch
+
+echo "*** get uuid"
+uuid=`_get_uuid $TEST_DEV`
+echo "*** mkfs"
+if ! mkfs -t xfs -f $SCRATCH_DEV >$tmp.out 2>&1
+then
+    cat $tmp.out
+    echo "!!! failed to mkfs on $SCRATCH_DEV"
+    exit
+fi
+
+echo "*** mount fs with bad mount option (expect failure)"
+if mount -t xfs $SCRATCH_DEV $SCRATCH_MNT -o foobar >$tmp.out 2>&1
+then
+    cat $tmp.out
+    echo "!!! mount succeeded (expecting failure)"
+    exit
+fi
+
+echo "*** duplicate uuid"
+xfs_db -x $SCRATCH_DEV -c "uuid $uuid" >/dev/null
+
+echo "*** mount fs with duplicate uuid (expect failure)"
+if mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >$tmp.out 2>&1
+then
+    cat $tmp.out
+    echo "!!! mount succeeded (expecting failure)"
+    exit
+fi
+
+echo "*** ok!"
+# success, all done
+status=0
+exit
diff --git a/045.out b/045.out
new file mode 100644 (file)
index 0000000..708b709
--- /dev/null
+++ b/045.out
@@ -0,0 +1,7 @@
+QA output created by 045
+*** get uuid
+*** mkfs
+*** mount fs with bad mount option (expect failure)
+*** duplicate uuid
+*** mount fs with duplicate uuid (expect failure)
+*** ok!
diff --git a/046 b/046
new file mode 100755 (executable)
index 0000000..3bae089
--- /dev/null
+++ b/046
@@ -0,0 +1,63 @@
+#! /bin/sh
+# XFS QA Test No. 046
+# $Id: 1.1 $
+#
+# check on symlinks permissions
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+_create_dumpdir_symlinks
+_do_dump_file
+_do_restore_file
+_ls_compare_sub
+
+# success, all done
+status=0
+exit
diff --git a/046.out b/046.out
new file mode 100644 (file)
index 0000000..3013664
--- /dev/null
+++ b/046.out
@@ -0,0 +1,38 @@
+QA output created by 046
+Creating directory system of symlinks to dump.
+Setup ....
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L stress_046 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_046"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Restoring from file...
+xfsrestore  -f DUMP_FILE  -L stress_046 RESTORE_DIR
+xfsrestore: version 3.0 - Running single-threaded
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+Comparing listing of dump directory with restore directory
+Files TMP.dump_dir and TMP.restore_dir are identical
diff --git a/047 b/047
new file mode 100755 (executable)
index 0000000..2d0adcc
--- /dev/null
+++ b/047
@@ -0,0 +1,98 @@
+#! /bin/sh
+# XFS QA Test No. 047
+# $Id: 1.1 $
+#
+# invutil with interactive responses
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sherman.melbourne.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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+
+# wipe test dir clean first
+# so dump can be real quick
+_wipe_fs
+
+#
+# Create 5 dumps
+# and on the 3rd dump note the date
+# which we'll use to prune against using xfsinvutil
+#
+i=0
+while [ $i -lt 5 ]; do
+    _do_dump_file -L "session.$i"
+    if [ $i -eq 2 ]; then
+       sleep 1
+       middate=`date '+%m/%d/%Y %T'`
+    fi
+    rm $dump_file
+    sleep 2
+    i=`expr $i + 1`
+done
+
+echo "middate = $middate" >>$seq.full
+
+# Only say No to 1st question to prune
+cat >$tmp.input <<EOF
+N
+Y
+Y
+Y
+Y
+EOF
+
+#
+# Now do the xfsinvutil and
+# look and the inventory before and after
+# to see if it did the job
+#
+_dump_inventory
+_do_invutil <$tmp.input
+_dump_inventory
+
+status=0
+exit
diff --git a/047.out b/047.out
new file mode 100644 (file)
index 0000000..7dd34d5
--- /dev/null
+++ b/047.out
@@ -0,0 +1,347 @@
+QA output created by 047
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.0 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.0"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.1 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.1"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.2 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.2"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.3 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.3"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+Dumping to file...
+xfsdump  -f DUMP_FILE -M stress_tape_media -L session.4 SCRATCH_MNT
+xfsdump: version 3.0 - Running single-threaded
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "session.4"
+xfsdump: ino map phase 1: skipping (no subtrees specified)
+xfsdump: ino map phase 2: constructing initial dump list
+xfsdump: ino map phase 3: skipping (no pruning necessary)
+xfsdump: ino map phase 4: skipping (size estimated in phase 2)
+xfsdump: ino map phase 5: skipping (only one dump stream)
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : 0 bytes
+xfsdump: dump complete: SECS seconds elapsed
+file system 0:
+       fs id: ID
+       session 0:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.0"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 1:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.1"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 2:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.2"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 3:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.3"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 4:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.4"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+Processing file /var/xfsdump/inventory/UUIDstab
+   Found entry for HOSTNAME:SCRATCH_MNT
+      processing index file 
+       /var/xfsdump/inventory/UUID.InvIndex
+         Checking access for
+          /var/xfsdump/inventory/UUID.StObj
+          Mount point match
+            Session 0: HOSTNAME:SCRATCH_MNT
+-------------------------------------------------
+An entry matching the mount point/time is :
+UUID           :       ID
+MOUNT POINT    :       HOSTNAME:SCRATCH_MNT
+DEV PATH       :       HOSTNAME:SCRATCH_DEV
+TIME OF DUMP   :       TIME
+
+Do you want to prune this entry: [y/n] -------------------------------------------------
+
+            Session 1: HOSTNAME:SCRATCH_MNT
+-------------------------------------------------
+An entry matching the mount point/time is :
+UUID           :       ID
+MOUNT POINT    :       HOSTNAME:SCRATCH_MNT
+DEV PATH       :       HOSTNAME:SCRATCH_DEV
+TIME OF DUMP   :       TIME
+
+Do you want to prune this entry: [y/n] -------------------------------------------------
+
+            Session 2: HOSTNAME:SCRATCH_MNT
+-------------------------------------------------
+An entry matching the mount point/time is :
+UUID           :       ID
+MOUNT POINT    :       HOSTNAME:SCRATCH_MNT
+DEV PATH       :       HOSTNAME:SCRATCH_DEV
+TIME OF DUMP   :       TIME
+
+Do you want to prune this entry: [y/n] -------------------------------------------------
+
+            Session 3: HOSTNAME:SCRATCH_MNT
+            Session 4: HOSTNAME:SCRATCH_MNT
+file system 0:
+       fs id: ID
+       session 0:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.0"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 1:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.3"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
+       session 2:
+               mount point:    HOSTNAME:SCRATCH_MNT
+               device:         HOSTNAME:SCRATCH_DEV
+               time: TIME
+               session label:  "session.4"
+               session id: ID
+               level:          0
+               resumed:        NO
+               subtree:        NO
+               streams:        1
+               stream 0:
+                       pathname:       DUMP_FILE
+                       start:          ino 0 offset 0
+                       end:            ino 1 offset 0
+                       interrupted:    NO
+                       media files:    1
+                       media file 0:
+                               mfile index:    0
+                               mfile type:     data
+                               mfile size:     21016
+                               mfile start:    ino 0 offset 0
+                               mfile end:      ino 1 offset 0
+                               media label:    "stress_tape_media"
+                               media id: ID
diff --git a/048 b/048
new file mode 100755 (executable)
index 0000000..eb4c77a
--- /dev/null
+++ b/048
@@ -0,0 +1,60 @@
+#! /bin/sh
+# XFS QA Test No. 048
+# $Id: 1.1 $
+#
+# test return codes from ioctl on bad userspace address
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+
+src/fault $TEST_DIR || exit
+
+# success, all done
+status=0
+exit
diff --git a/048.out b/048.out
new file mode 100644 (file)
index 0000000..e6feb5f
--- /dev/null
+++ b/048.out
@@ -0,0 +1,5 @@
+QA output created by 048
+--- ioctl with bad output address
+   --- got error 14 as expected
+--- ioctl with bad input address
+   --- got error 14 as expected
diff --git a/049 b/049
new file mode 100755 (executable)
index 0000000..40cf8c1
--- /dev/null
+++ b/049
@@ -0,0 +1,148 @@
+#! /bin/sh
+# XFS QA Test No. 049
+# $Id: 1.1 $
+#
+# XFS on loop test
+#
+#-----------------------------------------------------------------------
+# 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
+# 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 rightfullclaim 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=dxm@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+_cleanup()
+{
+    umount $SCRATCH_MNT/test2 > /dev/null 2>&1
+    umount $SCRATCH_MNT/test > /dev/null 2>&1
+    rm -f $tmp.*
+    
+    if [ -w $seq.full ]
+    then
+        echo "--- mounts at end (after cleanup)" >> $seq.full
+        mount >> $seq.full
+    fi
+}
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+trap "_cleanup ; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_log()
+{
+    echo "--- $*"
+    echo "--- $*" >> $seq.full
+}
+
+# real QA test starts here
+
+_require_scratch
+_require_loop
+
+rm -f $seq.full
+
+echo "(dev=$SCRATCH_DEV, mount=$SCRATCH_MNT)" >> $seq.full
+echo "" >> $seq.full
+
+echo "--- mounts" >> $seq.full
+mount >> $seq.full
+
+_log "Create ext2 fs on scratch"
+mkfs -t ext2 $SCRATCH_DEV >> $seq.full 2>&1 \
+    || _fail "!!! failed to mkfs ext2"
+
+_log "Mount ext2 fs on scratch"
+mount -t ext2 $SCRATCH_DEV $SCRATCH_MNT >> $seq.full 2>&1 \
+    || _fail "!!! failed to mount"
+
+_log "Create xfs fs in file on scratch"
+mkfs -t xfs -d file,name=$SCRATCH_MNT/test.xfs,size=20m >> $seq.full 2>&1 \
+    || _fail "!!! failed to mkfs xfs"
+
+_log "Make mount points"
+mkdir $SCRATCH_MNT/test $SCRATCH_MNT/test2 >> $seq.full 2>&1 \
+    || _fail "!!! failed to make mount points"
+
+_log "Mount xfs via loop"
+mount -t xfs -o loop $SCRATCH_MNT/test.xfs $SCRATCH_MNT/test >> $seq.full 2>&1 \
+    || _fail "!!! failed to loop mount xfs"
+
+_log "stress"
+src/fsstress -d $SCRATCH_MNT/test -n 1000 $FSSTRESS_AVOID >> $seq.full 2>&1 \
+    || _fail "!!! stress failed"
+    
+_log "clean"
+rm -rf $SCRATCH_MNT/test/* >> $seq.full 2>&1 \
+    || _fail "!!! clean failed"
+
+_log "create file for ext2 fs"
+dd if=/dev/zero of=$SCRATCH_MNT/test/test.ext2 bs=1024 count=10240 >> $seq.full 2>&1 \
+    || _fail "!!! create file failed"
+    
+_log "Create ext2 fs in file on looped xfs"
+echo y | mkfs -t ext2 $SCRATCH_MNT/test/test.ext2 >> $seq.full 2>&1 \
+    || _fail "!!! failed to mkfs ext2 on xfs"
+
+_log "Mount ext2 on xfs via loop"
+mount -t ext2 -o loop $SCRATCH_MNT/test/test.ext2 $SCRATCH_MNT/test2 >> $seq.full 2>&1 \
+    || _fail "!!! failed to loop mount xfs"
+
+_log "stress ext2 on xfs via loop"
+src/fsstress -d $SCRATCH_MNT/test2 -n 1000 $FSSTRESS_AVOID >> $seq.full 2>&1 \
+    || _fail "!!! stress ext2 failed"   
+
+_log "clean"
+rm -rf $SCRATCH_MNT/test/* >> $seq.full 2>&1 \
+    || _fail "!!! clean failed"
+   
+_log "umount ext2 on xfs"
+umount $SCRATCH_MNT/test2 >> $seq.full 2>&1 \
+    || _fail "!!! umount ext2 failed"
+    
+_log "umount xfs"
+umount $SCRATCH_MNT/test >> $seq.full 2>&1 \
+    || _fail "!!! umount xfs failed"
+    
+echo "--- mounts at end (before cleanup)" >> $seq.full
+mount >> $seq.full
+
+rm -f $seq.full
+# success, all done
+status=0
+exit
diff --git a/049.out b/049.out
new file mode 100644 (file)
index 0000000..cdd4d0a
--- /dev/null
+++ b/049.out
@@ -0,0 +1,15 @@
+QA output created by 049
+--- Create ext2 fs on scratch
+--- Mount ext2 fs on scratch
+--- Create xfs fs in file on scratch
+--- Make mount points
+--- Mount xfs via loop
+--- stress
+--- clean
+--- create file for ext2 fs
+--- Create ext2 fs in file on looped xfs
+--- Mount ext2 on xfs via loop
+--- stress ext2 on xfs via loop
+--- clean
+--- umount ext2 on xfs
+--- umount xfs
diff --git a/050 b/050
new file mode 100755 (executable)
index 0000000..7c7bd33
--- /dev/null
+++ b/050
@@ -0,0 +1,149 @@
+#! /bin/sh
+# XFS QA Test No. 050
+# $Id: 1.1 $
+#
+# Exercises basic XFS quota functionality
+#      MOUNT_OPTIONS env var switches the test type (uid/gid/acct/enfd)
+#      options are:  (-o) usrquota, grpquota, uqnoenforce, gqnoenforce
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=nathans@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.quota
+. ./common.filter
+
+_cleanup()
+{
+    echo; echo "*** unmount"
+    umount $SCRATCH_MNT 2>/dev/null
+    rm -f $tmp.*
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+rm -f $seq.full $seq.out
+
+_require_quota
+_require_scratch
+
+_mymount()
+{
+    umount $SCRATCH_DEV >/dev/null 2>&1
+    mount -t xfs $SCRATCH_DEV $SCRATCH_MNT || _fail "mount failed"
+    chmod ugo+rwx $SCRATCH_MNT
+    quot.xfs $SCRATCH_DEV >>$seq.full 2>&1
+}
+
+# real QA test starts here
+mkfs -t xfs -f $SCRATCH_DEV | _filter_mkfs 2>$tmp.mkfs
+cat $tmp.mkfs >>$seq.full
+chmod a+w $seq.full    # arbitrary users will write here
+
+# keep the blocksize and data size for dd later
+. $tmp.mkfs
+
+_mymount
+
+# setup exactly what it is we'll be testing
+if ! src/feature -q $SCRATCH_DEV
+then
+       _notrun "XFS quota not enabled"
+elif src/feature -u $SCRATCH_DEV
+then
+       type=u ; id=`_choose_uid`; ln -s $seq.usrquota $seq.out
+elif src/feature -g $SCRATCH_DEV
+then
+       type=g ; id=`_choose_gid`; ln -s $seq.grpquota $seq.out
+elif src/feature -U $SCRATCH_DEV
+then
+       type=u ; id=`_choose_uid`; ln -s $seq.uqnoenforce $seq.out
+elif src/feature -G $SCRATCH_DEV
+then
+       type=g ; id=`_choose_gid`; ln -s $seq.gqnoenforce $seq.out
+else
+       _notrun "No quota support at mount time"
+fi
+
+echo "Using output from '" `ls -l $seq.out` "'" >>$seq.full
+echo "and using type=$type id=$id" >>$seq.full
+
+echo
+echo "*** report no quota settings" | tee -a $seq.full
+repquota -m -$type $SCRATCH_DEV | _filter_repquota
+
+echo
+echo "*** report initial settings" | tee -a $seq.full
+setquota -n -$type $id $SCRATCH_DEV 100 500 4 10
+_file_as_id $SCRATCH_MNT/initme $id $type $dbsize 0
+repquota -m -$type $SCRATCH_DEV | _filter_repquota
+
+echo
+echo "*** push past the soft inode limit" | tee -a $seq.full
+_file_as_id $SCRATCH_MNT/softie1 $id $type $dbsize 0
+_file_as_id $SCRATCH_MNT/softie2 $id $type $dbsize 0
+_mymount
+repquota -m -$type $SCRATCH_DEV | _filter_repquota
+
+echo
+echo "*** push past the soft block limit" | tee -a $seq.full
+_file_as_id $SCRATCH_MNT/softie $id $type $dbsize 140
+_mymount
+repquota -m -$type $SCRATCH_DEV | _filter_repquota
+
+echo
+echo "*** push past the hard inode limit (expect EDQUOT)" | tee -a $seq.full
+for i in 1 2 3 4 5 6 7 8 9 10 11 12
+do
+       _file_as_id $SCRATCH_MNT/hard$i $id $type $dbsize 0
+done
+_mymount
+repquota -m -$type $SCRATCH_DEV | _filter_repquota
+
+echo
+echo "*** push past the hard block limit (expect EDQUOT)" | tee -a $seq.full
+_file_as_id $SCRATCH_MNT/softie $id $type $dbsize 540
+_mymount
+repquota -m -$type $SCRATCH_DEV | _filter_repquota
+
+# success, all done
+status=0
+exit
diff --git a/050.uqnoenforce b/050.uqnoenforce
new file mode 100644 (file)
index 0000000..cb211ac
--- /dev/null
@@ -0,0 +1,44 @@
+QA output created by 050
+meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
+data     = bsize=XXX blocks=XXX, imaxpct=PCT
+         = sunit=XXX swidth=XXX, unwritten=X
+naming   =VERN bsize=XXX
+log      =LDEV bsize=XXX blocks=XXX
+realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX
+
+*** report no quota settings
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+
+*** report initial settings
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+[NAME]    --       0     100     500              1     4    10       
+
+*** push past the soft inode limit
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+[NAME]    --       0     100     500              3     4    10       
+
+*** push past the soft block limit
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+[NAME]    ++     140     100     500   none       4     4    10   none
+
+*** push past the hard inode limit (expect EDQUOT)
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       1       0       0              3     0     0       
+[NAME]    ++     140     100     500   none      16     4    10   none
+
+*** push past the hard block limit (expect EDQUOT)
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       1       0       0              3     0     0       
+[NAME]    ++     540     100     500   none      16     4    10   none
+
+*** unmount
diff --git a/050.usrquota b/050.usrquota
new file mode 100644 (file)
index 0000000..fcfd68a
--- /dev/null
@@ -0,0 +1,44 @@
+QA output created by 050
+meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
+data     = bsize=XXX blocks=XXX, imaxpct=PCT
+         = sunit=XXX swidth=XXX, unwritten=X
+naming   =VERN bsize=XXX
+log      =LDEV bsize=XXX blocks=XXX
+realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX
+
+*** report no quota settings
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+
+*** report initial settings
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+[NAME]    --       0     100     500              1     4    10       
+
+*** push past the soft inode limit
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+[NAME]    --       0     100     500              3     4    10       
+
+*** push past the soft block limit
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+[NAME]    ++     140     100     500 7 days       4     4    10 7 days
+
+*** push past the hard inode limit (expect EDQUOT)
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+[NAME]    ++     140     100     500 7 days      10     4    10 7 days
+
+*** push past the hard block limit (expect EDQUOT)
+                        Block limits               File limits
+user            used    soft    hard  grace    used  soft  hard  grace
+[NAME]    --       0       0       0              3     0     0       
+[NAME]    ++     496     100     500 7 days      10     4    10 7 days
+
+*** unmount
diff --git a/051 b/051
new file mode 100755 (executable)
index 0000000..8b2796f
--- /dev/null
+++ b/051
@@ -0,0 +1,262 @@
+#! /bin/sh
+# XFS QA Test No. 051
+# $Id: 1.1 $
+#
+# Test out ACLs.
+#
+#-----------------------------------------------------------------------
+# 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
+# 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/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+runas=$here/src/runas
+status=1       # FAILure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_cleanup()
+{
+    rm -f $tmp.*
+    rm -rf $TEST_DIR/$seq.dir1
+}
+
+_ls()
+{
+    ls -ln $* | awk '{ print $1, $3, $4, $NF }'
+} 
+
+# -----
+# minimal access ACL has ACEs: USER_OBJ, GROUP_OBJ, OTHER_OBJ
+# This is set with chacl(1) and can be changed by chmod(1).
+#
+# Test that this is being set for ACL and for std unix permissions
+# Test that we can get back the same ACL.
+# Test std permissions for rwx.
+# -----
+#
+# Test out default ACLs and that the ACL is being PASSed
+# onto the children of the dir.
+#
+# -----
+# Test out access check for extended ACLs.
+# -> 3 extra ACEs: MASK, GROUP, USER
+# -> the GROUP compares with egid of process _and_ the supplementary
+#    groups (as found in /etc/group)
+#
+# Test that mask works for USER, GROUP, GROUP_OBJ
+# Test that the ACE type priority is working
+#   -> this would be done by simultaneously matching on ACEs
+#   -> interesting if it allows user to specify ACEs in any order
+#
+
+acl1=1001;acl2=1002;acl3=1003
+
+[ -x /bin/chacl ] || _notrun "chacl command not found"
+[ -x $runas ] || _notrun "$runas executable not found"
+
+# get dir
+cd $TEST_DIR
+rm -rf $seq.dir1
+mkdir $seq.dir1
+cd $seq.dir1
+
+#-------------------------------------------------------
+# real QA test starts here
+
+echo ""
+echo "=== Test minimal ACE ==="
+
+echo "Setup file"
+touch file1
+cat <<EOF >file1
+#!/bin/sh
+echo "Test was executed"
+EOF
+chmod u=rwx file1
+chmod g=rw- file1
+chmod o=r-- file1
+chown $acl1.$acl2 file1
+_ls file1
+
+echo ""
+echo "--- Test get and set of ACL ---"
+chacl -l file1
+echo "Expect to FAIL" 
+chacl u::r--,g::rwx,o:rw- file1 2>&1
+echo "Expect to PASS" 
+chacl u::r--,g::rwx,o::rw- file1 2>&1
+chacl -l file1
+
+echo ""
+echo "--- Test sync of ACL with std permissions ---"
+_ls file1
+chmod u+w file1
+_ls file1
+chacl -l file1
+
+echo ""