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