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