16e112132382b6442b636ee39b02951d771408e8frobbiew/*
26e112132382b6442b636ee39b02951d771408e8frobbiew* Disktest
36e112132382b6442b636ee39b02951d771408e8frobbiew* Copyright (c) International Business Machines Corp., 2001
46e112132382b6442b636ee39b02951d771408e8frobbiew*
56e112132382b6442b636ee39b02951d771408e8frobbiew*
66e112132382b6442b636ee39b02951d771408e8frobbiew* This program is free software; you can redistribute it and/or modify
76e112132382b6442b636ee39b02951d771408e8frobbiew* it under the terms of the GNU General Public License as published by
86e112132382b6442b636ee39b02951d771408e8frobbiew* the Free Software Foundation; either version 2 of the License, or
96e112132382b6442b636ee39b02951d771408e8frobbiew* (at your option) any later version.
106e112132382b6442b636ee39b02951d771408e8frobbiew*
116e112132382b6442b636ee39b02951d771408e8frobbiew* This program is distributed in the hope that it will be useful,
126e112132382b6442b636ee39b02951d771408e8frobbiew* but WITHOUT ANY WARRANTY; without even the implied warranty of
136e112132382b6442b636ee39b02951d771408e8frobbiew* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
146e112132382b6442b636ee39b02951d771408e8frobbiew* GNU General Public License for more details.
156e112132382b6442b636ee39b02951d771408e8frobbiew*
166e112132382b6442b636ee39b02951d771408e8frobbiew* You should have received a copy of the GNU General Public License
176e112132382b6442b636ee39b02951d771408e8frobbiew* along with this program; if not, write to the Free Software
186e112132382b6442b636ee39b02951d771408e8frobbiew* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
196e112132382b6442b636ee39b02951d771408e8frobbiew*
206e112132382b6442b636ee39b02951d771408e8frobbiew*  Please send e-mail to yardleyb@us.ibm.com if you have
216e112132382b6442b636ee39b02951d771408e8frobbiew*  questions or comments.
226e112132382b6442b636ee39b02951d771408e8frobbiew*
236e112132382b6442b636ee39b02951d771408e8frobbiew*  Project Website:  TBD
246e112132382b6442b636ee39b02951d771408e8frobbiew*
254bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak* $Id: parse.c,v 1.8 2009/02/26 12:02:23 subrata_modak Exp $
266e112132382b6442b636ee39b02951d771408e8frobbiew*
276e112132382b6442b636ee39b02951d771408e8frobbiew*/
286e112132382b6442b636ee39b02951d771408e8frobbiew#include <sys/types.h>
296e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdio.h>
306e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdlib.h>
316e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdarg.h>
326e112132382b6442b636ee39b02951d771408e8frobbiew#include <signal.h>
336e112132382b6442b636ee39b02951d771408e8frobbiew#include <time.h>
346e112132382b6442b636ee39b02951d771408e8frobbiew#include <errno.h>
356e112132382b6442b636ee39b02951d771408e8frobbiew#include <fcntl.h>
366e112132382b6442b636ee39b02951d771408e8frobbiew#include <string.h>
376e112132382b6442b636ee39b02951d771408e8frobbiew#include <ctype.h>
3877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#include <sys/stat.h>
396e112132382b6442b636ee39b02951d771408e8frobbiew
406e112132382b6442b636ee39b02951d771408e8frobbiew#include "globals.h"
416e112132382b6442b636ee39b02951d771408e8frobbiew#include "threading.h"
426e112132382b6442b636ee39b02951d771408e8frobbiew#include "main.h"
436e112132382b6442b636ee39b02951d771408e8frobbiew#include "usage.h"
446e112132382b6442b636ee39b02951d771408e8frobbiew#include "sfunc.h"
456e112132382b6442b636ee39b02951d771408e8frobbiew#include "parse.h"
466e112132382b6442b636ee39b02951d771408e8frobbiew
47354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint fill_cld_args(int argc, char **argv, child_args_t * args)
486e112132382b6442b636ee39b02951d771408e8frobbiew{
496e112132382b6442b636ee39b02951d771408e8frobbiew	extern char *optarg;
506e112132382b6442b636ee39b02951d771408e8frobbiew	extern int optind;
516e112132382b6442b636ee39b02951d771408e8frobbiew	extern unsigned long glb_flags;
526b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
536b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	signed char c;
546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	char *leftovers;
556e112132382b6442b636ee39b02951d771408e8frobbiew
56354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	while ((c =
57354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		getopt(argc, argv,
58354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       "?a:A:B:cC:dD:E:f:Fh:I:K:L:m:M:nN:o:p:P:qQrR:s:S:t:T:wvV:z"))
59354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	       != -1) {
60354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		switch (c) {
61354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case ':':
62354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			pMsg(WARN, args, "Missing argument for perameter.\n");
63354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			usage();
64354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			return (-1);
65354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'V':
6677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG
67354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
68354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
69354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
70354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				exit(1);
71354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
72354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
73354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
74354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c argument is non numeric.\n", c);
7577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				exit(1);
76354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
77354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			gbl_dbg_lvl = atoi(optarg);
78354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao#else
79354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			pMsg(ERR, args,
80354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     "Debug code not compiled in, recompile with _DEBUG directive.\n",
81354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     c);
82354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			exit(1);
8377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif
84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
85354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'd':
86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			glb_flags |= GLB_FLG_QUIET;
87354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_DUMP;
88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'a':
90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
91354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
92354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
97354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments is non numeric.\n", c);
98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->seed = (unsigned int)strtol(optarg, NULL, 0);
101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
102354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'A':
103354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
104354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				exit(1);
107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
108354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'g')) {
109354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				glb_flags |= GLB_FLG_KILL;
110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'c')) {
112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags &= ~CLD_FLG_ALLDIE;
113354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
114354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'm')) {
115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_ERR_MARK;
116354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'r')) {
118354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags &= ~CLD_FLG_ERR_REREAD;
119354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 's')) {
121354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags &= ~CLD_FLG_LBA_SYNC;
122354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
123354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'S')) {
124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_IO_SERIAL;
125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
126354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'w')) {
127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_WRITE_ONCE;
128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
129354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'W')) {
130354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_UNIQ_WRT;
131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 't')) {
133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_TMO_ERROR;
134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'q':
137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			glb_flags |= GLB_FLG_QUIET;
138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'Q':
140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			glb_flags |= GLB_FLG_SUPRESS;
141354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
142354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'v':
143354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			pMsg(INFO, args, "Version %s\n", VER_STR);
144354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			exit(0);
145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'p':
146354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
147354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
149354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
150354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
151354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (args->flags & (CLD_FLG_LINEAR | CLD_FLG_RANDOM)) {
152354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
153354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "Only one seek type, -p, can be specified.\n");
154354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
155354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
156354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* seek pattern type */
157354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'L'))
158354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_LINEAR;
159354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			else if (strchr(optarg, 'l'))
160354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |=
161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (CLD_FLG_LINEAR | CLD_FLG_NTRLVD);
162354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			else if (strchr(optarg, 'R'))
163354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_RANDOM;
164354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			else if (strchr(optarg, 'r'))
165354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |=
166354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (CLD_FLG_RANDOM | CLD_FLG_NTRLVD);
167354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			else {
168354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args, "Unknown Seek pattern\n");
169354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
170354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
171354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
172354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'U') || strchr(optarg, 'u'))
173354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if ((args->flags & (CLD_FLG_LINEAR)) &&
174354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    !(args->flags & CLD_FLG_LUND))
175354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->flags |= CLD_FLG_LUNU;
176354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'D') || strchr(optarg, 'd'))
177354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if ((args->flags & (CLD_FLG_LINEAR)) &&
178354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    !(args->flags & CLD_FLG_LUNU))
179354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->flags |= CLD_FLG_LUND;
180354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
181354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'B':
182354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments is non numeric.\n", c);
185354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
186354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
187354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, ':') != NULL) {	/* we are given a range of transfer sizes */
188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_RTRSIZ;
189354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->ltrsiz = strtoul(optarg, &leftovers, 10);
190354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (leftovers == strchr(leftovers, 'k')) {	/* first value had a 'k' */
191354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ltrsiz *= 2;
192354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;
193354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'm')) {	/* first value had a 'm' */
194354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ltrsiz *= (2 * 1024);
195354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;
196354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else {
197354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					if (args->ltrsiz > 256)
198354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						args->ltrsiz /= BLK_SIZE;
199354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
200354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (!isdigit(leftovers[1])) {
201354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					pMsg(WARN, args,
202354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     "-%c arguments is non numeric.\n",
203354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     c);
204354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					return (-1);
205354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
206354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->htrsiz =
207354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    atol((char *)strchr(leftovers, ':') + 1);
208354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if ((strchr(leftovers, 'k')) != NULL) {	/* second value had a 'k' */
209354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->htrsiz *= 2;
210354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if ((strchr(leftovers, 'm')) != NULL) {	/* second value had a 'm' */
211354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->htrsiz *= (2 * 1024);
212354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else {
213354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					if (args->htrsiz > 256)
214354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						args->htrsiz /= BLK_SIZE;
215354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
216354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else {	/* only a single value given for transfer size */
217354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->ltrsiz = atoi(optarg);
218354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (strchr(optarg, 'k')) {
219354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ltrsiz *= 2;
220354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (strchr(optarg, 'm')) {
221354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ltrsiz *= (2 * 1024);
222354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else {
223354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					if (args->ltrsiz > 256)
224354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						args->ltrsiz /= BLK_SIZE;
2256e112132382b6442b636ee39b02951d771408e8frobbiew				}
226354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->htrsiz = args->ltrsiz;
227354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
22877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG
229354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			PDBG5(DBUG, args, "Parsed Transfer size: %ld\n",
230354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			      args->htrsiz);
23177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif
232354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
233354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'c':
234354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (args->flags & CLD_FLG_PTYPS) {
235354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "Please specify only one pattern type\n");
237354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
238354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
239354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
240354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_CPTYPE;
241354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
242354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'n':
243354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (args->flags & CLD_FLG_PTYPS) {
244354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
245354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "Please specify only one pattern type\n");
246354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
247354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
248354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
249354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_LPTYPE;
250354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
251354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'f':
252354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
253354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
254354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
255354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
256354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
257354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (args->flags & CLD_FLG_PTYPS) {
258354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
259354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "Please specify only one pattern type\n");
260354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
261354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
262354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
263354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->pattern = my_strtofft(optarg);
264354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_FPTYPE;
265354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
266354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'F':
267354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* the filespec is a list of filespecs in a file */
268354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_FSLIST;
269354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
270354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'z':
271354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (args->flags & CLD_FLG_PTYPS) {
272354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
273354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "Please specify only one pattern type\n");
274354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
275354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
276354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
277354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_RPTYPE;
278354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
279354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'h':
280354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
281354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
282354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
283354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
284354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
285354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
286354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
287354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments is non numeric.\n", c);
288354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
289354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
290354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
291354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_HBEAT;
292354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->hbeat = atoi(optarg);
293354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'm')) {	/* multiply by sec */
294354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->hbeat *= 60;
295354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'h')) {	/* multiply sec*min */
296354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->hbeat *= (time_t) (60 * 60);
297354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'd')) {	/* multiply by sec*min*hours */
298354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->hbeat *= (time_t) (60 * 60 * 24);
299354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
300354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
301354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'D':
302354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
303354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
304354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
305354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
306354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
307354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
308354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
309354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments is non numeric.\n", c);
310354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
311354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
312354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
313354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->rperc = atoi(optarg);
314354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->wperc = atoi((char *)(strchr(optarg, ':') + 1));
315354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_DUTY;
316354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
317354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'r':
318354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_R;
319354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
320354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'w':
321354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_W;
322354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
323354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'o':
324354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
325354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
326354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
327354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
328354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
329354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->offset = atol(optarg);
330354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_OFFSET;
331354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
332354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'R':
333354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
334354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
335354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
336354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
337354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
338354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, ':') != NULL) {	/* we are given a retry delay */
339354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->retries = strtol(optarg, &leftovers, 10);
340354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->retry_delay =
341354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (time_t) atol((char *)strchr(leftovers, ':')
342354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						  + 1);
343354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else {	/* only a retry count given */
344354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->retries = atoi(optarg);
345354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
346354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
347354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'M':
348354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
349354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
350354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
351354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
352354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
353354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_ALT_MARK;
354354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->alt_mark = my_strtofft(optarg);
355354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
356354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'm':
357354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_MBLK;
358354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
359354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
360354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
361354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
362354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
363354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'l')) {	/* returns NULL if char is not found */
364354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_MRK_LBA;
365354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
366354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'p')) {
367354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_MRK_PASS;
368354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
369354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 't')) {
370354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_MRK_TIME;
371354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
372354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 's')) {
373354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_MRK_SEED;
374354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
375354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'h')) {
376354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_MRK_HOST;
377354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
378354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'f')) {
379354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_MRK_TARGET;
380354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
381354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'a')) {
382354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_MRK_ALL;
383354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
384354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!strchr(optarg, 'l') &&
385354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 'p') &&
386354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 't') &&
387354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 's') &&
388354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 'h') &&
389354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 'f') && !strchr(optarg, 'a')) {
390354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
391354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "Unknown header mark option\n");
392354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
393354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
394354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
395354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'E':
396354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
397354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
398354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
399354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
400354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
401354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
402354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
403354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments are non numeric.\n", c);
404354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
405354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
406354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
407354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_CMPR;
408354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->cmp_lng = strtol(optarg, NULL, 0);
409354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'k')) {	/* multiply by 2^10 */
410354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->cmp_lng <<= 10;
411354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'K')) {	/* multiply 10^3 */
412354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->cmp_lng *= 1000;
413354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'm')) {	/* multiply by 2^20 */
414354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->cmp_lng <<= 20;
415354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'M')) {	/* multiply by 10^6 */
416354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->cmp_lng *= 1000000;
417354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
418354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
419354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'N':
420354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
421354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
422354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
423354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
424354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
425354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
426354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
427354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments are non numeric.\n", c);
428354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
429354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
430354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_VSIZ;
431354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->vsiz = my_strtofft(optarg);
432354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'k')) {	/* multiply by 2^10 */
433354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->vsiz <<= 10;
434354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'K')) {	/* multiply 10^3 */
435354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->vsiz *= 1000;
436354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'm')) {	/* multiply by 2^20 */
437354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->vsiz <<= 20;
438354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'M')) {	/* multiply by 10^6 */
439354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->vsiz *= 1000000;
440354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'g')) {	/* multiply by 2^30 */
441354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->vsiz <<= 30;
442354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'G')) {	/* multiply by 10^9 */
443354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->vsiz *= 1000000000;
444354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
445354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
446354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'I':
447354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
448354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
449354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
450354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
451354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
452354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'R') || strchr(optarg, 'r')) {
453354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (!(args->flags & CLD_FLG_BLK) &&
454354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    !(args->flags & CLD_FLG_FILE)) {
455354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->flags |= CLD_FLG_RAW;
456354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else {
457354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					pMsg(WARN, args,
458354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     "Can only specify one IO type\n");
459354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					return (-1);
4606e112132382b6442b636ee39b02951d771408e8frobbiew				}
461354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
462354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'B') || strchr(optarg, 'b')) {
463354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (!(args->flags & CLD_FLG_RAW) &&
464354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    !(args->flags & CLD_FLG_FILE)) {
465354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->flags |= CLD_FLG_BLK;
466354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else {
467354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					pMsg(WARN, args,
468354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     "Can only specify one IO type\n");
469354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					return (-1);
4706e112132382b6442b636ee39b02951d771408e8frobbiew				}
471354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
472354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'F') || strchr(optarg, 'f')) {
473354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (!(args->flags & CLD_FLG_RAW) &&
474354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    !(args->flags & CLD_FLG_BLK)) {
475354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->flags |= CLD_FLG_FILE;
476354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else {
477354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					pMsg(WARN, args,
478354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     "Can only specify one IO type\n");
479354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					return (-1);
480d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				}
481354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
482354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'D') || strchr(optarg, 'd')) {
483354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_DIRECT;
484354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
485354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 's')) {
486354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->sync_interval =
487354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    strtoul((char *)strchr(optarg, 's') + 1,
488354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    NULL, 10);
48977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG
490354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				PDBG3(DBUG, args, "Parsed sync interval: %ld\n",
491354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				      args->sync_interval);
49277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif
493354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if ((args->flags & CLD_FLG_DIRECT)) {
494354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					pMsg(ERR, args,
495354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     "Can't specify sync with Direct IO\n");
496354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					return (-1);
49777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
498354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_WFSYNC;
499354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
500354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
501354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 't':
502354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
503354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
504354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
505354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
506354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
50777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak
508354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, ':') != NULL) {	/* we are given a option for delay & timeout */
509354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->delayTimeMin =
510354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    strtoul(optarg, &leftovers, 10);
511354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				/* check to see if we have one or more then one ':' */
512354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if ((char *)strchr(optarg, ':') ==
513354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (char *)strrchr(optarg, ':')) {
514354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					/* only one ':', assume no random delayTime, and ioTimeout */
51577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->delayTimeMax = args->delayTimeMin;
516354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ioTimeout =
517354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    (time_t) atol((char *)
518354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							  strchr(leftovers,
519354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao								 ':') + 1);
520354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else {
521354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					/* more then one ':', assume random delayTime, and ioTimeout */
522354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->delayTimeMax =
523354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    strtoul(leftovers + 1, &leftovers,
524354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    10);
525354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ioTimeout =
526354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    (time_t) atol((char *)
527354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							  strchr(leftovers,
528354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao								 ':') + 1);
529354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
530354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (strchr(leftovers, 'm')) {	/* multiply by sec */
531354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ioTimeout *= 60;
532354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (strchr(leftovers, 'h')) {	/* multiply sec*min */
533354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ioTimeout *= (time_t) (60 * 60);
534354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (strchr(leftovers, 'd')) {	/* multiply by sec*min*hours */
535354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->ioTimeout *=
536354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    (time_t) (60 * 60 * 24);
537354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
538354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else {
539354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->delayTimeMin =
540cf0d626fe6224db3c714843dc7007e9f81d94a80Cyril Hrubis				    strtoul(optarg, NULL, 10);
541354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->delayTimeMax = args->delayTimeMin;
542354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
543354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
544354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'T':
545354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
546354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
547354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
548354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
549354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
550354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->run_time = atoi(optarg);
551354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_TMD;
552354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'm')) {	/* multiply by sec */
553354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->run_time *= 60;
554354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'h')) {	/* multiply sec*min */
555354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->run_time *= (time_t) (60 * 60);
556354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'd')) {	/* multiply by sec*min*hours */
557354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->run_time *= (time_t) (60 * 60 * 24);
558354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
559354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
560354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'L':
561354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
562354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
563354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
564354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
565354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
566354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->seeks = atoi(optarg);
567354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_SKS;
568354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'k')) {	/* multiply by 2^10 */
569354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->seeks <<= 10;
570354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'K')) {	/* multiply 10^3 */
571354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->seeks *= 1000;
572354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'm')) {	/* multiply by 2^20 */
573354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->seeks <<= 20;
574354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'M')) {	/* multiply by 10^6 */
575354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->seeks *= 1000000;
576354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'g')) {	/* multiply by 2^30 */
577354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->seeks <<= 30;
578354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else if (strchr(optarg, 'G')) {	/* multiply by 10^9 */
579354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->seeks *= 1000000000;
580354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
581354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
582354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'C':
583354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
584354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
585354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
586354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
587354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
588354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
589354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
590354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments is non numeric.\n", c);
591354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
592354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
593354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
594354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_CYC;
595354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->cycles = atol(optarg);
596354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
597354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'K':
598354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
599354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
600354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
601354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
602354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
603354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit(optarg[0])) {
604354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
605354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments is non numeric.\n", c);
606354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				usage();
607354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
608354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
609354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (atoi(optarg) > MAX_THREADS) {
610354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
611354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "%u exceeds max of %u threads.\n",
612354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     atoi(optarg), MAX_THREADS);
613354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
614354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
615354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->t_kids = atoi(optarg);
616354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
617354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'P':
618354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (optarg == NULL) {
619354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
620354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c option requires an argument.\n", c);
621354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
622354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
623354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'X')) {	/* returns NULL if char is not found */
624354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_XFERS;
625354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
626354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'T')) {
627354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_TPUTS;
628354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
629354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'P')) {
630354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				glb_flags |= GLB_FLG_PERFP;
631354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
632354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'R')) {
633354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_RUNT;
634354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
635354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'C')) {
636354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_PCYC;
637354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
638354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, 'A')) {
639354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->flags |= CLD_FLG_PRFTYPS;
640354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
641354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!strchr(optarg, 'P') &&
642354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 'A') &&
643354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 'X') &&
644354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 'R') &&
645354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    !strchr(optarg, 'C') && !strchr(optarg, 'T')) {
646354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
647354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "Unknown performance option\n");
648354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
649354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
650354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
651354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 'S':
652354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit((int)optarg[0])) {
653354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
654354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c arguments is non numeric.\n", c);
655354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
656354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
657354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_BLK_RNG;
658354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, ':') != NULL) {	/* we are given a range */
659354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->start_blk =
660354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (OFF_T) strtoul(optarg, &leftovers, 0);
661354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (leftovers == strchr(leftovers, 'k')) {	/* multiply by 2^10 */
662354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk <<= 10;
663354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
664354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'K')) {	/* multiply 10^3 */
665354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk *= 1000;
666354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
667354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'm')) {	/* multiply by 2^20 */
668354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk <<= 20;
669354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
670354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'M')) {	/* multiply by 10^6 */
671354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk *= 1000000;
672354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
673354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'g')) {	/* multiply by 2^30 */
674354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk <<= 30;
675354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
676354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'G')) {	/* multiply by 10^9 */
677354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk *= 1000000000;
678354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
679354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
680354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				leftovers++;	/* should be at the next value */
681354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (!isdigit((int)leftovers[0])) {
682354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					pMsg(WARN, args,
683354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     "-%c arguments is non numeric.\n",
684354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     c);
685354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					return (-1);
686354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
687354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->stop_blk =
688354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (OFF_T) strtoul(leftovers, &leftovers, 0);
689354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (leftovers == strchr(leftovers, 'k')) {	/* multiply by 2^10 */
690354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_blk <<= 10;
691354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'K')) {	/* multiply 10^3 */
692354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_blk *= 1000;
693354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'm')) {	/* multiply by 2^20 */
694354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_blk <<= 20;
695354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'M')) {	/* multiply by 10^6 */
696354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_blk *= 1000000;
697354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'g')) {	/* multiply by 2^30 */
698354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_blk <<= 30;
699354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'G')) {	/* multiply by 10^9 */
700354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_blk *= 1000000000;
701354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
702354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else {	/* only a single value given */
703354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->start_blk =
704354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (OFF_T) strtoul(optarg, &leftovers, 0);
705354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (leftovers == strchr(leftovers, 'k')) {	/* multiply by 2^10 */
706354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk <<= 10;
707354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'K')) {	/* multiply 10^3 */
708354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk *= 1000;
709354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'm')) {	/* multiply by 2^20 */
710354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk <<= 20;
711354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'M')) {	/* multiply by 10^6 */
712354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk *= 1000000;
713354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'g')) {	/* multiply by 2^30 */
714354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk <<= 30;
715354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'G')) {	/* multiply by 10^9 */
716354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_blk *= 1000000000;
71777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
718354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
719354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
720354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case 's':
721354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!isdigit((int)optarg[0])) {
722354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				pMsg(WARN, args,
723354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     "-%c argument is non numeric.\n", c);
724354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (-1);
725354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
726354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->flags |= CLD_FLG_LBA_RNG;
727354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (strchr(optarg, ':') != NULL) {	/* we are given a range */
728354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->start_lba =
729354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (OFF_T) strtoul(optarg, &leftovers, 0);
730354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (leftovers == strchr(leftovers, 'k')) {	/* multiply by 2^10 */
731354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba <<= 10;
732354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
733354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'K')) {	/* multiply 10^3 */
734354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba *= 1000;
735354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
736354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'm')) {	/* multiply by 2^20 */
737354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba <<= 20;
738354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
739354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'M')) {	/* multiply by 10^6 */
740354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba *= 1000000;
741354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
742354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'g')) {	/* multiply by 2^30 */
743354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba <<= 30;
744354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
745354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'G')) {	/* multiply by 10^9 */
746354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba *= 1000000000;
747354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					leftovers++;	/* at the ':' */
748354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
749354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				leftovers++;	/* should be at the next value */
750354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (!isdigit((int)leftovers[0])) {
751354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					pMsg(WARN, args,
752354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     "-%c second argument is non numeric.\n",
753354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     c);
754354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					return (-1);
755354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
756354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->stop_lba =
757354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (OFF_T) strtoul(leftovers, &leftovers, 0);
758354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (leftovers == strchr(leftovers, 'k')) {	/* multiply by 2^10 */
759354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_lba <<= 10;
760354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'K')) {	/* multiply 10^3 */
761354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_lba *= 1000;
762354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'm')) {	/* multiply by 2^20 */
763354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_lba <<= 20;
764354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'M')) {	/* multiply by 10^6 */
765354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_lba *= 1000000;
766354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'g')) {	/* multiply by 2^30 */
767354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_lba <<= 30;
768354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'G')) {	/* multiply by 10^9 */
769354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->stop_lba *= 1000000000;
770354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
771354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else {	/* only a single value given */
772354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				args->start_lba =
773354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    (OFF_T) strtoul(optarg, &leftovers, 0);
774354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (leftovers == strchr(leftovers, 'k')) {	/* multiply by 2^10 */
775354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba <<= 10;
776354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'K')) {	/* multiply 10^3 */
777354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba *= 1000;
778354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'm')) {	/* multiply by 2^20 */
779354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba <<= 20;
780354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'M')) {	/* multiply by 10^6 */
781354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba *= 1000000;
782354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'g')) {	/* multiply by 2^30 */
783354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba <<= 30;
784354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else if (leftovers == strchr(leftovers, 'G')) {	/* multiply by 10^9 */
785354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					args->start_lba *= 1000000000;
7866e112132382b6442b636ee39b02951d771408e8frobbiew				}
787354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
788354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
789354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		case '?':
790354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		default:
791354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			usage();
792354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			return (-1);
7936e112132382b6442b636ee39b02951d771408e8frobbiew		}
7946e112132382b6442b636ee39b02951d771408e8frobbiew	}
795df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (argv[optind] == NULL) {
796d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Unspecified target.\n");
797354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
7986e112132382b6442b636ee39b02951d771408e8frobbiew	}
799354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	strncpy(args->device, argv[optind], (DEV_NAME_LEN - 1));
80043337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak	return 0;
8016e112132382b6442b636ee39b02951d771408e8frobbiew}
8026e112132382b6442b636ee39b02951d771408e8frobbiew
803354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint make_assumptions(child_args_t * args)
8046e112132382b6442b636ee39b02951d771408e8frobbiew{
8056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	char TmpStr[80];
80677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	struct stat stat_buf;
80777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	int rv;
8086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
809df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (!(args->flags & CLD_FLG_IOTYPS)) {
81077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		/* use stat to get file properties, and use to set -I */
81177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		rv = stat(args->device, &stat_buf);
812df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper		if (0 == rv) {
813df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper			if (IS_FILE(stat_buf.st_mode)) {
814354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				strncat(args->argstr, "(-I f) ",
815354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					(MAX_ARG_LEN - 1) -
816354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					strlen(args->argstr));
81777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->flags |= CLD_FLG_FILE;
818df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper			} else if (IS_BLK(stat_buf.st_mode)) {
819354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				strncat(args->argstr, "(-I b) ",
820354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					(MAX_ARG_LEN - 1) -
821354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					strlen(args->argstr));
82277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->flags |= CLD_FLG_BLK;
8236b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifndef WINDOWS
824df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper			} else if (S_ISCHR(stat_buf.st_mode)) {
825354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				strncat(args->argstr, "(-I r) ",
826354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					(MAX_ARG_LEN - 1) -
827354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					strlen(args->argstr));
82877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->flags |= CLD_FLG_RAW;
8296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
83077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			}
8316e112132382b6442b636ee39b02951d771408e8frobbiew		} else {
832354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			pMsg(WARN, args,
833354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     "Can't get status on %s, defaulting to file, errno = %d\n",
834354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     args->device, GETLASTERROR());
835354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			strncat(args->argstr, "(-I f) ",
836354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				(MAX_ARG_LEN - 1) - strlen(args->argstr));
8376e112132382b6442b636ee39b02951d771408e8frobbiew			args->flags |= CLD_FLG_FILE;
8386e112132382b6442b636ee39b02951d771408e8frobbiew		}
83977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
840df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->flags & CLD_FLG_WFSYNC) && (0 == args->sync_interval)) {
841354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(INFO, args,
842354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Sync interval set to zero, assuming interval of 1.\n");
84377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		args->sync_interval = 1;
8446e112132382b6442b636ee39b02951d771408e8frobbiew	}
8456e112132382b6442b636ee39b02951d771408e8frobbiew
846df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->ltrsiz <= 0) {
847354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		sprintf(TmpStr, "(-B %d) ", TRSIZ * BLK_SIZE);
848354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		strncat(args->argstr, TmpStr,
849354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			(MAX_ARG_LEN - 1) - strlen(args->argstr));
850354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		args->ltrsiz = TRSIZ;
851354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		args->htrsiz = TRSIZ;
8526e112132382b6442b636ee39b02951d771408e8frobbiew	}
853df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->flags & CLD_FLG_LBA_RNG) {
8546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->start_blk = args->start_lba / args->htrsiz;
855df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper		if (!(args->stop_lba < 0))
8566b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->stop_blk = args->stop_lba / args->htrsiz;
8576b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
858df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->flags & CLD_FLG_BLK_RNG) {
8596b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->start_lba = args->start_blk * args->htrsiz;
860df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper		if (!(args->stop_blk < 0))
861354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->stop_lba =
862354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    (args->stop_blk * args->htrsiz) + (args->htrsiz -
863354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							       1);
8646e112132382b6442b636ee39b02951d771408e8frobbiew	}
86577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* if vsiz is still not set, try and get it from the file */
866354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->vsiz <= 0) && (args->flags & CLD_FLG_FILE)) {
867354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (0 != get_file_size(args->device)) {	/* file size retrieved */
868354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->vsiz = get_file_size(args->device);
86977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
870d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	}
87177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* if vsiz is still not set, try and get it from the device */
872df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->vsiz <= 0) && !(args->flags & CLD_FLG_FILE)) {
873354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		args->vsiz = get_vsiz(args->device);
8746e112132382b6442b636ee39b02951d771408e8frobbiew	}
87577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* if vsiz is still not set, set based on given range */
876354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->vsiz <= 0)
877354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && (args->flags & (CLD_FLG_LBA_RNG | CLD_FLG_BLK_RNG))) {
878df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper		if (!(args->stop_lba < 0))
879354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->vsiz = args->stop_lba + 1;
88077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		else
881354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->vsiz = args->start_lba + 1;
88277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
88377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* if vsiz is still not set, then set it to the default size */
884df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->vsiz <= 0) {
885354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		args->vsiz = VSIZ;
8866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
887df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (!(args->flags & CLD_FLG_VSIZ)) {
88877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		sprintf(TmpStr, N_ASSUME, args->vsiz);
889354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		strncat(args->argstr, TmpStr,
890354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			(MAX_ARG_LEN - 1) - strlen(args->argstr));
8916e112132382b6442b636ee39b02951d771408e8frobbiew	}
8926e112132382b6442b636ee39b02951d771408e8frobbiew
893df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->stop_lba == -1) {
894354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		args->stop_lba = args->vsiz - 1;
8956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
896df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->stop_blk == -1) {
897354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		args->stop_blk = (args->stop_lba / (OFF_T) args->htrsiz);
8986e112132382b6442b636ee39b02951d771408e8frobbiew	}
899df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->t_kids == 0) {
9006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		sprintf(TmpStr, "(-K %d) ", KIDS);
901354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		strncat(args->argstr, TmpStr,
902354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			(MAX_ARG_LEN - 1) - strlen(args->argstr));
903354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		args->t_kids = KIDS;
9046e112132382b6442b636ee39b02951d771408e8frobbiew	}
905354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->flags & (CLD_FLG_W | CLD_FLG_R)) == 0) {
906354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (args->flags & CLD_FLG_DUTY) {	/* no read/write but duty cycle specified */
907df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper			if (args->rperc > 0) {
908d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_R;
909354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				strncat(args->argstr, "(-r) ",
910354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					(MAX_ARG_LEN - 1) -
911354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					strlen(args->argstr));
912d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			}
913df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper			if (args->wperc > 0) {
914d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_W;
915354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				strncat(args->argstr, "(-w) ",
916354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					(MAX_ARG_LEN - 1) -
917354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					strlen(args->argstr));
918d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			}
919d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		} else {
920354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			strncat(args->argstr, "(-r) ",
921354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				(MAX_ARG_LEN - 1) - strlen(args->argstr));
922d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			args->flags |= CLD_FLG_R;
923d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		}
9246e112132382b6442b636ee39b02951d771408e8frobbiew	}
925df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (!(args->flags & CLD_FLG_PTYPS)) {
926354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		strncat(args->argstr, "(-c) ",
927354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			(MAX_ARG_LEN - 1) - strlen(args->argstr));
9286e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_CPTYPE;
9296e112132382b6442b636ee39b02951d771408e8frobbiew	}
930df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (!(args->flags & CLD_FLG_SKTYPS)) {
931354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		strncat(args->argstr, "(-p R) ",
932354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			(MAX_ARG_LEN - 1) - strlen(args->argstr));
9336e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_RANDOM;
9346e112132382b6442b636ee39b02951d771408e8frobbiew	}
935df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (!(args->flags & CLD_FLG_SKS)) {
936354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (args->start_blk == args->stop_blk) {	/* diskcache test, w/ no seek count set */
9376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->seeks = SEEKS;
938354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else if (args->flags & (CLD_FLG_BLK_RNG | CLD_FLG_LBA_RNG)) {	/* range set, w/ no seek count */
93977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			args->seeks = args->stop_blk - args->start_blk + 1;
9406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		} else {
94177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			/* if vsiz is available, calculated seeks are in terms of the largest transfer size */
942354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			args->seeks =
943354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    (args->vsiz >
944354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     0) ? (args->vsiz / args->htrsiz) : SEEKS;
9456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		}
946354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if ((args->flags & CLD_FLG_LINEAR) && (args->flags & CLD_FLG_R)
947354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    && (args->flags & CLD_FLG_W)) {
9486e112132382b6442b636ee39b02951d771408e8frobbiew			args->seeks *= 2;
9496e112132382b6442b636ee39b02951d771408e8frobbiew		}
950d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge
951df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper		if (!(args->flags & CLD_FLG_TMD)) {
95277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			sprintf(TmpStr, L_ASSUME, args->seeks);
953354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			strncat(args->argstr, TmpStr,
954354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				(MAX_ARG_LEN - 1) - strlen(args->argstr));
955d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		}
9566e112132382b6442b636ee39b02951d771408e8frobbiew	}
957354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (!(args->flags & (CLD_FLG_SKS | CLD_FLG_TMD))
958354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    || ((args->flags & CLD_FLG_CYC)
959354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		&& !(args->flags & (CLD_FLG_SKS | CLD_FLG_TMD)))) {
9606e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_SKS;
9616e112132382b6442b636ee39b02951d771408e8frobbiew	}
962df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->flags & (CLD_FLG_LINEAR)) {
963354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (!(args->flags & (CLD_FLG_LUNU | CLD_FLG_LUND))) {
964354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			strncat(args->argstr, "(-p u) ",
965354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				(MAX_ARG_LEN - 1) - strlen(args->argstr));
9666e112132382b6442b636ee39b02951d771408e8frobbiew			args->flags |= CLD_FLG_LUNU;
9676e112132382b6442b636ee39b02951d771408e8frobbiew		}
9686e112132382b6442b636ee39b02951d771408e8frobbiew	}
9696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	normalize_percs(args);
970354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (!(args->flags & CLD_FLG_DUTY) && (args->flags & CLD_FLG_RANDOM)
971354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && !(args->flags & CLD_FLG_NTRLVD)) {
97277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		sprintf(TmpStr, "(-D %d:%d) ", args->rperc, args->wperc);
973354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		strncat(args->argstr, TmpStr,
974354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			(MAX_ARG_LEN - 1) - strlen(args->argstr));
9756e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_DUTY;
9766e112132382b6442b636ee39b02951d771408e8frobbiew	}
977354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->delayTimeMin == 0) && (args->delayTimeMax == 0)
978354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && (args->ioTimeout == DEFAULT_IO_TIMEOUT)) {
979354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		strncat(args->argstr, "(-t 0:2m) ",
980354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			(MAX_ARG_LEN - 1) - strlen(args->argstr));
98177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
982df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (!(args->flags & CLD_FLG_OFFSET)) {
983354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		strncat(args->argstr, "(-o 0) ",
984354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			(MAX_ARG_LEN - 1) - strlen(args->argstr));
98577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
9866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
98743337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak	return 0;
9886e112132382b6442b636ee39b02951d771408e8frobbiew}
9896e112132382b6442b636ee39b02951d771408e8frobbiew
9906e112132382b6442b636ee39b02951d771408e8frobbiew/*
9916e112132382b6442b636ee39b02951d771408e8frobbiew * checks validity of data after parsing
9926e112132382b6442b636ee39b02951d771408e8frobbiew * args and make assumtions. returns 0 on
9936e112132382b6442b636ee39b02951d771408e8frobbiew * success and -1 on failure.
9946e112132382b6442b636ee39b02951d771408e8frobbiew */
995354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint check_conclusions(child_args_t * args)
9966e112132382b6442b636ee39b02951d771408e8frobbiew{
99777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	extern unsigned long glb_flags;
99877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	struct stat stat_buf;
99977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	int rv;
100077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak
1001354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->flags & CLD_FLG_DUTY)
1002354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && ((args->flags & CLD_FLG_LINEAR)
1003354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		|| (args->flags & CLD_FLG_NTRLVD))) {
1004354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(WARN, args,
1005354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Duty cycle testing is supported for random (-pR) tests only.\n");
1006354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
1008df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->flags & CLD_FLG_BLK_RNG) && (args->flags & CLD_FLG_RTRSIZ)) {
1009354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(WARN, args,
1010354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Can't have unfixed block sizes and specify seek range in terms of blocks.\n");
1011354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
1013df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->vsiz < 0) || (args->ltrsiz < 1) || (args->htrsiz < 1)) {
1014354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(WARN, args,
1015354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Bounds exceeded for transfer size and/or volume size.\n");
1016354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(WARN, args, MAXTRSIZ, (args->htrsiz * BLK_SIZE),
1017354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     args->vsiz);
1018354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
101977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1020df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->htrsiz < args->ltrsiz) {
1021354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1022354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Min transfer size, %lu, greater then Max transfer size, %lu.\n",
1023354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     args->ltrsiz, args->htrsiz);
1024354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10256e112132382b6442b636ee39b02951d771408e8frobbiew	}
1026354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (args->vsiz < (args->stop_lba - args->start_lba + 1)) {
1027d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(ERR, args, "Volume stop block/lba exceeds volume size.\n");
1028354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10296e112132382b6442b636ee39b02951d771408e8frobbiew	}
1030df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->vsiz < args->htrsiz) {
103177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, VSIZETS, args->vsiz, args->htrsiz);
1032354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
103408e1bdc3620b5208e3684878dd4b8e5c4cbab5d3Garrett Cooper	if ((args->flags & CLD_FLG_TMD) == 0 && (args->seeks <= 0)) {
1035354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(WARN, args, TSEEK, args->seeks);
1036354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
1038df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->flags & CLD_FLG_SKS) && (args->t_kids > args->seeks)) {
1039354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(WARN, args,
1040354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Can't have more children then max number of seeks, use -K/-L to adjust.\n");
1041354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10426e112132382b6442b636ee39b02951d771408e8frobbiew	}
1043354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->start_blk > args->vsiz)
1044354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && !(args->flags & (CLD_FLG_BLK_RNG | CLD_FLG_LBA_RNG))) {
1045354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(WARN, args, STBGTTLBA, args->start_blk,
1046354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     (args->vsiz / args->htrsiz));
1047354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10486e112132382b6442b636ee39b02951d771408e8frobbiew	}
1049354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->stop_blk > args->vsiz)
1050354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && !(args->flags & (CLD_FLG_BLK_RNG | CLD_FLG_LBA_RNG))) {
1051354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(WARN, args, SBGTTLBA, args->stop_blk,
1052354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     (args->vsiz / args->htrsiz));
1053354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10546e112132382b6442b636ee39b02951d771408e8frobbiew	}
1055354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->start_lba > args->vsiz)
1056354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && !(args->flags & (CLD_FLG_BLK_RNG | CLD_FLG_LBA_RNG))) {
105777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, STLBAGTLBA, args->start_lba, args->vsiz);
1058354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10596e112132382b6442b636ee39b02951d771408e8frobbiew	}
1060354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->stop_lba > args->vsiz)
1061354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && !(args->flags & (CLD_FLG_BLK_RNG | CLD_FLG_LBA_RNG))) {
106277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, SLBAGTLBA, args->stop_lba, args->vsiz);
1063354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10646e112132382b6442b636ee39b02951d771408e8frobbiew	}
1065df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->start_blk > args->stop_blk) {
106677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, SBRSB, args->stop_blk, args->start_blk);
1067354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10686e112132382b6442b636ee39b02951d771408e8frobbiew	}
1069df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (args->start_lba > args->stop_lba) {
107077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, SLBARSLBA, args->stop_lba, args->start_lba);
1071354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10726e112132382b6442b636ee39b02951d771408e8frobbiew	}
1073df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->flags & CLD_FLG_LBA_RNG) && (args->flags & CLD_FLG_BLK_RNG)) {
1074354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1075354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Can't specify range in both block and LBA, use -s or -S.\n");
1076354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
10776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
107877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak
107977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* use stat to get file properties, and test then agains specified -I */
108077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	rv = stat(args->device, &stat_buf);
1081354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (0 == rv) {		/* no error on call to stat, compare against -I option */
108277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		/* files are usually file type */
10838fb1cdb0538640f295691929650408688537fb7fGarrett Cooper		if ((args->flags & CLD_FLG_FILE) && !IS_FILE(stat_buf.st_mode)) {
1084354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			pMsg(ERR, args,
1085354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     "Can't open non-file filespec with file device type, -If.\n");
1086354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			return (-1);
108777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
108877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		/* block devices, are usually block type */
1089df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper		if ((args->flags & CLD_FLG_BLK) && !IS_BLK(stat_buf.st_mode)) {
1090354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			pMsg(ERR, args,
1091354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     "Can't open non-block filespec with block device type, -Ib.\n");
1092354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			return (-1);
109377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
109477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifndef WINDOWS
109577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		/* raw devices, are usually character type */
1096df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper		if ((args->flags & CLD_FLG_RAW) && !S_ISCHR(stat_buf.st_mode)) {
1097354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			pMsg(ERR, args,
1098354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     "Can't open non-raw filespec with raw device type, -Ir.\n");
1099354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			return (-1);
110077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
110177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#else
1102df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper		if (args->flags & CLD_FLG_RAW) {
1103354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			pMsg(ERR, args,
1104354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     "RAW IO type not supported in Windows, use direct IO instead.\n");
1105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			return (-1);
110677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
110777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif
110877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG
110977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	} else {
1110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		PDBG1(DBUG, args,
1111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		      "Can't get status on %s, assuming a new file, errno = %d\n",
1112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		      args->device, GETLASTERROR());
11136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
111477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
111577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak
1116354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->hbeat > 0) && (args->flags & CLD_FLG_TMD)
1117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && (args->hbeat > args->run_time)) {
1118354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1119354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Heartbeat should be at least equal to runtime, use -h/-T to adjust.\n");
1120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
11216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
1122df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->hbeat > 0) && !(args->flags & CLD_FLG_PRFTYPS)) {
1123354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "At least one performance option, -P, must be specified when using -h.\n");
1125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
11266e112132382b6442b636ee39b02951d771408e8frobbiew	}
1127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->flags & CLD_FLG_W) && !(args->flags & CLD_FLG_R)
1128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && (args->flags & CLD_FLG_CMPR)) {
112977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Write only, ignoring option -E.\n");
113077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1131df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->flags & CLD_FLG_TMD) && (args->flags & CLD_FLG_SKS)) {
1132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Can't specify both -L and -T they are mutually exclusive.\n");
1134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
113577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (((args->flags & CLD_FLG_R) && !(args->flags & CLD_FLG_W))
1137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && (args->flags & CLD_FLG_ERR_MARK)) {
1138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Can't specify mark on error, -Am, in read only mode.\n");
1140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
114177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1142df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if (!(args->flags & CLD_FLG_ALLDIE) && (args->flags & CLD_FLG_ERR_MARK)) {
1143354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1144354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Can't specify mark on error, -Am, when continue on error is set.\n");
1145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
114677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1147df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((glb_flags & GLB_FLG_KILL) && !(args->flags & CLD_FLG_ALLDIE)) {
1148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1149354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Can't specify global kill, -Ag, when continue on error is set, -Ac.\n");
1150354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
115177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1152354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->flags & CLD_FLG_LINEAR) && !(args->flags & CLD_FLG_NTRLVD)
1153354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && (args->flags & CLD_FLG_TMD)) {
115477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Linear read / write test can not be timed.\n");
1155354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
115677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1157354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->flags & CLD_FLG_CMPR)
1158354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && (args->cmp_lng > (args->ltrsiz * BLK_SIZE))) {
1159354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args,
1160354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     "Compare length, %lu, is greater then transfer size, %lu\n",
1161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     args->cmp_lng, args->ltrsiz * BLK_SIZE);
1162354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
116377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1164df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper	if ((args->flags & CLD_FLG_OFFSET) && (args->offset > args->stop_lba)) {
116577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, LBAOFFGSLBA, args->offset, args->stop_lba);
1166354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
116777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
1168354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((args->flags & CLD_FLG_OFFSET)
1169354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && ((args->offset + args->ltrsiz - 1) > args->stop_lba)) {
1170354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		pMsg(ERR, args, LBAOTSGSLBA, args->offset, args->ltrsiz,
1171354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     args->stop_lba);
1172354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
1173d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	}
117443337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak	return 0;
1175ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
1176