Add a repeated-growfs-while-fsstressing test to catch deadlocks.
authorNathan Scott <nathans@sgi.com>
Wed, 12 Jan 2005 13:53:32 +0000 (13:53 +0000)
committerNathan Scott <nathans@sgi.com>
Wed, 12 Jan 2005 13:53:32 +0000 (13:53 +0000)
Merge of master-melb:xfs-cmds:21095a by kenmcd.

104 [new file with mode: 0644]
104.out [new file with mode: 0644]
group

diff --git a/104 b/104
new file mode 100644 (file)
index 0000000..54374c3
--- /dev/null
+++ b/104
@@ -0,0 +1,128 @@
+#! /bin/sh
+# FS QA Test No. 104
+#
+# XFS online growfs-while-allocating tests (data subvol variant)
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2000-2004 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
+
+_create_scratch()
+{
+       echo "*** mkfs"
+       _scratch_mkfs_xfs $@ | tee -a $seq.full | _filter_mkfs 2>$tmp.mkfs
+       . $tmp.mkfs
+
+       echo "*** mount"
+       if ! _scratch_mount 2>/dev/null
+       then
+               echo "failed to mount $SCRATCH_DEV"
+               exit 1
+       fi
+}
+_fill_scratch()
+{
+       xfs_io -f -c "resvsp 0 ${1}" $SCRATCH_MNT/resvfile
+}
+
+_stress_scratch()
+{
+       procs=3
+       nops=1000
+       # -w ensures that the only ops are ones which cause write I/O
+       ltp/fsstress -d $SCRATCH_MNT -w -p $procs -n $nops $FSSTRESS_AVOID &
+}
+
+# real QA test starts here
+_supported_fs xfs
+_require_scratch
+_scratch_mkfs_xfs | tee -a $seq.full | _filter_mkfs 2>$tmp.mkfs
+. $tmp.mkfs    # extract blocksize and data size for scratch device
+
+endsize=`expr 550 \* 1048576`  # stop after growing this big
+incsize=`expr  42 \* 1048576`  # grow in chunks of this size
+modsize=`expr   4 \* $incsize` # pause after this many increments
+
+[ `expr $endsize / $dbsize` -lt $dblocks ] || _notrun "Scratch device too small"
+
+nags=4
+size=`expr 120 \* 1048576`     # 120 megabytes initially
+sizeb=`expr $size / $dbsize`   # in data blocks
+echo "*** creating scratch filesystem"
+_create_scratch -dsize=${size} -dagcount=${nags}
+
+fillsize=`expr 110 \* 1048576` # 110 megabytes of filling
+echo "*** using some initial space on scratch filesystem"
+_fill_scratch $fillsize
+
+# 
+# Grow the filesystem while actively stressing it...
+# Kick off more stress threads on each iteration, grow; repeat.
+# 
+while [ $size -le $endsize ]; do
+       echo "*** stressing a ${size} byte filesystem"
+       echo "*** stressing a ${sizeb} block filesystem" >> $seq.full
+       _stress_scratch
+       sleep 1
+       size=`expr $size + $incsize`
+       sizeb=`expr $size / $dbsize`    # in data blocks
+       echo "*** growing to a ${size} byte filesystem"
+       echo "*** growing to a ${sizeb} block filesystem" >> $seq.full
+       xfs_growfs -D ${sizeb} $SCRATCH_MNT \
+               | tee -a $seq.full | _filter_mkfs 2>$tmp.growfs
+       . $tmp.growfs
+       [ `expr $size % $modsize` -eq 0 ] && wait       # every 4th iteration
+       echo AGCOUNT=$agcount | tee -a $seq.full
+       echo && echo >> $seq.full
+done
+wait   # stop for any remaining stress processes
+
+umount $SCRATCH_DEV
+_check_scratch_fs
+
+status=0
+exit
diff --git a/104.out b/104.out
new file mode 100644 (file)
index 0000000..f237e5e
--- /dev/null
+++ b/104.out
@@ -0,0 +1,127 @@
+QA output created by 104
+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
+*** creating scratch filesystem
+*** 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
+*** using some initial space on scratch filesystem
+*** stressing a 125829120 byte filesystem
+*** growing to a 169869312 byte filesystem
+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
+AGCOUNT=4
+
+*** stressing a 169869312 byte filesystem
+*** growing to a 213909504 byte filesystem
+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
+AGCOUNT=6
+
+*** stressing a 213909504 byte filesystem
+*** growing to a 257949696 byte filesystem
+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
+AGCOUNT=7
+
+*** stressing a 257949696 byte filesystem
+*** growing to a 301989888 byte filesystem
+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
+AGCOUNT=9
+
+*** stressing a 301989888 byte filesystem
+*** growing to a 346030080 byte filesystem
+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
+AGCOUNT=10
+
+*** stressing a 346030080 byte filesystem
+*** growing to a 390070272 byte filesystem
+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
+AGCOUNT=11
+
+*** stressing a 390070272 byte filesystem
+*** growing to a 434110464 byte filesystem
+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
+AGCOUNT=13
+
+*** stressing a 434110464 byte filesystem
+*** growing to a 478150656 byte filesystem
+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
+AGCOUNT=14
+
+*** stressing a 478150656 byte filesystem
+*** growing to a 522190848 byte filesystem
+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
+AGCOUNT=16
+
+*** stressing a 522190848 byte filesystem
+*** growing to a 566231040 byte filesystem
+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
+AGCOUNT=17
+
+*** stressing a 566231040 byte filesystem
+*** growing to a 610271232 byte filesystem
+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
+AGCOUNT=18
+
diff --git a/group b/group
index 78faa0e4d617295cf406d98dd60c75d6fb0d605c..e0596d485207e2f6182de72d8935b22a327f006d 100644 (file)
--- a/group
+++ b/group
@@ -177,3 +177,4 @@ udf         ajones@sgi.com
 101 udf auto
 102 udf auto
 103 metadata dir ioctl auto
+104 growfs ioctl