Prevent test 016 from running if mkfs options create an unworkable log for its purposes.
[xfstests-dev.git] / 016
diff --git a/016 b/016
index 400c4cdafd34a4596cf0d387d6ff7c6a904dc02f..6f79d6d4aed77a218ac259be36c7b0989afabdfe 100755 (executable)
--- a/016
+++ b/016
@@ -1,39 +1,10 @@
 #! /bin/sh
-# XFS QA Test No. 016
-# $Id: 1.1 $
+# FS QA Test No. 016
 #
 # 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/
+# Copyright (c) 2000-2003 Silicon Graphics, Inc.  All Rights Reserved.
 #-----------------------------------------------------------------------
 #
 # creator
@@ -46,7 +17,7 @@ owner=dxm@sgi.com
 # 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 : 
+# 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
@@ -63,6 +34,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
 
 _cleanup()
 {
+    cd /
+    rm -f $tmp.*
     echo "*** unmount"
     umount $SCRATCH_MNT 2>/dev/null
 }
@@ -77,23 +50,26 @@ _init()
     echo "*** reset partition"
     $here/src/devzero -b 2048 -n 50 -v 198 $SCRATCH_DEV
     echo "*** mkfs"
-    if ! mkfs_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
+    force_opts="-dsize=50m -lsize=2097152"
+    echo mkfs_xfs $force_opts $SCRATCH_DEV >>$seq.full
+    _scratch_mkfs_xfs $force_opts >$tmp.mkfs0 2>&1
+    [ $? -ne 0 ] && \
+        _notrun "Cannot mkfs for this test using MKFS_OPTIONS specified"
+    _filter_mkfs <$tmp.mkfs0 >/dev/null 2>$tmp.mkfs
+    . $tmp.mkfs
+    [ $logsunit -ne 0 ] && \
+        _notrun "Cannot run this test using log MKFS_OPTIONS specified"
 }
 
 _log_traffic()
 {
     count=$1
     echo "*** generate log traffic"
-    
+
     out=$SCRATCH_MNT/$$.tmp
-    
+
     echo "   *** mount"
-    if ! mount $SCRATCH_DEV $SCRATCH_MNT -t xfs
+    if ! _scratch_mount
     then
         echo "failed to mount $SCRATCH_DEV"
         exit 1
@@ -101,18 +77,20 @@ _log_traffic()
 
     # having any quota enabled (acct/enfd) means extra log traffic - evil!
     $here/src/feature -U $SCRATCH_DEV && \
-               _notrun "Quota are enabled, test needs controlled log traffic"
+               _notrun "UQuota are enabled, test needs controlled log traffic"
     $here/src/feature -G $SCRATCH_DEV && \
-               _notrun "Quota are enabled, test needs controlled log traffic"
+               _notrun "GQuota are enabled, test needs controlled log traffic"
+    $here/src/feature -P $SCRATCH_DEV && \
+               _notrun "PQuota are enabled, test needs controlled log traffic"
+
     echo "   *** fiddle"
     while [ $count -ge 0 ]
     do
-        touch $out 
+        touch $out
         rm $out
         let "count = count - 1"
     done
-    
+
     echo "   *** unmount"
     if ! umount $SCRATCH_DEV
     then
@@ -123,18 +101,30 @@ _log_traffic()
 
 _log_size()
 {
-    xfs_logprint -tb $SCRATCH_DEV | $AWK_PROG '
-        /log device/ {  print $7}
+    _scratch_xfs_logprint -tb | $AWK_PROG '
+        /log file: / || /log device: / { print $7}
     '
 }
 
 _log_head()
 {
-    xfs_logprint -tb $SCRATCH_DEV | $AWK_PROG '
+    _scratch_xfs_logprint -tb | $AWK_PROG '
         /head:/ { print $5 }
     '
 }
 
+# Get log stripe unit for v2 logs; if none specified,
+# (or v1 log) just return "1" block
+
+_log_sunit()
+{
+    if [ ${lsunit:-0} -eq 0 ]; then
+        echo $dbsize
+    else
+        expr $lsunit \* $dbsize
+    fi
+}
+
 _after_log()
 {
     xfs_db -r $1 -c "sb" -c "print" | $AWK_PROG '
@@ -151,7 +141,7 @@ _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 | \
+    xfs_db -r -c "fsblock $2" -c "print" $1 | head | tee -a $seq.full | \
         grep -q -v "$f $f $f $f $f $f $f $f" && \
             _fail "!!! block $2 corrupted!"
 }
@@ -161,6 +151,8 @@ _check_corrupt()
 . ./common.filter
 
 # real QA test starts here
+_supported_fs xfs
+_supported_os Linux
 
 rm -f $seq.full
 
@@ -175,11 +167,13 @@ size=`_log_size`
 echo "log size = $size BB"                      >>$seq.full
 head=`_log_head`
 echo "log position = $head"                     >>$seq.full
+lsunit=`_log_sunit`
+echo "log sunit = $lsunit"                     >>$seq.full
 
 [ $size -eq 4096 ] || \
     _fail "!!! unexpected log size $size"
-[ $head -eq 2 ] || \
-    _fail "!!! unexpected initial log position $head"
+[ $head -eq 2 -o $head -eq $((lsunit/512)) ] || \
+    _fail "!!! unexpected initial log position $head vs. $((lsunit/512))"
 
 echo "    lots of traffic"                      >>$seq.full
 _log_traffic 850
@@ -201,8 +195,6 @@ done
 [ $head -lt 1000 ] || \
     _fail "!!! unexpected log position $head"
 
-
-# happy exit
-rm $seq.full
+# success, all done
 status=0
-exit 0
+exit