From f1d5abef998639fef52d5d476f1422b2a49aded0 Mon Sep 17 00:00:00 2001 From: Nathan Scott Date: Wed, 12 Jan 2005 13:53:32 +0000 Subject: [PATCH] Add a repeated-growfs-while-fsstressing test to catch deadlocks. Merge of master-melb:xfs-cmds:21095a by kenmcd. --- 104 | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 104.out | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ group | 1 + 3 files changed, 256 insertions(+) create mode 100644 104 create mode 100644 104.out diff --git a/104 b/104 new file mode 100644 index 00000000..54374c32 --- /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 index 00000000..f237e5e9 --- /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 78faa0e4..e0596d48 100644 --- 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 -- 2.47.3