1*49cdfc7eSAndroid Build Coastguard Worker#!/bin/bash 2*49cdfc7eSAndroid Build Coastguard Worker 3*49cdfc7eSAndroid Build Coastguard Worker# Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. 4*49cdfc7eSAndroid Build Coastguard Worker# 5*49cdfc7eSAndroid Build Coastguard Worker# This program is free software; you can redistribute it and/or modify it 6*49cdfc7eSAndroid Build Coastguard Worker# under the terms of version 2 of the GNU General Public License as 7*49cdfc7eSAndroid Build Coastguard Worker# published by the Free Software Foundation. 8*49cdfc7eSAndroid Build Coastguard Worker# 9*49cdfc7eSAndroid Build Coastguard Worker# This program is distributed in the hope that it would be useful, but 10*49cdfc7eSAndroid Build Coastguard Worker# WITHOUT ANY WARRANTY; without even the implied warranty of 11*49cdfc7eSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12*49cdfc7eSAndroid Build Coastguard Worker# 13*49cdfc7eSAndroid Build Coastguard Worker# Further, this software is distributed without any warranty that it is 14*49cdfc7eSAndroid Build Coastguard Worker# free of the rightful claim of any third person regarding infringement 15*49cdfc7eSAndroid Build Coastguard Worker# or the like. Any license provided herein, whether implied or 16*49cdfc7eSAndroid Build Coastguard Worker# otherwise, applies only to this software file. Patent licenses, if 17*49cdfc7eSAndroid Build Coastguard Worker# any, provided herein do not apply to combinations of this program with 18*49cdfc7eSAndroid Build Coastguard Worker# other software, or any other product whatsoever. 19*49cdfc7eSAndroid Build Coastguard Worker# 20*49cdfc7eSAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License along 21*49cdfc7eSAndroid Build Coastguard Worker# with this program; if not, write the Free Software Foundation, Inc., 22*49cdfc7eSAndroid Build Coastguard Worker# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 23*49cdfc7eSAndroid Build Coastguard Worker# 24*49cdfc7eSAndroid Build Coastguard Worker# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, 25*49cdfc7eSAndroid Build Coastguard Worker# Mountain View, CA 94043, or: 26*49cdfc7eSAndroid Build Coastguard Worker# 27*49cdfc7eSAndroid Build Coastguard Worker# http://www.sgi.com 28*49cdfc7eSAndroid Build Coastguard Worker# 29*49cdfc7eSAndroid Build Coastguard Worker# For further information regarding this notice, see: 30*49cdfc7eSAndroid Build Coastguard Worker# 31*49cdfc7eSAndroid Build Coastguard Worker# http://oss.sgi.com/projects/GenInfo/NoticeExplan/ 32*49cdfc7eSAndroid Build Coastguard Worker 33*49cdfc7eSAndroid Build Coastguard Worker# 34*49cdfc7eSAndroid Build Coastguard Worker# rwtest - a shell wrapper around iogen and doio 35*49cdfc7eSAndroid Build Coastguard Worker# 36*49cdfc7eSAndroid Build Coastguard Worker 37*49cdfc7eSAndroid Build Coastguard Workertrap "exit 0" INT # Until the smarter signal handler is engaged, below. 38*49cdfc7eSAndroid Build Coastguard Worker 39*49cdfc7eSAndroid Build Coastguard WorkerProg=${0##*/} 40*49cdfc7eSAndroid Build Coastguard Worker 41*49cdfc7eSAndroid Build Coastguard WorkeriOpts="" 42*49cdfc7eSAndroid Build Coastguard WorkerdOpts="" 43*49cdfc7eSAndroid Build Coastguard WorkerLockRegion="" 44*49cdfc7eSAndroid Build Coastguard WorkerNprocs=1 45*49cdfc7eSAndroid Build Coastguard WorkerFiles="" 46*49cdfc7eSAndroid Build Coastguard WorkerRemove_Test_Files="" 47*49cdfc7eSAndroid Build Coastguard WorkerFiles_To_Remove="" 48*49cdfc7eSAndroid Build Coastguard WorkerMPPrun="" 49*49cdfc7eSAndroid Build Coastguard Workerexport TCID="rwtest" 50*49cdfc7eSAndroid Build Coastguard Workerexport TST_TOTAL=1 51*49cdfc7eSAndroid Build Coastguard Workerexport TST_COUNT=1 52*49cdfc7eSAndroid Build Coastguard Worker 53*49cdfc7eSAndroid Build Coastguard Workerusage() 54*49cdfc7eSAndroid Build Coastguard Worker{ 55*49cdfc7eSAndroid Build Coastguard Worker echo "$Prog: [-chq] [-N name] [ iogen options ] [ doio options ] files" >&2 56*49cdfc7eSAndroid Build Coastguard Worker} 57*49cdfc7eSAndroid Build Coastguard Worker 58*49cdfc7eSAndroid Build Coastguard Workerhelp() 59*49cdfc7eSAndroid Build Coastguard Worker{ 60*49cdfc7eSAndroid Build Coastguard Worker echo "\ 61*49cdfc7eSAndroid Build Coastguard Worker -c Cleanup test files created by this invocation on exit. 62*49cdfc7eSAndroid Build Coastguard Worker Default is to leave them. 63*49cdfc7eSAndroid Build Coastguard Worker -h This help - ignore all other options/arguments 64*49cdfc7eSAndroid Build Coastguard Worker -F Only process filenames - does not run iogen & doio. 65*49cdfc7eSAndroid Build Coastguard Worker -P Places Not used 66*49cdfc7eSAndroid Build Coastguard Worker -S Scenario Execute an internal scenario. 67*49cdfc7eSAndroid Build Coastguard Worker -N Name Pan-style name to be printed with error messages. 68*49cdfc7eSAndroid Build Coastguard Worker 69*49cdfc7eSAndroid Build Coastguard Worker Options passed through to iogen: 70*49cdfc7eSAndroid Build Coastguard Worker -[afiLmOstT] arg 71*49cdfc7eSAndroid Build Coastguard Worker -o 72*49cdfc7eSAndroid Build Coastguard Worker -q Set rwtest to be quiet and pass the flag on to iogen. 73*49cdfc7eSAndroid Build Coastguard Worker 74*49cdfc7eSAndroid Build Coastguard Worker Options passed through to doio: 75*49cdfc7eSAndroid Build Coastguard Worker -D[rmMVUC] arg 76*49cdfc7eSAndroid Build Coastguard Worker -D[aekv] 77*49cdfc7eSAndroid Build Coastguard Worker -n nprocs # procs to do simultanious io to the test files. 78*49cdfc7eSAndroid Build Coastguard Worker Default is 1. If -n is non-zero, doio's -k option (use 79*49cdfc7eSAndroid Build Coastguard Worker file locking) is forced. 80*49cdfc7eSAndroid Build Coastguard Worker 81*49cdfc7eSAndroid Build Coastguard Worker files Files to test on. File names have the following format: 82*49cdfc7eSAndroid Build Coastguard Worker [ size: ] path 83*49cdfc7eSAndroid Build Coastguard Worker [ free% [ max size ] : ] path 84*49cdfc7eSAndroid Build Coastguard Worker If no size is specified, the files must exist 85*49cdfc7eSAndroid Build Coastguard Worker and the contents will be overwritten if testing write or 86*49cdfc7eSAndroid Build Coastguard Worker writea system calls. If a size is supplied, an attempt to 87*49cdfc7eSAndroid Build Coastguard Worker create/grow/shrink path to the desired size will be made. 88*49cdfc7eSAndroid Build Coastguard Worker size is an integer which defaults to bytes, but may be 89*49cdfc7eSAndroid Build Coastguard Worker suffixed by 'b', 'k', or 'm' for blocks (4096 byte units), 90*49cdfc7eSAndroid Build Coastguard Worker kilobytes (1024 byte units), or megabytes (2^20 byte units). 91*49cdfc7eSAndroid Build Coastguard Worker 92*49cdfc7eSAndroid Build Coastguard Worker If the size is a percentage, df is used to find how much 93*49cdfc7eSAndroid Build Coastguard Worker free space there is (in blocks), and uses that. The maximum 94*49cdfc7eSAndroid Build Coastguard Worker size is implied to be in blocks. 95*49cdfc7eSAndroid Build Coastguard Worker" >&2 96*49cdfc7eSAndroid Build Coastguard Worker} 97*49cdfc7eSAndroid Build Coastguard Worker 98*49cdfc7eSAndroid Build Coastguard Workerkillkids() 99*49cdfc7eSAndroid Build Coastguard Worker{ 100*49cdfc7eSAndroid Build Coastguard Worker trap "killkids" INT 101*49cdfc7eSAndroid Build Coastguard Worker if [[ -z $didkids ]] 102*49cdfc7eSAndroid Build Coastguard Worker then 103*49cdfc7eSAndroid Build Coastguard Worker didkids=done 104*49cdfc7eSAndroid Build Coastguard Worker kill -INT -$$ 105*49cdfc7eSAndroid Build Coastguard Worker fi 106*49cdfc7eSAndroid Build Coastguard Worker} 107*49cdfc7eSAndroid Build Coastguard Worker 108*49cdfc7eSAndroid Build Coastguard Worker 109*49cdfc7eSAndroid Build Coastguard Workercleanup_and_exit() 110*49cdfc7eSAndroid Build Coastguard Worker{ 111*49cdfc7eSAndroid Build Coastguard Worker if [ -n "$Remove_Test_Files" ] 112*49cdfc7eSAndroid Build Coastguard Worker then 113*49cdfc7eSAndroid Build Coastguard Worker if [ -n "$Files_To_Remove" ] 114*49cdfc7eSAndroid Build Coastguard Worker then 115*49cdfc7eSAndroid Build Coastguard Worker rm -rf $Files_To_Remove 116*49cdfc7eSAndroid Build Coastguard Worker fi 117*49cdfc7eSAndroid Build Coastguard Worker fi 118*49cdfc7eSAndroid Build Coastguard Worker 119*49cdfc7eSAndroid Build Coastguard Worker if [ $1 -ne 0 ] 120*49cdfc7eSAndroid Build Coastguard Worker then 121*49cdfc7eSAndroid Build Coastguard Worker tst_resm TFAIL "Test failed" 122*49cdfc7eSAndroid Build Coastguard Worker echo "Test failed" 123*49cdfc7eSAndroid Build Coastguard Worker else 124*49cdfc7eSAndroid Build Coastguard Worker tst_resm TPASS "Test passed" 125*49cdfc7eSAndroid Build Coastguard Worker echo "Test passed" 126*49cdfc7eSAndroid Build Coastguard Worker fi 127*49cdfc7eSAndroid Build Coastguard Worker 128*49cdfc7eSAndroid Build Coastguard Worker exit $1 129*49cdfc7eSAndroid Build Coastguard Worker} 130*49cdfc7eSAndroid Build Coastguard Worker 131*49cdfc7eSAndroid Build Coastguard Workerwhile (( $# > 0 )) 132*49cdfc7eSAndroid Build Coastguard Workerdo case $1 in 133*49cdfc7eSAndroid Build Coastguard Worker -c) Remove_Test_Files=yes 134*49cdfc7eSAndroid Build Coastguard Worker ;; 135*49cdfc7eSAndroid Build Coastguard Worker 136*49cdfc7eSAndroid Build Coastguard Worker -d) debug=$2 137*49cdfc7eSAndroid Build Coastguard Worker shift 138*49cdfc7eSAndroid Build Coastguard Worker ;; 139*49cdfc7eSAndroid Build Coastguard Worker 140*49cdfc7eSAndroid Build Coastguard Worker -h) help 141*49cdfc7eSAndroid Build Coastguard Worker exit 0 142*49cdfc7eSAndroid Build Coastguard Worker ;; 143*49cdfc7eSAndroid Build Coastguard Worker 144*49cdfc7eSAndroid Build Coastguard Worker -F) 145*49cdfc7eSAndroid Build Coastguard Worker opt_F="-F" # only process filenames 146*49cdfc7eSAndroid Build Coastguard Worker ;; 147*49cdfc7eSAndroid Build Coastguard Worker 148*49cdfc7eSAndroid Build Coastguard Worker -P) 149*49cdfc7eSAndroid Build Coastguard Worker PLACES=$2 150*49cdfc7eSAndroid Build Coastguard Worker shift 151*49cdfc7eSAndroid Build Coastguard Worker ;; 152*49cdfc7eSAndroid Build Coastguard Worker 153*49cdfc7eSAndroid Build Coastguard Worker -S) Scenario=$2 154*49cdfc7eSAndroid Build Coastguard Worker shift 155*49cdfc7eSAndroid Build Coastguard Worker opt_S="-S" 156*49cdfc7eSAndroid Build Coastguard Worker ;; 157*49cdfc7eSAndroid Build Coastguard Worker 158*49cdfc7eSAndroid Build Coastguard Worker -N) Name="($2)" 159*49cdfc7eSAndroid Build Coastguard Worker TCID=$2 160*49cdfc7eSAndroid Build Coastguard Worker iOpts="$iOpts -N $2" 161*49cdfc7eSAndroid Build Coastguard Worker dOpts="$dOpts -N $2" 162*49cdfc7eSAndroid Build Coastguard Worker shift 163*49cdfc7eSAndroid Build Coastguard Worker ;; 164*49cdfc7eSAndroid Build Coastguard Worker 165*49cdfc7eSAndroid Build Coastguard Worker # iogen Options to pass thru ... options with an argument 166*49cdfc7eSAndroid Build Coastguard Worker -[afiLmOstT] ) 167*49cdfc7eSAndroid Build Coastguard Worker iOpts="$iOpts $1 $2" 168*49cdfc7eSAndroid Build Coastguard Worker shift 169*49cdfc7eSAndroid Build Coastguard Worker ;; 170*49cdfc7eSAndroid Build Coastguard Worker 171*49cdfc7eSAndroid Build Coastguard Worker # iogen Options to pass thru ... just the option 172*49cdfc7eSAndroid Build Coastguard Worker -[o] ) 173*49cdfc7eSAndroid Build Coastguard Worker iOpts="$iOpts $1" 174*49cdfc7eSAndroid Build Coastguard Worker ;; 175*49cdfc7eSAndroid Build Coastguard Worker 176*49cdfc7eSAndroid Build Coastguard Worker # iogen options to look at 177*49cdfc7eSAndroid Build Coastguard Worker -q) 178*49cdfc7eSAndroid Build Coastguard Worker iOpts="$iOpts $1" 179*49cdfc7eSAndroid Build Coastguard Worker Quiet=$1 180*49cdfc7eSAndroid Build Coastguard Worker ;; 181*49cdfc7eSAndroid Build Coastguard Worker 182*49cdfc7eSAndroid Build Coastguard Worker # doio Options to pass thru ... options with an argument 183*49cdfc7eSAndroid Build Coastguard Worker -D[rmMVUC] ) 184*49cdfc7eSAndroid Build Coastguard Worker o=${1#-D} 185*49cdfc7eSAndroid Build Coastguard Worker dOpts="$dOpts -$o $2" 186*49cdfc7eSAndroid Build Coastguard Worker shift 187*49cdfc7eSAndroid Build Coastguard Worker ;; 188*49cdfc7eSAndroid Build Coastguard Worker 189*49cdfc7eSAndroid Build Coastguard Worker # doio options to pass thru ... just the options 190*49cdfc7eSAndroid Build Coastguard Worker -D[aekv] ) 191*49cdfc7eSAndroid Build Coastguard Worker o=${1#-D} 192*49cdfc7eSAndroid Build Coastguard Worker dOpts="$dOpts -$o" 193*49cdfc7eSAndroid Build Coastguard Worker ;; 194*49cdfc7eSAndroid Build Coastguard Worker 195*49cdfc7eSAndroid Build Coastguard Worker # doio options to look at 196*49cdfc7eSAndroid Build Coastguard Worker -n | -Dn ) 197*49cdfc7eSAndroid Build Coastguard Worker dOpts="$dOpts $1 $2" 198*49cdfc7eSAndroid Build Coastguard Worker # force file locking with > 1 process 199*49cdfc7eSAndroid Build Coastguard Worker if [[ $2 > 1 ]] 200*49cdfc7eSAndroid Build Coastguard Worker then 201*49cdfc7eSAndroid Build Coastguard Worker dOpts="$dOpts -k" 202*49cdfc7eSAndroid Build Coastguard Worker fi 203*49cdfc7eSAndroid Build Coastguard Worker opt_n="-n" 204*49cdfc7eSAndroid Build Coastguard Worker shift 205*49cdfc7eSAndroid Build Coastguard Worker ;; 206*49cdfc7eSAndroid Build Coastguard Worker 207*49cdfc7eSAndroid Build Coastguard Worker \? | -*) 208*49cdfc7eSAndroid Build Coastguard Worker echo "$Prog: Illegal option $1" >&2 209*49cdfc7eSAndroid Build Coastguard Worker tst_resm TBROK "Illegal option $1" 210*49cdfc7eSAndroid Build Coastguard Worker exit 1 211*49cdfc7eSAndroid Build Coastguard Worker ;; 212*49cdfc7eSAndroid Build Coastguard Worker 213*49cdfc7eSAndroid Build Coastguard Worker *) 214*49cdfc7eSAndroid Build Coastguard Worker break 215*49cdfc7eSAndroid Build Coastguard Worker ;; 216*49cdfc7eSAndroid Build Coastguard Worker esac 217*49cdfc7eSAndroid Build Coastguard Worker shift 218*49cdfc7eSAndroid Build Coastguard Workerdone 219*49cdfc7eSAndroid Build Coastguard Worker 220*49cdfc7eSAndroid Build Coastguard Worker# 221*49cdfc7eSAndroid Build Coastguard Worker# Hard-Coded Scenario Specifications 222*49cdfc7eSAndroid Build Coastguard Worker# 223*49cdfc7eSAndroid Build Coastguard Worker# FSA RAW I/O via FSA 224*49cdfc7eSAndroid Build Coastguard Worker# MPPnnn Run as a <nnn> sized MPP application 225*49cdfc7eSAndroid Build Coastguard Worker# userstripe create files using user striping 226*49cdfc7eSAndroid Build Coastguard Worker# 227*49cdfc7eSAndroid Build Coastguard Worker 228*49cdfc7eSAndroid Build Coastguard Workerif [[ -n "$opt_S" ]] 229*49cdfc7eSAndroid Build Coastguard Workerthen 230*49cdfc7eSAndroid Build Coastguard Worker case $Scenario in 231*49cdfc7eSAndroid Build Coastguard Worker 232*49cdfc7eSAndroid Build Coastguard Worker FSA ) 233*49cdfc7eSAndroid Build Coastguard Worker # I/O via FSA 234*49cdfc7eSAndroid Build Coastguard Worker Flags="parallel" 235*49cdfc7eSAndroid Build Coastguard Worker Nprocs=1 236*49cdfc7eSAndroid Build Coastguard Worker LockRegion="" 237*49cdfc7eSAndroid Build Coastguard Worker ;; 238*49cdfc7eSAndroid Build Coastguard Worker 239*49cdfc7eSAndroid Build Coastguard Worker MPP* ) 240*49cdfc7eSAndroid Build Coastguard Worker # use mpprun... to cooperate with a batch system, this 241*49cdfc7eSAndroid Build Coastguard Worker # requires scanning mppview, etc. 242*49cdfc7eSAndroid Build Coastguard Worker 243*49cdfc7eSAndroid Build Coastguard Worker NPE=${Scenario#MPP} 244*49cdfc7eSAndroid Build Coastguard Worker MPPrun=" mpprun -n $NPE " 245*49cdfc7eSAndroid Build Coastguard Worker ;; 246*49cdfc7eSAndroid Build Coastguard Worker userstripe) 247*49cdfc7eSAndroid Build Coastguard Worker #create files using user striping 248*49cdfc7eSAndroid Build Coastguard Worker Oflags=O_PLACE,0xffffffffffffffff,1000 249*49cdfc7eSAndroid Build Coastguard Worker ;; 250*49cdfc7eSAndroid Build Coastguard Worker 251*49cdfc7eSAndroid Build Coastguard Worker places*) 252*49cdfc7eSAndroid Build Coastguard Worker FSIZE=${Scenario#places-} 253*49cdfc7eSAndroid Build Coastguard Worker oi="$IFS" 254*49cdfc7eSAndroid Build Coastguard Worker IFS=":" 255*49cdfc7eSAndroid Build Coastguard Worker set -- $PLACES 256*49cdfc7eSAndroid Build Coastguard Worker if [ $# -eq 0 ] 257*49cdfc7eSAndroid Build Coastguard Worker then 258*49cdfc7eSAndroid Build Coastguard Worker # "this isn't supposed to happen" 259*49cdfc7eSAndroid Build Coastguard Worker Files="25%:rwtest.$$" 260*49cdfc7eSAndroid Build Coastguard Worker else 261*49cdfc7eSAndroid Build Coastguard Worker IFS="$oi" 262*49cdfc7eSAndroid Build Coastguard Worker PL=${*} 263*49cdfc7eSAndroid Build Coastguard Worker for p in $PL 264*49cdfc7eSAndroid Build Coastguard Worker do 265*49cdfc7eSAndroid Build Coastguard Worker f="$f "${FSIZE}":"${p}"/rwtest$$" 266*49cdfc7eSAndroid Build Coastguard Worker done 267*49cdfc7eSAndroid Build Coastguard Worker set -- $f 268*49cdfc7eSAndroid Build Coastguard Worker fi 269*49cdfc7eSAndroid Build Coastguard Worker ;; 270*49cdfc7eSAndroid Build Coastguard Worker esac 271*49cdfc7eSAndroid Build Coastguard Workerfi 272*49cdfc7eSAndroid Build Coastguard Worker 273*49cdfc7eSAndroid Build Coastguard Worker# 274*49cdfc7eSAndroid Build Coastguard Worker# If no files are specified ... 275*49cdfc7eSAndroid Build Coastguard Worker# check if PLACES is set; if so, put one file in each place 276*49cdfc7eSAndroid Build Coastguard Worker# otherwise generate one filename in the current directory. 277*49cdfc7eSAndroid Build Coastguard Worker# 278*49cdfc7eSAndroid Build Coastguard Worker 279*49cdfc7eSAndroid Build Coastguard Workerif [ $# -eq 0 ] 280*49cdfc7eSAndroid Build Coastguard Workerthen 281*49cdfc7eSAndroid Build Coastguard Worker # put one file in each of $PLACES 282*49cdfc7eSAndroid Build Coastguard Worker Files="25%:rwtest.file" 283*49cdfc7eSAndroid Build Coastguard Workerelse 284*49cdfc7eSAndroid Build Coastguard Worker Files=$* 285*49cdfc7eSAndroid Build Coastguard Workerfi 286*49cdfc7eSAndroid Build Coastguard Worker 287*49cdfc7eSAndroid Build Coastguard Worker# 288*49cdfc7eSAndroid Build Coastguard Worker# use 'df -PB' to see how many blocks are available, apply a hard limit of 289*49cdfc7eSAndroid Build Coastguard Worker# 1,000,000 blocks if no limit is specified 290*49cdfc7eSAndroid Build Coastguard Worker# 291*49cdfc7eSAndroid Build Coastguard Worker 292*49cdfc7eSAndroid Build Coastguard Workercase "$(uname -s)" in 293*49cdfc7eSAndroid Build Coastguard Worker IRIX | IRIX64 ) dfOpts="-Pb" ;; 294*49cdfc7eSAndroid Build Coastguard Worker Linux) dfOpts="-P" ;; 295*49cdfc7eSAndroid Build Coastguard Worker *) dfOpts="-PB" ;; 296*49cdfc7eSAndroid Build Coastguard Workeresac 297*49cdfc7eSAndroid Build Coastguard Worker 298*49cdfc7eSAndroid Build Coastguard Workerfor f in $Files 299*49cdfc7eSAndroid Build Coastguard Workerdo 300*49cdfc7eSAndroid Build Coastguard Worker file=${f##*:} 301*49cdfc7eSAndroid Build Coastguard Worker if [ ! -f "$file" ] 302*49cdfc7eSAndroid Build Coastguard Worker then 303*49cdfc7eSAndroid Build Coastguard Worker Files_To_Remove="$Files_To_Remove $file" 304*49cdfc7eSAndroid Build Coastguard Worker fi 305*49cdfc7eSAndroid Build Coastguard Worker 306*49cdfc7eSAndroid Build Coastguard Worker dir=$(dirname $file) 307*49cdfc7eSAndroid Build Coastguard Worker # create directory for file if non-existent 308*49cdfc7eSAndroid Build Coastguard Worker if [ ! -d "$dir" ] 309*49cdfc7eSAndroid Build Coastguard Worker then 310*49cdfc7eSAndroid Build Coastguard Worker mkdir -p $dir 311*49cdfc7eSAndroid Build Coastguard Worker Files_To_Remove="$Files_To_Remove $dir" 312*49cdfc7eSAndroid Build Coastguard Worker fi 313*49cdfc7eSAndroid Build Coastguard Worker size=${f%%:*} 314*49cdfc7eSAndroid Build Coastguard Worker if [[ $size = *%* ]] 315*49cdfc7eSAndroid Build Coastguard Worker then 316*49cdfc7eSAndroid Build Coastguard Worker 317*49cdfc7eSAndroid Build Coastguard Worker typeset -i n=0 318*49cdfc7eSAndroid Build Coastguard Worker while (( n < ${#szcache[*]} )) 319*49cdfc7eSAndroid Build Coastguard Worker do 320*49cdfc7eSAndroid Build Coastguard Worker if [[ szcache[$n] = $dir ]]; then 321*49cdfc7eSAndroid Build Coastguard Worker break; 322*49cdfc7eSAndroid Build Coastguard Worker fi 323*49cdfc7eSAndroid Build Coastguard Worker n=n+1 324*49cdfc7eSAndroid Build Coastguard Worker done 325*49cdfc7eSAndroid Build Coastguard Worker 326*49cdfc7eSAndroid Build Coastguard Worker if (( n < ${#szcache[*]} )) 327*49cdfc7eSAndroid Build Coastguard Worker then 328*49cdfc7eSAndroid Build Coastguard Worker blks=${szblks[$n]} 329*49cdfc7eSAndroid Build Coastguard Worker else 330*49cdfc7eSAndroid Build Coastguard Worker blks=$(df $dfOpts $dir | 331*49cdfc7eSAndroid Build Coastguard Worker (while read fs blks used avail cap mountpoint 332*49cdfc7eSAndroid Build Coastguard Worker do 333*49cdfc7eSAndroid Build Coastguard Worker #echo $fs $blks $used $avail >&2 334*49cdfc7eSAndroid Build Coastguard Worker b=$avail 335*49cdfc7eSAndroid Build Coastguard Worker done 336*49cdfc7eSAndroid Build Coastguard Worker echo $b) ) 337*49cdfc7eSAndroid Build Coastguard Worker 338*49cdfc7eSAndroid Build Coastguard Worker # check if blks is a number, else set a default value for blks 339*49cdfc7eSAndroid Build Coastguard Worker default_sz=1000000 340*49cdfc7eSAndroid Build Coastguard Worker if [ $blks -eq $blks 2> /dev/null -a $blks -gt 0 ] 341*49cdfc7eSAndroid Build Coastguard Worker then 342*49cdfc7eSAndroid Build Coastguard Worker 343*49cdfc7eSAndroid Build Coastguard Worker case $(uname) in 344*49cdfc7eSAndroid Build Coastguard Worker Linux) blks=$( expr $blks / 2 ) ;; 345*49cdfc7eSAndroid Build Coastguard Worker esac 346*49cdfc7eSAndroid Build Coastguard Worker 347*49cdfc7eSAndroid Build Coastguard Worker szcache[${#szcache[*]}+1]=$dir 348*49cdfc7eSAndroid Build Coastguard Worker szblks[${#szblks[*]}+1]=$blks 349*49cdfc7eSAndroid Build Coastguard Worker 350*49cdfc7eSAndroid Build Coastguard Worker max=${size##*\%} 351*49cdfc7eSAndroid Build Coastguard Worker [ "x$max" = "x" ] && max=$default_sz 352*49cdfc7eSAndroid Build Coastguard Worker size=${size%%\%*} 353*49cdfc7eSAndroid Build Coastguard Worker 354*49cdfc7eSAndroid Build Coastguard Worker case $(uname) in 355*49cdfc7eSAndroid Build Coastguard Worker IRIX*) 356*49cdfc7eSAndroid Build Coastguard Worker sz=$( perl -le 'print int( '$blks' * '$size' / 100 )' ) 357*49cdfc7eSAndroid Build Coastguard Worker ;; 358*49cdfc7eSAndroid Build Coastguard Worker *) 359*49cdfc7eSAndroid Build Coastguard Worker sz=$(expr \( $blks '*' $size \) / 100) 360*49cdfc7eSAndroid Build Coastguard Worker ;; 361*49cdfc7eSAndroid Build Coastguard Worker esac 362*49cdfc7eSAndroid Build Coastguard Worker 363*49cdfc7eSAndroid Build Coastguard Worker if [ $sz -gt $max ] 364*49cdfc7eSAndroid Build Coastguard Worker then 365*49cdfc7eSAndroid Build Coastguard Worker sz=$max 366*49cdfc7eSAndroid Build Coastguard Worker fi 367*49cdfc7eSAndroid Build Coastguard Worker else 368*49cdfc7eSAndroid Build Coastguard Worker sz=$default_sz 369*49cdfc7eSAndroid Build Coastguard Worker fi 370*49cdfc7eSAndroid Build Coastguard Worker fi 371*49cdfc7eSAndroid Build Coastguard Worker f=$sz"b:"$file 372*49cdfc7eSAndroid Build Coastguard Worker fi 373*49cdfc7eSAndroid Build Coastguard Worker F[${#F[*]}+1]=$f 374*49cdfc7eSAndroid Build Coastguard Workerdone 375*49cdfc7eSAndroid Build Coastguard Worker 376*49cdfc7eSAndroid Build Coastguard WorkerFiles=${F[*]} 377*49cdfc7eSAndroid Build Coastguard Worker 378*49cdfc7eSAndroid Build Coastguard Workerif [[ -z ${dOpts} ]]; then 379*49cdfc7eSAndroid Build Coastguard Worker dOpts=-av 380*49cdfc7eSAndroid Build Coastguard Workerfi 381*49cdfc7eSAndroid Build Coastguard Worker 382*49cdfc7eSAndroid Build Coastguard Workerif [[ -n "$opt_F" ]]; then 383*49cdfc7eSAndroid Build Coastguard Worker 384*49cdfc7eSAndroid Build Coastguard Worker echo $Files 385*49cdfc7eSAndroid Build Coastguard Worker 386*49cdfc7eSAndroid Build Coastguard Workerelse 387*49cdfc7eSAndroid Build Coastguard Worker 388*49cdfc7eSAndroid Build Coastguard Worker cmd="${LTPROOT}/testcases/bin/iogen ${iOpts} ${Files} | $MPPrun ${LTPROOT}/testcases/bin/doio ${dOpts}" 389*49cdfc7eSAndroid Build Coastguard Worker 390*49cdfc7eSAndroid Build Coastguard Worker if [[ -z "$Quiet" ]]; then 391*49cdfc7eSAndroid Build Coastguard Worker echo $cmd 392*49cdfc7eSAndroid Build Coastguard Worker fi 393*49cdfc7eSAndroid Build Coastguard Worker 394*49cdfc7eSAndroid Build Coastguard Worker trap "killkids" INT 395*49cdfc7eSAndroid Build Coastguard Worker trap "cleanup_and_exit 2" HUP 396*49cdfc7eSAndroid Build Coastguard Worker 397*49cdfc7eSAndroid Build Coastguard Worker ( ${LTPROOT}/testcases/bin/iogen ${iOpts} ${Files} 398*49cdfc7eSAndroid Build Coastguard Worker r=$? 399*49cdfc7eSAndroid Build Coastguard Worker if [ $r -ne 0 ] 400*49cdfc7eSAndroid Build Coastguard Worker then 401*49cdfc7eSAndroid Build Coastguard Worker echo "$Prog$Name : iogen reported errors (r=$r)" >&2 402*49cdfc7eSAndroid Build Coastguard Worker tst_resm TFAIL "iogen reported errors (r=$r)" 403*49cdfc7eSAndroid Build Coastguard Worker kill -HUP $$ 404*49cdfc7eSAndroid Build Coastguard Worker fi 405*49cdfc7eSAndroid Build Coastguard Worker ) | $MPPrun ${LTPROOT}/testcases/bin/doio ${dOpts} 406*49cdfc7eSAndroid Build Coastguard Worker r=$? 407*49cdfc7eSAndroid Build Coastguard Worker if [ $r -ne 0 ] 408*49cdfc7eSAndroid Build Coastguard Worker then 409*49cdfc7eSAndroid Build Coastguard Worker echo "$Prog$Name : doio reported errors (r=$r)" >&2 410*49cdfc7eSAndroid Build Coastguard Worker tst_resm TFAIL "doio reported errors (r=$r)" 411*49cdfc7eSAndroid Build Coastguard Worker fi 412*49cdfc7eSAndroid Build Coastguard Worker 413*49cdfc7eSAndroid Build Coastguard Worker cleanup_and_exit $r 414*49cdfc7eSAndroid Build Coastguard Workerfi 415