parse.c revision 08e1bdc3620b5208e3684878dd4b8e5c4cbab5d3
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 476b98df5129acc12aad3167a9c6c12fda5afc6c31robbiewint 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 56df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper while ((c = getopt(argc, argv, "?a:A:B:cC:dD:E:f:Fh:I:K:L:m:M:nN:o:p:P:qQrR:s:S:t:T:wvV:z")) != -1) { 576e112132382b6442b636ee39b02951d771408e8frobbiew switch(c) { 586e112132382b6442b636ee39b02951d771408e8frobbiew case ':' : 59d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Missing argument for perameter.\n"); 606e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew case 'V' : 6377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG 64df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 65d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 666e112132382b6442b636ee39b02951d771408e8frobbiew exit(1); 676e112132382b6442b636ee39b02951d771408e8frobbiew } 68df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 69d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c argument is non numeric.\n", c); 706e112132382b6442b636ee39b02951d771408e8frobbiew exit(1); 716e112132382b6442b636ee39b02951d771408e8frobbiew } 726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew gbl_dbg_lvl = atoi(optarg); 7377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#else 7477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Debug code not compiled in, recompile with _DEBUG directive.\n", c); 7577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak exit(1); 7677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif 776e112132382b6442b636ee39b02951d771408e8frobbiew break; 786e112132382b6442b636ee39b02951d771408e8frobbiew case 'd' : 796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew glb_flags |= GLB_FLG_QUIET; 806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->flags |= CLD_FLG_DUMP; 816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew break; 826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew case 'a' : 83df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 84d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 87df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 88d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 9177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->seed = (unsigned int) strtol(optarg, NULL, 0); 926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew break; 936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew case 'A' : 94df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 9577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, "-%c option requires an argument.\n", c); 9677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak exit(1); 9777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 9877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'g')) { 9977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak glb_flags |= GLB_FLG_KILL; 10077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 10177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'c')) { 10277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags &= ~CLD_FLG_ALLDIE; 10377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 10477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'m')) { 10577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_ERR_MARK; 10677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 10777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'r')) { 10877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags &= ~CLD_FLG_ERR_REREAD; 10977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 11077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'s')) { 11177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags &= ~CLD_FLG_LBA_SYNC; 11277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 11377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'S')) { 11477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_IO_SERIAL; 11577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 11677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'w')) { 11777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_WRITE_ONCE; 11877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 11977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'W')) { 12077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_UNIQ_WRT; 12177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 12277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'t')) { 12377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_TMO_ERROR; 12477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 1256e112132382b6442b636ee39b02951d771408e8frobbiew break; 1266e112132382b6442b636ee39b02951d771408e8frobbiew case 'q' : 1276e112132382b6442b636ee39b02951d771408e8frobbiew glb_flags |= GLB_FLG_QUIET; 1286e112132382b6442b636ee39b02951d771408e8frobbiew break; 1296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew case 'Q' : 1306b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew glb_flags |= GLB_FLG_SUPRESS; 1316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew break; 1326e112132382b6442b636ee39b02951d771408e8frobbiew case 'v' : 133d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(INFO, args, "Version %s\n", VER_STR); 1346e112132382b6442b636ee39b02951d771408e8frobbiew exit(0); 1356e112132382b6442b636ee39b02951d771408e8frobbiew case 'p' : 136df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 137d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 1386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 1396b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 140df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & (CLD_FLG_LINEAR|CLD_FLG_RANDOM)) { 141d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Only one seek type, -p, can be specified.\n"); 1426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 1436e112132382b6442b636ee39b02951d771408e8frobbiew } 1446e112132382b6442b636ee39b02951d771408e8frobbiew /* seek pattern type */ 1456e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'L')) 1466e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LINEAR; 1476e112132382b6442b636ee39b02951d771408e8frobbiew else if (strchr(optarg,'l')) 1486e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= (CLD_FLG_LINEAR|CLD_FLG_NTRLVD); 14977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak else if (strchr(optarg,'R')) 1506e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RANDOM; 15177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak else if (strchr(optarg,'r')) 15277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= (CLD_FLG_RANDOM|CLD_FLG_NTRLVD); 1536e112132382b6442b636ee39b02951d771408e8frobbiew else { 154d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Unknown Seek pattern\n"); 1556e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 1566b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 1576e112132382b6442b636ee39b02951d771408e8frobbiew } 1586e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'U') || strchr(optarg,'u')) 159df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & (CLD_FLG_LINEAR)) && 1606e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_LUND)) 1616e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LUNU; 1626e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'D') || strchr(optarg,'d')) 163df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & (CLD_FLG_LINEAR)) && 1646e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_LUNU)) 1656e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LUND; 1666e112132382b6442b636ee39b02951d771408e8frobbiew break; 1676e112132382b6442b636ee39b02951d771408e8frobbiew case 'B' : 168df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 169d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 1706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 1716e112132382b6442b636ee39b02951d771408e8frobbiew } 172df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,':') != NULL) { /* we are given a range of transfer sizes */ 1736e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RTRSIZ; 1746e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz = strtoul(optarg, &leftovers, 10); 175df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (leftovers == strchr(leftovers,'k')) { /* first value had a 'k' */ 1766e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz *= 2; 1776e112132382b6442b636ee39b02951d771408e8frobbiew leftovers++; 178df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers, 'm')) { /* first value had a 'm' */ 17977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->ltrsiz *= (2 * 1024); 18077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak leftovers++; 1816e112132382b6442b636ee39b02951d771408e8frobbiew } else { 1826e112132382b6442b636ee39b02951d771408e8frobbiew if (args->ltrsiz > 256) 1836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->ltrsiz /= BLK_SIZE; 1846e112132382b6442b636ee39b02951d771408e8frobbiew } 185df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(leftovers[1])) { 186d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 1876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 1886e112132382b6442b636ee39b02951d771408e8frobbiew } 1896e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz = atol((char *)strchr(leftovers,':')+1); 190df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((strchr(leftovers,'k')) != NULL) {/* second value had a 'k' */ 1916e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz *= 2; 192df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if ((strchr(leftovers,'m')) != NULL) { /* second value had a 'm' */ 19377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->htrsiz *= (2 * 1024); 1946e112132382b6442b636ee39b02951d771408e8frobbiew } else { 1956e112132382b6442b636ee39b02951d771408e8frobbiew if (args->htrsiz > 256) 1966e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz /= BLK_SIZE; 1976e112132382b6442b636ee39b02951d771408e8frobbiew } 1986e112132382b6442b636ee39b02951d771408e8frobbiew } else { /* only a single value given for transfer size */ 19977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->ltrsiz = atoi(optarg); 200df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,'k')) { 2016e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz *= 2; 202df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'m')) { 20377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->ltrsiz *= (2 * 1024); 2046e112132382b6442b636ee39b02951d771408e8frobbiew } else { 2056e112132382b6442b636ee39b02951d771408e8frobbiew if (args->ltrsiz > 256) 2066e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz /= BLK_SIZE; 2076e112132382b6442b636ee39b02951d771408e8frobbiew } 2086e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz = args->ltrsiz; 2096e112132382b6442b636ee39b02951d771408e8frobbiew } 21077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG 21177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak PDBG5(DBUG, args, "Parsed Transfer size: %ld\n", args->htrsiz); 21277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif 2136e112132382b6442b636ee39b02951d771408e8frobbiew break; 2146e112132382b6442b636ee39b02951d771408e8frobbiew case 'c' : 215df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & CLD_FLG_PTYPS) { 216d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Please specify only one pattern type\n"); 2176e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2196e112132382b6442b636ee39b02951d771408e8frobbiew } 2206e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_CPTYPE; 2216e112132382b6442b636ee39b02951d771408e8frobbiew break; 2226e112132382b6442b636ee39b02951d771408e8frobbiew case 'n' : 223df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & CLD_FLG_PTYPS) { 224d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Please specify only one pattern type\n"); 2256e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2276e112132382b6442b636ee39b02951d771408e8frobbiew } 2286e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LPTYPE; 2296e112132382b6442b636ee39b02951d771408e8frobbiew break; 2306e112132382b6442b636ee39b02951d771408e8frobbiew case 'f' : 231df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 232d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 2336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2346e112132382b6442b636ee39b02951d771408e8frobbiew } 235df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & CLD_FLG_PTYPS) { 236d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Please specify only one pattern type\n"); 2376e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2396e112132382b6442b636ee39b02951d771408e8frobbiew } 2406e112132382b6442b636ee39b02951d771408e8frobbiew args->pattern = my_strtofft(optarg); 2416e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_FPTYPE; 2426e112132382b6442b636ee39b02951d771408e8frobbiew break; 243d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge case 'F' : 244d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge /* the filespec is a list of filespecs in a file */ 245d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_FSLIST; 246d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge break; 2476e112132382b6442b636ee39b02951d771408e8frobbiew case 'z' : 248df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & CLD_FLG_PTYPS) { 249d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Please specify only one pattern type\n"); 2506e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2526e112132382b6442b636ee39b02951d771408e8frobbiew } 2536e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RPTYPE; 2546e112132382b6442b636ee39b02951d771408e8frobbiew break; 2556e112132382b6442b636ee39b02951d771408e8frobbiew case 'h' : 256df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 257d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 2586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2596e112132382b6442b636ee39b02951d771408e8frobbiew } 260df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 261d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 2626e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2646e112132382b6442b636ee39b02951d771408e8frobbiew } 265d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_HBEAT; 2666e112132382b6442b636ee39b02951d771408e8frobbiew args->hbeat = atoi(optarg); 267df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,'m')) { /* multiply by sec */ 2686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->hbeat *= 60; 269df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'h')) { /* multiply sec*min */ 2706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->hbeat *= (time_t) (60*60); 271df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'d')) { /* multiply by sec*min*hours */ 2726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->hbeat *= (time_t) (60*60*24); 2736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 2746e112132382b6442b636ee39b02951d771408e8frobbiew break; 2756e112132382b6442b636ee39b02951d771408e8frobbiew case 'D' : 276df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 277d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 2786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2796e112132382b6442b636ee39b02951d771408e8frobbiew } 280df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 281d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 2826e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2846e112132382b6442b636ee39b02951d771408e8frobbiew } 2856e112132382b6442b636ee39b02951d771408e8frobbiew args->rperc = atoi(optarg); 2866e112132382b6442b636ee39b02951d771408e8frobbiew args->wperc = atoi((char *)(strchr(optarg,':')+1)); 2876e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_DUTY; 2886e112132382b6442b636ee39b02951d771408e8frobbiew break; 2894bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak case 'r' : 2906e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_R; 2916e112132382b6442b636ee39b02951d771408e8frobbiew break; 2924bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak case 'w' : 2936e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_W; 2946e112132382b6442b636ee39b02951d771408e8frobbiew break; 2954bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak case 'o' : 296df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 297d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 2986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2996e112132382b6442b636ee39b02951d771408e8frobbiew } 30077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->offset = atol(optarg); 30177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_OFFSET; 3026e112132382b6442b636ee39b02951d771408e8frobbiew break; 3034bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak case 'R' : 304df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 305d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 3066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3076e112132382b6442b636ee39b02951d771408e8frobbiew } 308df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,':') != NULL) { /* we are given a retry delay */ 30977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->retries = strtol(optarg, &leftovers, 10); 31077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->retry_delay = (time_t) atol((char *)strchr(leftovers,':')+1); 31177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } else { /* only a retry count given */ 31277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->retries = atoi(optarg); 31377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 31477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak break; 31577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak case 'M' : 316df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 31777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, "-%c option requires an argument.\n", c); 3186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3196e112132382b6442b636ee39b02951d771408e8frobbiew } 32077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_ALT_MARK; 32177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->alt_mark = my_strtofft(optarg); 32277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak break; 32377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak case 'm' : 3246e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_MBLK; 325df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 32677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, "-%c option requires an argument.\n", c); 32777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 32877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 32977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'l')) { /* returns NULL if char is not found */ 33077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_MRK_LBA; 33177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 33277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'p')) { 33377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_MRK_PASS; 33477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 33577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'t')) { 33677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_MRK_TIME; 33777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 33877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'s')) { 33977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_MRK_SEED; 34077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 34177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'h')) { 34277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_MRK_HOST; 34377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 34477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'f')) { 34577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_MRK_TARGET; 34677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 34777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'a')) { 34877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_MRK_ALL; 34977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 35077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (!strchr(optarg,'l') && 35177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak !strchr(optarg,'p') && 35277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak !strchr(optarg,'t') && 35377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak !strchr(optarg,'s') && 35477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak !strchr(optarg,'h') && 35577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak !strchr(optarg,'f') && 35677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak !strchr(optarg,'a')) { 35777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, "Unknown header mark option\n"); 35877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 35977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 3606e112132382b6442b636ee39b02951d771408e8frobbiew break; 3616e112132382b6442b636ee39b02951d771408e8frobbiew case 'E' : 362df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 363d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 3646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3656e112132382b6442b636ee39b02951d771408e8frobbiew } 366df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 367d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments are non numeric.\n", c); 3686e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 3696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3706e112132382b6442b636ee39b02951d771408e8frobbiew } 3716e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_CMPR; 3726e112132382b6442b636ee39b02951d771408e8frobbiew args->cmp_lng = strtol(optarg,NULL,0); 373df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,'k')) { /* multiply by 2^10 */ 37477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->cmp_lng <<= 10; 375df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'K')) { /* multiply 10^3 */ 37677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->cmp_lng *= 1000; 377df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'m')) { /* multiply by 2^20 */ 37877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->cmp_lng <<= 20; 379df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'M')) { /* multiply by 10^6 */ 38077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->cmp_lng *= 1000000; 38177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 3826e112132382b6442b636ee39b02951d771408e8frobbiew break; 3836e112132382b6442b636ee39b02951d771408e8frobbiew case 'N' : 384df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 385d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 3866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3876e112132382b6442b636ee39b02951d771408e8frobbiew } 388df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 389d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments are non numeric.\n", c); 3906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3916e112132382b6442b636ee39b02951d771408e8frobbiew } 3926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->flags |= CLD_FLG_VSIZ; 3936e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz = my_strtofft(optarg); 394df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,'k')) { /* multiply by 2^10 */ 3956e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz <<= 10; 396df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'K')) { /* multiply 10^3 */ 3976e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz *= 1000; 398df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'m')) { /* multiply by 2^20 */ 3996e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz <<= 20; 400df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'M')) { /* multiply by 10^6 */ 4016e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz *= 1000000; 402df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'g')) { /* multiply by 2^30 */ 4036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->vsiz <<= 30; 404df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'G')) { /* multiply by 10^9 */ 4056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->vsiz *= 1000000000; 4066e112132382b6442b636ee39b02951d771408e8frobbiew } 4076e112132382b6442b636ee39b02951d771408e8frobbiew break; 4086e112132382b6442b636ee39b02951d771408e8frobbiew case 'I' : 409df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 410d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 4116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4126e112132382b6442b636ee39b02951d771408e8frobbiew } 4136e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'R') || strchr(optarg,'r')) { 4146e112132382b6442b636ee39b02951d771408e8frobbiew if (!(args->flags & CLD_FLG_BLK) && 4156e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_FILE)) { 4166e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RAW; 4176e112132382b6442b636ee39b02951d771408e8frobbiew } else { 418d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can only specify one IO type\n"); 4196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4206e112132382b6442b636ee39b02951d771408e8frobbiew } 4216e112132382b6442b636ee39b02951d771408e8frobbiew } 4226e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'B') || strchr(optarg,'b')) { 4236e112132382b6442b636ee39b02951d771408e8frobbiew if (!(args->flags & CLD_FLG_RAW) && 4246e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_FILE)) { 4256e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_BLK; 4266e112132382b6442b636ee39b02951d771408e8frobbiew } else { 427d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can only specify one IO type\n"); 4286b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4296e112132382b6442b636ee39b02951d771408e8frobbiew } 4306e112132382b6442b636ee39b02951d771408e8frobbiew } 4316e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'F') || strchr(optarg,'f')) { 4326e112132382b6442b636ee39b02951d771408e8frobbiew if (!(args->flags & CLD_FLG_RAW) && 4336e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_BLK)) { 4346e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_FILE; 4356e112132382b6442b636ee39b02951d771408e8frobbiew } else { 436d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can only specify one IO type\n"); 4376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4386e112132382b6442b636ee39b02951d771408e8frobbiew } 4396e112132382b6442b636ee39b02951d771408e8frobbiew } 440d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if (strchr(optarg,'D') || strchr(optarg,'d')) { 4416e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_DIRECT; 442d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 44377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak if (strchr(optarg,'s')) { 44477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->sync_interval = strtoul((char *)strchr(optarg,'s')+1, NULL, 10); 44577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG 44677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak PDBG3(DBUG, args, "Parsed sync interval: %ld\n", args->sync_interval); 44777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif 448df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_DIRECT)) { 44977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't specify sync with Direct IO\n"); 450d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge return(-1); 451d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 452d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_WFSYNC; 453d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 4546e112132382b6442b636ee39b02951d771408e8frobbiew break; 4554bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak case 't' : 456df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 45777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, "-%c option requires an argument.\n", c); 45877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 45977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 46077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak 461df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,':') != NULL) { /* we are given a option for delay & timeout */ 46277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->delayTimeMin = strtoul(optarg, &leftovers, 10); 46377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* check to see if we have one or more then one ':' */ 464df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((char *)strchr(optarg,':') == (char *)strrchr(optarg,':')) { 46577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* only one ':', assume no random delayTime, and ioTimeout */ 46677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->delayTimeMax = args->delayTimeMin; 46777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->ioTimeout = (time_t) atol((char *)strchr(leftovers,':')+1); 46877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } else { 46977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* more then one ':', assume random delayTime, and ioTimeout */ 47077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->delayTimeMax = strtoul(leftovers+1, &leftovers, 10); 47177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->ioTimeout = (time_t) atol((char *)strchr(leftovers,':')+1); 47277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 473df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(leftovers,'m')) { /* multiply by sec */ 47477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->ioTimeout *= 60; 475df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(leftovers,'h')) { /* multiply sec*min */ 47677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->ioTimeout *= (time_t) (60*60); 477df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(leftovers,'d')) { /* multiply by sec*min*hours */ 47877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->ioTimeout *= (time_t) (60*60*24); 47977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 48077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } else { 48177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->delayTimeMin = strtoul(optarg, (char **)NULL, 10); 48277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->delayTimeMax = args->delayTimeMin; 48377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 48477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak break; 4856e112132382b6442b636ee39b02951d771408e8frobbiew case 'T' : 486df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 487d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 4886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4896e112132382b6442b636ee39b02951d771408e8frobbiew } 4906e112132382b6442b636ee39b02951d771408e8frobbiew args->run_time = atoi(optarg); 4916e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_TMD; 492df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,'m')) { /* multiply by sec */ 4936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->run_time *= 60; 494df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'h')) { /* multiply sec*min */ 4956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->run_time *= (time_t) (60*60); 496df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'d')) { /* multiply by sec*min*hours */ 4976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->run_time *= (time_t) (60*60*24); 4986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 4996e112132382b6442b636ee39b02951d771408e8frobbiew break; 5006e112132382b6442b636ee39b02951d771408e8frobbiew case 'L' : 501df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 502d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 5036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5046e112132382b6442b636ee39b02951d771408e8frobbiew } 5056e112132382b6442b636ee39b02951d771408e8frobbiew args->seeks = atoi(optarg); 5066e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_SKS; 507df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,'k')) { /* multiply by 2^10 */ 5086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks <<= 10; 509df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'K')) { /* multiply 10^3 */ 5106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks *= 1000; 511df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'m')) { /* multiply by 2^20 */ 5126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks <<= 20; 513df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'M')) { /* multiply by 10^6 */ 5146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks *= 1000000; 515df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'g')) { /* multiply by 2^30 */ 5166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks <<= 30; 517df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (strchr(optarg,'G')) { /* multiply by 10^9 */ 5186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks *= 1000000000; 5196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 5206e112132382b6442b636ee39b02951d771408e8frobbiew break; 5216e112132382b6442b636ee39b02951d771408e8frobbiew case 'C' : 522df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 523d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 5246b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5256e112132382b6442b636ee39b02951d771408e8frobbiew } 526df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 527d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 5286e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 5296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5306e112132382b6442b636ee39b02951d771408e8frobbiew } 5316e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_CYC; 5326e112132382b6442b636ee39b02951d771408e8frobbiew args->cycles = atol(optarg); 5336e112132382b6442b636ee39b02951d771408e8frobbiew break; 5346e112132382b6442b636ee39b02951d771408e8frobbiew case 'K' : 535df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 536d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 5376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5386e112132382b6442b636ee39b02951d771408e8frobbiew } 539df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit(optarg[0])) { 540d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 5416e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 5426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5436e112132382b6442b636ee39b02951d771408e8frobbiew } 544df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (atoi(optarg) > MAX_THREADS) { 545d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "%u exceeds max of %u threads.\n", atoi(optarg), MAX_THREADS); 5466b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5476e112132382b6442b636ee39b02951d771408e8frobbiew } 5486e112132382b6442b636ee39b02951d771408e8frobbiew args->t_kids = atoi(optarg); 5496e112132382b6442b636ee39b02951d771408e8frobbiew break; 5506e112132382b6442b636ee39b02951d771408e8frobbiew case 'P' : 551df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (optarg == NULL) { 552d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 5536b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5546e112132382b6442b636ee39b02951d771408e8frobbiew } 5556e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'X')) { /* returns NULL if char is not found */ 5566e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_XFERS; 5576e112132382b6442b636ee39b02951d771408e8frobbiew } 5586e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'T')) { 5596e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_TPUTS; 5606e112132382b6442b636ee39b02951d771408e8frobbiew } 5616e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'P')) { 5626e112132382b6442b636ee39b02951d771408e8frobbiew glb_flags |= GLB_FLG_PERFP; 5636e112132382b6442b636ee39b02951d771408e8frobbiew } 5646e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'R')) { 5656e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RUNT; 5666e112132382b6442b636ee39b02951d771408e8frobbiew } 567d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if (strchr(optarg,'C')) { 568d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_PCYC; 569d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 5706e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'A')) { 571d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_PRFTYPS; 5726e112132382b6442b636ee39b02951d771408e8frobbiew } 5736e112132382b6442b636ee39b02951d771408e8frobbiew if (!strchr(optarg,'P') && 5746e112132382b6442b636ee39b02951d771408e8frobbiew !strchr(optarg,'A') && 5756e112132382b6442b636ee39b02951d771408e8frobbiew !strchr(optarg,'X') && 5766e112132382b6442b636ee39b02951d771408e8frobbiew !strchr(optarg,'R') && 577d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge !strchr(optarg,'C') && 5786e112132382b6442b636ee39b02951d771408e8frobbiew !strchr(optarg,'T')) { 579d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Unknown performance option\n"); 5806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5816e112132382b6442b636ee39b02951d771408e8frobbiew } 5826e112132382b6442b636ee39b02951d771408e8frobbiew break; 5836e112132382b6442b636ee39b02951d771408e8frobbiew case 'S' : 584df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit((int)optarg[0])) { 585d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 5866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5876e112132382b6442b636ee39b02951d771408e8frobbiew } 5886e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_BLK_RNG; 589df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,':') != NULL) { /* we are given a range */ 59077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 0); 591df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 5926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk <<= 10; 5936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 594df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 5956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk *= 1000; 5966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 597df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 5986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk <<= 20; 5996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 600df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk *= 1000000; 6026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 603df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */ 60477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_blk <<= 30; 60577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak leftovers++; /* at the ':' */ 606df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */ 60777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_blk *= 1000000000; 60877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak leftovers++; /* at the ':' */ 6096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* should be at the next value */ 611df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit((int) leftovers[0])) { 612d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 6136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 6146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 61577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->stop_blk = (OFF_T) strtoul(leftovers, &leftovers, 0); 616df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk <<= 10; 618df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk *= 1000; 620df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk <<= 20; 622df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6236b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk *= 1000000; 624df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */ 62577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->stop_blk <<= 30; 626df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */ 62777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->stop_blk *= 1000000000; 6286b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else { /* only a single value given */ 63077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 0); 631df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6326b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk <<= 10; 633df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk *= 1000; 635df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6366b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk <<= 20; 637df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk *= 1000000; 639df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */ 64077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_blk <<= 30; 641df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */ 64277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_blk *= 1000000000; 6436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6446b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6456e112132382b6442b636ee39b02951d771408e8frobbiew break; 6466e112132382b6442b636ee39b02951d771408e8frobbiew case 's' : 647df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit((int)optarg[0])) { 648d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c argument is non numeric.\n", c); 6496b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 6506b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->flags |= CLD_FLG_LBA_RNG; 652df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (strchr(optarg,':') != NULL) { /* we are given a range */ 65377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 0); 654df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6556b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba <<= 10; 6566b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 657df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba *= 1000; 6596b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 660df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba <<= 20; 6626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 663df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba *= 1000000; 6656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 666df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */ 66777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_lba <<= 30; 66877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak leftovers++; /* at the ':' */ 669df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */ 67077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_lba *= 1000000000; 67177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak leftovers++; /* at the ':' */ 6726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* should be at the next value */ 674df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!isdigit((int) leftovers[0])) { 675d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c second argument is non numeric.\n", c); 6766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 6776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 67877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->stop_lba = (OFF_T) strtoul(leftovers, &leftovers, 0); 679df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6806e112132382b6442b636ee39b02951d771408e8frobbiew args->stop_lba <<= 10; 681df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6826e112132382b6442b636ee39b02951d771408e8frobbiew args->stop_lba *= 1000; 683df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6846e112132382b6442b636ee39b02951d771408e8frobbiew args->stop_lba <<= 20; 685df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6866e112132382b6442b636ee39b02951d771408e8frobbiew args->stop_lba *= 1000000; 687df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */ 68877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->stop_lba <<= 30; 689df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */ 69077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->stop_lba *= 1000000000; 6916e112132382b6442b636ee39b02951d771408e8frobbiew } 6926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else { /* only a single value given */ 69377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 0); 694df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba <<= 10; 696df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba *= 1000; 698df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba <<= 20; 700df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 7016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba *= 1000000; 702df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */ 70377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_lba <<= 30; 704df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */ 70577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->start_lba *= 1000000000; 7066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 7076e112132382b6442b636ee39b02951d771408e8frobbiew } 7086e112132382b6442b636ee39b02951d771408e8frobbiew break; 7096e112132382b6442b636ee39b02951d771408e8frobbiew case '?' : 7106e112132382b6442b636ee39b02951d771408e8frobbiew default : 7116e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 7126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 7136e112132382b6442b636ee39b02951d771408e8frobbiew } 7146e112132382b6442b636ee39b02951d771408e8frobbiew } 715df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (argv[optind] == NULL) { 716d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Unspecified target.\n"); 7176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 7186e112132382b6442b636ee39b02951d771408e8frobbiew } 719d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncpy(args->device, argv[optind], (DEV_NAME_LEN-1)); 72043337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak return 0; 7216e112132382b6442b636ee39b02951d771408e8frobbiew} 7226e112132382b6442b636ee39b02951d771408e8frobbiew 723d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridgeint make_assumptions(child_args_t *args) 7246e112132382b6442b636ee39b02951d771408e8frobbiew{ 7256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew char TmpStr[80]; 72677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak struct stat stat_buf; 72777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak int rv; 7286b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew 729df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_IOTYPS)) { 73077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* use stat to get file properties, and use to set -I */ 73177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak rv = stat(args->device, &stat_buf); 732df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (0 == rv) { 733df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (IS_FILE(stat_buf.st_mode)) { 73477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak strncat(args->argstr, "(-I f) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 73577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_FILE; 736df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (IS_BLK(stat_buf.st_mode)) { 73777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak strncat(args->argstr, "(-I b) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 73877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_BLK; 7396b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifndef WINDOWS 740df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (S_ISCHR(stat_buf.st_mode)) { 74177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak strncat(args->argstr, "(-I r) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 74277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->flags |= CLD_FLG_RAW; 7436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 74477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 7456e112132382b6442b636ee39b02951d771408e8frobbiew } else { 74677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, "Can't get status on %s, defaulting to file, errno = %d\n", args->device, GETLASTERROR()); 747d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-I f) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 7486e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_FILE; 7496e112132382b6442b636ee39b02951d771408e8frobbiew } 75077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 751df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_WFSYNC) && (0 == args->sync_interval)) { 75277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(INFO, args, "Sync interval set to zero, assuming interval of 1.\n"); 75377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->sync_interval = 1; 7546e112132382b6442b636ee39b02951d771408e8frobbiew } 7556e112132382b6442b636ee39b02951d771408e8frobbiew 756df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->ltrsiz <= 0) { 7576b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew sprintf(TmpStr, "(-B %d) ", TRSIZ*BLK_SIZE); 758d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 7596e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz=TRSIZ; 7606e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz=TRSIZ; 7616e112132382b6442b636ee39b02951d771408e8frobbiew } 762df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & CLD_FLG_LBA_RNG) { 7636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk = args->start_lba / args->htrsiz; 764df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->stop_lba < 0)) 7656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk = args->stop_lba / args->htrsiz; 7666b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 767df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & CLD_FLG_BLK_RNG) { 7686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba = args->start_blk * args->htrsiz; 769df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->stop_blk < 0)) 77077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->stop_lba = (args->stop_blk * args->htrsiz) + (args->htrsiz - 1); 7716e112132382b6442b636ee39b02951d771408e8frobbiew } 77277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* if vsiz is still not set, try and get it from the file */ 773df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->vsiz <=0) && (args->flags & CLD_FLG_FILE)) { 774df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (0 != get_file_size(args->device)) { /* file size retrieved */ 77577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->vsiz=get_file_size(args->device); 77677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 777d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 77877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* if vsiz is still not set, try and get it from the device */ 779df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->vsiz <= 0) && !(args->flags & CLD_FLG_FILE)) { 7806e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz=get_vsiz(args->device); 7816e112132382b6442b636ee39b02951d771408e8frobbiew } 78277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* if vsiz is still not set, set based on given range */ 783df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->vsiz <=0) && (args->flags & (CLD_FLG_LBA_RNG|CLD_FLG_BLK_RNG))) { 784df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->stop_lba < 0)) 78577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->vsiz=args->stop_lba+1; 78677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak else 78777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->vsiz=args->start_lba+1; 78877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 78977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* if vsiz is still not set, then set it to the default size */ 790df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->vsiz <= 0) { 7916e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz=VSIZ; 7926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 793df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_VSIZ)) { 79477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak sprintf(TmpStr, N_ASSUME, args->vsiz); 795d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 7966e112132382b6442b636ee39b02951d771408e8frobbiew } 7976e112132382b6442b636ee39b02951d771408e8frobbiew 798df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->stop_lba == -1) { 7996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_lba=args->vsiz-1; 8006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 801df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->stop_blk == -1) { 80277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->stop_blk=(args->stop_lba / (OFF_T) args->htrsiz); 8036e112132382b6442b636ee39b02951d771408e8frobbiew } 804df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->t_kids == 0) { 8056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew sprintf(TmpStr, "(-K %d) ", KIDS); 806d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 8076e112132382b6442b636ee39b02951d771408e8frobbiew args->t_kids=KIDS; 8086e112132382b6442b636ee39b02951d771408e8frobbiew } 809df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & (CLD_FLG_W|CLD_FLG_R)) == 0) { 810df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & CLD_FLG_DUTY) { /* no read/write but duty cycle specified */ 811df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->rperc > 0) { 812d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_R; 813d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 814d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 815df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->wperc > 0) { 816d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_W; 817d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-w) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 818d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 819d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } else { 820d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 821d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_R; 822d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 8236e112132382b6442b636ee39b02951d771408e8frobbiew } 824df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_PTYPS)) { 825d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-c) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 8266e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_CPTYPE; 8276e112132382b6442b636ee39b02951d771408e8frobbiew } 828df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_SKTYPS)) { 82977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak strncat(args->argstr, "(-p R) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 8306e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RANDOM; 8316e112132382b6442b636ee39b02951d771408e8frobbiew } 832df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_SKS)) { 833df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->start_blk == args->stop_blk) { /* diskcache test, w/ no seek count set */ 8346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks = SEEKS; 835df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper } else if (args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG)) { /* range set, w/ no seek count */ 83677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->seeks = args->stop_blk - args->start_blk + 1; 8376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else { 83877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* if vsiz is available, calculated seeks are in terms of the largest transfer size */ 83977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak args->seeks = (args->vsiz > 0) ? (args->vsiz / args->htrsiz) : SEEKS; 8406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 841df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_LINEAR) && (args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_W)) { 8426e112132382b6442b636ee39b02951d771408e8frobbiew args->seeks *= 2; 8436e112132382b6442b636ee39b02951d771408e8frobbiew } 844d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge 845df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_TMD)) { 84677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak sprintf(TmpStr, L_ASSUME, args->seeks); 847d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 848d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 8496e112132382b6442b636ee39b02951d771408e8frobbiew } 850df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & (CLD_FLG_SKS|CLD_FLG_TMD)) || ((args->flags & CLD_FLG_CYC) && !(args->flags & (CLD_FLG_SKS|CLD_FLG_TMD)))) { 8516e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_SKS; 8526e112132382b6442b636ee39b02951d771408e8frobbiew } 853df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & (CLD_FLG_LINEAR)) { 854df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & (CLD_FLG_LUNU|CLD_FLG_LUND))) { 855d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-p u) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 8566e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LUNU; 8576e112132382b6442b636ee39b02951d771408e8frobbiew } 8586e112132382b6442b636ee39b02951d771408e8frobbiew } 8596b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew normalize_percs(args); 860df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_DUTY) && (args->flags & CLD_FLG_RANDOM) && !(args->flags & CLD_FLG_NTRLVD)) { 86177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak sprintf(TmpStr, "(-D %d:%d) ", args->rperc, args->wperc); 862d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 8636e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_DUTY; 8646e112132382b6442b636ee39b02951d771408e8frobbiew } 865df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->delayTimeMin == 0) && (args->delayTimeMax == 0) && (args->ioTimeout == DEFAULT_IO_TIMEOUT)) { 86677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak strncat(args->argstr, "(-t 0:2m) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 86777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 868df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_OFFSET)) { 86977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak strncat(args->argstr, "(-o 0) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 87077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 8716b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew 87243337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak return 0; 8736e112132382b6442b636ee39b02951d771408e8frobbiew} 8746e112132382b6442b636ee39b02951d771408e8frobbiew 8756e112132382b6442b636ee39b02951d771408e8frobbiew/* 8766e112132382b6442b636ee39b02951d771408e8frobbiew * checks validity of data after parsing 8776e112132382b6442b636ee39b02951d771408e8frobbiew * args and make assumtions. returns 0 on 8786e112132382b6442b636ee39b02951d771408e8frobbiew * success and -1 on failure. 8796e112132382b6442b636ee39b02951d771408e8frobbiew */ 8806e112132382b6442b636ee39b02951d771408e8frobbiewint check_conclusions(child_args_t *args) 8816e112132382b6442b636ee39b02951d771408e8frobbiew{ 88277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak extern unsigned long glb_flags; 88377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak struct stat stat_buf; 88477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak int rv; 88577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak 886df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_DUTY) && ((args->flags & CLD_FLG_LINEAR) || (args->flags & CLD_FLG_NTRLVD))) { 88777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, "Duty cycle testing is supported for random (-pR) tests only.\n"); 8886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 8896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 890df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_BLK_RNG) && (args->flags & CLD_FLG_RTRSIZ)) { 891d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can't have unfixed block sizes and specify seek range in terms of blocks.\n"); 8926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 8936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 894df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->vsiz < 0) || (args->ltrsiz < 1) || (args->htrsiz < 1)) { 895d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Bounds exceeded for transfer size and/or volume size.\n"); 89677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, MAXTRSIZ, (args->htrsiz*BLK_SIZE),args->vsiz); 89777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 89877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 899df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->htrsiz < args->ltrsiz) { 90077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Min transfer size, %lu, greater then Max transfer size, %lu.\n", args->ltrsiz, args->htrsiz); 9016e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9026e112132382b6442b636ee39b02951d771408e8frobbiew } 903df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->vsiz < (args->stop_lba-args->start_lba+1)) { 904d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(ERR, args, "Volume stop block/lba exceeds volume size.\n"); 9056e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9066e112132382b6442b636ee39b02951d771408e8frobbiew } 907df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->vsiz < args->htrsiz) { 90877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, VSIZETS, args->vsiz, args->htrsiz); 9096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 9106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 91108e1bdc3620b5208e3684878dd4b8e5c4cbab5d3Garrett Cooper if ((args->flags & CLD_FLG_TMD) == 0 && (args->seeks <= 0)) { 91277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN,args, TSEEK, args->seeks); 9136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 9146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 915df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_SKS) && (args->t_kids > args->seeks)) { 916d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can't have more children then max number of seeks, use -K/-L to adjust.\n"); 9176e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9186e112132382b6442b636ee39b02951d771408e8frobbiew } 919df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->start_blk > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) { 92077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, STBGTTLBA, args->start_blk, (args->vsiz / args->htrsiz)); 9216e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9226e112132382b6442b636ee39b02951d771408e8frobbiew } 923df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->stop_blk > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) { 92477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, SBGTTLBA, args->stop_blk, (args->vsiz / args->htrsiz)); 9256e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9266e112132382b6442b636ee39b02951d771408e8frobbiew } 927df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->start_lba > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) { 92877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, STLBAGTLBA, args->start_lba, args->vsiz); 9296e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9306e112132382b6442b636ee39b02951d771408e8frobbiew } 931df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->stop_lba > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) { 93277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, SLBAGTLBA, args->stop_lba, args->vsiz); 9336e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9346e112132382b6442b636ee39b02951d771408e8frobbiew } 935df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->start_blk > args->stop_blk) { 93677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(WARN, args, SBRSB, args->stop_blk, args->start_blk); 9376e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9386e112132382b6442b636ee39b02951d771408e8frobbiew } 939df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->start_lba > args->stop_lba) { 94077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, SLBARSLBA, args->stop_lba, args->start_lba); 9416e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9426e112132382b6442b636ee39b02951d771408e8frobbiew } 943df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_LBA_RNG) && (args->flags & CLD_FLG_BLK_RNG)) { 94477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't specify range in both block and LBA, use -s or -S.\n"); 9456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 9466b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 94777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak 94877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* use stat to get file properties, and test then agains specified -I */ 94977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak rv = stat(args->device, &stat_buf); 950df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (0 == rv) { /* no error on call to stat, compare against -I option */ 95177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* files are usually file type */ 9528fb1cdb0538640f295691929650408688537fb7fGarrett Cooper if ((args->flags & CLD_FLG_FILE) && !IS_FILE(stat_buf.st_mode)) { 95377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't open non-file filespec with file device type, -If.\n"); 95477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 95577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 95677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* block devices, are usually block type */ 957df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_BLK) && !IS_BLK(stat_buf.st_mode)) { 95877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't open non-block filespec with block device type, -Ib.\n"); 95977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 96077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 96177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifndef WINDOWS 96277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak /* raw devices, are usually character type */ 963df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_RAW) && !S_ISCHR(stat_buf.st_mode)) { 96477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't open non-raw filespec with raw device type, -Ir.\n"); 96577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 96677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 96777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#else 968df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (args->flags & CLD_FLG_RAW) { 96977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "RAW IO type not supported in Windows, use direct IO instead.\n"); 97077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 97177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 97277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif 97377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG 97477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } else { 97577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak PDBG1(DBUG, args, "Can't get status on %s, assuming a new file, errno = %d\n", args->device, GETLASTERROR()); 9766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 97777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 97877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak 979df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->hbeat > 0) && (args->flags & CLD_FLG_TMD) && (args->hbeat > args->run_time)) { 98077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Heartbeat should be at least equal to runtime, use -h/-T to adjust.\n"); 9816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 9826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 983df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->hbeat > 0) && !(args->flags & CLD_FLG_PRFTYPS)) { 98477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "At least one performance option, -P, must be specified when using -h.\n"); 9856e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9866e112132382b6442b636ee39b02951d771408e8frobbiew } 987df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_W) && !(args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_CMPR)) { 98877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Write only, ignoring option -E.\n"); 98977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 990df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_TMD) && (args->flags & CLD_FLG_SKS)) { 99177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't specify both -L and -T they are mutually exclusive.\n"); 99277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 99377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 994df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (((args->flags & CLD_FLG_R) && !(args->flags & CLD_FLG_W)) && (args->flags & CLD_FLG_ERR_MARK)) { 99577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't specify mark on error, -Am, in read only mode.\n"); 99677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 99777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 998df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (!(args->flags & CLD_FLG_ALLDIE) && (args->flags & CLD_FLG_ERR_MARK)) { 99977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't specify mark on error, -Am, when continue on error is set.\n"); 100077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 100177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 1002df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((glb_flags & GLB_FLG_KILL) && !(args->flags & CLD_FLG_ALLDIE)) { 100377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Can't specify global kill, -Ag, when continue on error is set, -Ac.\n"); 100477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 100577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 1006df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_LINEAR) && !(args->flags & CLD_FLG_NTRLVD) && (args->flags & CLD_FLG_TMD)) { 100777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Linear read / write test can not be timed.\n"); 100877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 100977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 1010df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_CMPR) && (args->cmp_lng > (args->ltrsiz*BLK_SIZE))) { 101177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, "Compare length, %lu, is greater then transfer size, %lu\n", args->cmp_lng, args->ltrsiz*BLK_SIZE); 101277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 101377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 1014df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_OFFSET) && (args->offset > args->stop_lba)) { 101577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, LBAOFFGSLBA, args->offset, args->stop_lba); 101677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 101777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak } 1018df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if ((args->flags & CLD_FLG_OFFSET) && ((args->offset+args->ltrsiz-1) > args->stop_lba)) { 101977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak pMsg(ERR, args, LBAOTSGSLBA, args->offset, args->ltrsiz, args->stop_lba); 102077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak return(-1); 1021d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 102243337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak return 0; 1023a9e49f17aa62b553a30a915114823302eadc54d3Garrett Cooper} 1024