parse.c revision d18ffdd88be3c62d027fd49a115bc9c4fe4b910c
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* 25d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* $Id: parse.c,v 1.5 2005/05/04 17:54:00 mridge Exp $ 266e112132382b6442b636ee39b02951d771408e8frobbiew* $Log: parse.c,v $ 27d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.5 2005/05/04 17:54:00 mridge 28d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Update to version 1.2.8 29d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* 30d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.18 2005/04/28 21:25:18 yardleyb 31d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Fixed up some issues with AIX compilation due to the change made 32d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* in endian support in Linux. 33d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* 34d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.17 2005/01/08 21:18:34 yardleyb 35d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Update performance output and usage. Fixed pass count check 36d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* 37d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.16 2004/12/18 06:13:03 yardleyb 38d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Updated timer schema to more accurately use the time options. Added 39d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* fsync on write option to -If. 40d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* 41d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.15 2004/11/20 05:05:58 yardleyb 42d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* added more command line checking 43d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* 44d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.14 2004/11/20 04:43:42 yardleyb 45d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Minor code fixes. Checking for alloc errors. 46d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* 47d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.13 2004/11/02 20:47:13 yardleyb 48d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Added -F functions. 49d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* lots of minor fixes. see README 503c4780d44b6598841455e234e6f152fbf36a397drobbiew* 5163f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Revision 1.12 2003/09/12 21:47:22 yardleyb 5263f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Removed a debug message 5363f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* 5463f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Revision 1.11 2003/09/12 18:10:09 yardleyb 5563f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Updated to version 1.11 5663f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Code added to fix compile 5763f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* time warnings 5863f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* 5963f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Revision 1.10 2003/04/08 17:21:19 yardleyb 6063f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Added get volume size code for any AIX volume type 616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.9 2002/05/31 18:47:59 yardleyb 636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Updates to -pl -pL options. 646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Fixed test status to fail on 656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* failure to open filespec. 666b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Version set to 1.1.9 676b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.8 2002/04/24 01:45:31 yardleyb 696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Minor Fixes: 706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Read/write time could exceeds overall time 716b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Heartbeat options sometimes only displayed once 726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Cleanup time for large number of threads was very long (windows) 736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* If heartbeat specified, now checks for performance option also 746b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* No IO was performed when -S0:0 and -pr specified 756b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.7 2002/03/30 01:32:14 yardleyb 776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Major Changes: 786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Added Dumping routines for 806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* data miscompares, 816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Updated performance output 836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* based on command line. Gave 846b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* one decimal in MB/s output. 856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Rewrote -pL IO routine to show 876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* correct stats. Now show pass count 886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* when using -C. 896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Minor Changes: 916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Code cleanup to remove the plethera 936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* if #ifdef for windows/unix functional 946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* differences. 956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.6 2002/03/07 03:38:52 yardleyb 976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Added dump function from command 986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* line. Created formatted dump output 996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* for Data miscomare and command line. 1006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Can now leave off filespec the full 1016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* path header as it will be added based 1026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* on -I. 1036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* 1046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.5 2002/02/26 19:35:59 yardleyb 1056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Updates to parsing routines for user 1066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* input. Added multipliers for -S and 1076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* -s command line arguments. Forced 1086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* default seeks to default if performing 1096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* a diskcache test. 1106e112132382b6442b636ee39b02951d771408e8frobbiew* 1116e112132382b6442b636ee39b02951d771408e8frobbiew* Revision 1.4 2002/02/19 02:46:37 yardleyb 1126e112132382b6442b636ee39b02951d771408e8frobbiew* Added changes to compile for AIX. 1136e112132382b6442b636ee39b02951d771408e8frobbiew* Update getvsiz so it returns a -1 1146e112132382b6442b636ee39b02951d771408e8frobbiew* if the ioctl fails and we handle 1156e112132382b6442b636ee39b02951d771408e8frobbiew* that fact correctly. Added check 1166e112132382b6442b636ee39b02951d771408e8frobbiew* to force vsiz to always be greater 1176e112132382b6442b636ee39b02951d771408e8frobbiew* then stop_lba. 1186e112132382b6442b636ee39b02951d771408e8frobbiew* 1196e112132382b6442b636ee39b02951d771408e8frobbiew* Revision 1.3 2002/02/04 20:35:38 yardleyb 1206e112132382b6442b636ee39b02951d771408e8frobbiew* Changed max. number of threads to 64k. 1216e112132382b6442b636ee39b02951d771408e8frobbiew* Check for max threads in parsing. 1226e112132382b6442b636ee39b02951d771408e8frobbiew* Fixed windows getopt to return correctly 1236e112132382b6442b636ee39b02951d771408e8frobbiew* when a bad option is given. 1246e112132382b6442b636ee39b02951d771408e8frobbiew* Update time output to be in the format: 1256e112132382b6442b636ee39b02951d771408e8frobbiew* YEAR/MONTH/DAY-HOUR:MIN:SEC 1266e112132382b6442b636ee39b02951d771408e8frobbiew* instead of epoch time. 1276e112132382b6442b636ee39b02951d771408e8frobbiew* 1286e112132382b6442b636ee39b02951d771408e8frobbiew* Revision 1.2 2001/12/04 19:25:47 yardleyb 1296e112132382b6442b636ee39b02951d771408e8frobbiew* Finished removeal of -t option 1306e112132382b6442b636ee39b02951d771408e8frobbiew* 1316e112132382b6442b636ee39b02951d771408e8frobbiew* Revision 1.1 2001/12/04 18:51:06 yardleyb 1326e112132382b6442b636ee39b02951d771408e8frobbiew* Checkin of new source files and removal 1336e112132382b6442b636ee39b02951d771408e8frobbiew* of outdated source 1346e112132382b6442b636ee39b02951d771408e8frobbiew* 1356e112132382b6442b636ee39b02951d771408e8frobbiew*/ 1366e112132382b6442b636ee39b02951d771408e8frobbiew#include <sys/types.h> 1376e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdio.h> 1386e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdlib.h> 1396e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdarg.h> 1406e112132382b6442b636ee39b02951d771408e8frobbiew#include <signal.h> 1416e112132382b6442b636ee39b02951d771408e8frobbiew#include <time.h> 1426e112132382b6442b636ee39b02951d771408e8frobbiew#include <errno.h> 1436e112132382b6442b636ee39b02951d771408e8frobbiew#include <fcntl.h> 1446e112132382b6442b636ee39b02951d771408e8frobbiew#include <string.h> 1456e112132382b6442b636ee39b02951d771408e8frobbiew#include <ctype.h> 1466e112132382b6442b636ee39b02951d771408e8frobbiew 1476e112132382b6442b636ee39b02951d771408e8frobbiew#include "globals.h" 1486e112132382b6442b636ee39b02951d771408e8frobbiew#include "threading.h" 1496e112132382b6442b636ee39b02951d771408e8frobbiew#include "main.h" 1506e112132382b6442b636ee39b02951d771408e8frobbiew#include "usage.h" 1516e112132382b6442b636ee39b02951d771408e8frobbiew#include "sfunc.h" 1526e112132382b6442b636ee39b02951d771408e8frobbiew#include "parse.h" 1536e112132382b6442b636ee39b02951d771408e8frobbiew 1546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiewint fill_cld_args(int argc, char **argv, child_args_t *args) 1556e112132382b6442b636ee39b02951d771408e8frobbiew{ 1566e112132382b6442b636ee39b02951d771408e8frobbiew extern char *optarg; 1576e112132382b6442b636ee39b02951d771408e8frobbiew extern int optind; 1586e112132382b6442b636ee39b02951d771408e8frobbiew extern unsigned long glb_flags; 1596b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew 1606b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew signed char c; 1616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew char *leftovers; 1626e112132382b6442b636ee39b02951d771408e8frobbiew 163d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge while((c = getopt(argc, argv, "?a:AB:cC:dD:E:f:Fh:I:K:L:m:nN:op:P:qQrs:S:t:T:wvV:z")) != -1) { 1646e112132382b6442b636ee39b02951d771408e8frobbiew switch(c) { 1656e112132382b6442b636ee39b02951d771408e8frobbiew case ':' : 166d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Missing argument for perameter.\n"); 1676e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 1686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 1696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew case 'V' : 1706e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 171d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 1726e112132382b6442b636ee39b02951d771408e8frobbiew exit(1); 1736e112132382b6442b636ee39b02951d771408e8frobbiew } 1746e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(optarg[0])) { 175d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c argument is non numeric.\n", c); 1766e112132382b6442b636ee39b02951d771408e8frobbiew exit(1); 1776e112132382b6442b636ee39b02951d771408e8frobbiew } 1786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew gbl_dbg_lvl = atoi(optarg); 1796e112132382b6442b636ee39b02951d771408e8frobbiew break; 1806e112132382b6442b636ee39b02951d771408e8frobbiew case 'd' : 1816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew glb_flags |= GLB_FLG_QUIET; 1826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->flags |= CLD_FLG_DUMP; 1836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew break; 1846b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew case 'a' : 1856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(optarg == NULL) { 186d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 1876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 1886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 1896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!isdigit(optarg[0])) { 190d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 1916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 1926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 1936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seed = (unsigned int) atoi(optarg); 1946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew break; 1956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew case 'A' : 1966e112132382b6442b636ee39b02951d771408e8frobbiew args->flags &= ~CLD_FLG_ALLDIE; 1976e112132382b6442b636ee39b02951d771408e8frobbiew break; 1986e112132382b6442b636ee39b02951d771408e8frobbiew case 'q' : 1996e112132382b6442b636ee39b02951d771408e8frobbiew glb_flags |= GLB_FLG_QUIET; 2006e112132382b6442b636ee39b02951d771408e8frobbiew break; 2016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew case 'Q' : 2026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew glb_flags |= GLB_FLG_SUPRESS; 2036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew break; 2046e112132382b6442b636ee39b02951d771408e8frobbiew case 'v' : 205d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(INFO, args, "Version %s\n", VER_STR); 2066e112132382b6442b636ee39b02951d771408e8frobbiew exit(0); 2076e112132382b6442b636ee39b02951d771408e8frobbiew case 'p' : 2086e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 209d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 2106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 2126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->flags & (CLD_FLG_LINEAR|CLD_FLG_RANDOM)) { 213d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Only one seek type, -p, can be specified.\n"); 2146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2156e112132382b6442b636ee39b02951d771408e8frobbiew } 2166e112132382b6442b636ee39b02951d771408e8frobbiew /* seek pattern type */ 2176e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'L')) 2186e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LINEAR; 2196e112132382b6442b636ee39b02951d771408e8frobbiew else if (strchr(optarg,'l')) 2206e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= (CLD_FLG_LINEAR|CLD_FLG_NTRLVD); 2216e112132382b6442b636ee39b02951d771408e8frobbiew else if (strchr(optarg,'R') || strchr(optarg,'r')) 2226e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RANDOM; 2236e112132382b6442b636ee39b02951d771408e8frobbiew else { 224d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Unknown Seek pattern\n"); 2256e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2276e112132382b6442b636ee39b02951d771408e8frobbiew } 2286e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'U') || strchr(optarg,'u')) 2296e112132382b6442b636ee39b02951d771408e8frobbiew if((args->flags & (CLD_FLG_LINEAR)) && 2306e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_LUND)) 2316e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LUNU; 2326e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'D') || strchr(optarg,'d')) 2336e112132382b6442b636ee39b02951d771408e8frobbiew if((args->flags & (CLD_FLG_LINEAR)) && 2346e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_LUNU)) 2356e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LUND; 2366e112132382b6442b636ee39b02951d771408e8frobbiew break; 2376e112132382b6442b636ee39b02951d771408e8frobbiew case 'B' : 2386e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(optarg[0])) { 239d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 2406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2416e112132382b6442b636ee39b02951d771408e8frobbiew } 2426e112132382b6442b636ee39b02951d771408e8frobbiew if(strchr(optarg,':') != NULL) { /* we are given a range of transfer sizes */ 2436e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RTRSIZ; 2446e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz = strtoul(optarg, &leftovers, 10); 2456e112132382b6442b636ee39b02951d771408e8frobbiew if(leftovers == strchr(leftovers,'k')) { /* first value had a 'k' */ 2466e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz *= 2; 2476e112132382b6442b636ee39b02951d771408e8frobbiew leftovers++; 2486e112132382b6442b636ee39b02951d771408e8frobbiew } else { 2496e112132382b6442b636ee39b02951d771408e8frobbiew if (args->ltrsiz > 256) 2506b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->ltrsiz /= BLK_SIZE; 2516e112132382b6442b636ee39b02951d771408e8frobbiew } 2526e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(leftovers[1])) { 253d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 2546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2556e112132382b6442b636ee39b02951d771408e8frobbiew } 2566e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz = atol((char *)strchr(leftovers,':')+1); 2576e112132382b6442b636ee39b02951d771408e8frobbiew if((strchr(leftovers,'k')) != NULL) {/* second value had a 'k' */ 2586e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz *= 2; 2596e112132382b6442b636ee39b02951d771408e8frobbiew } else { 2606e112132382b6442b636ee39b02951d771408e8frobbiew if (args->htrsiz > 256) 2616e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz /= BLK_SIZE; 2626e112132382b6442b636ee39b02951d771408e8frobbiew } 2636e112132382b6442b636ee39b02951d771408e8frobbiew } else { /* only a single value given for transfer size */ 2646e112132382b6442b636ee39b02951d771408e8frobbiew if(strchr(optarg,'k')) { 2656e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz = atoi(optarg); 2666e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz *= 2; 2676e112132382b6442b636ee39b02951d771408e8frobbiew } else { 2686e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz = atoi(optarg); 2696e112132382b6442b636ee39b02951d771408e8frobbiew if (args->ltrsiz > 256) 2706e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz /= BLK_SIZE; 2716e112132382b6442b636ee39b02951d771408e8frobbiew } 2726e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz = args->ltrsiz; 2736e112132382b6442b636ee39b02951d771408e8frobbiew } 274d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge PDBG5(DEBUG, args, "Parsed Transfer size: %ld\n", args->htrsiz); 2756e112132382b6442b636ee39b02951d771408e8frobbiew break; 2766e112132382b6442b636ee39b02951d771408e8frobbiew case 'c' : 2776e112132382b6442b636ee39b02951d771408e8frobbiew if(args->flags & CLD_FLG_PTYPS) { 278d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Please specify only one pattern type\n"); 2796e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2816e112132382b6442b636ee39b02951d771408e8frobbiew } 2826e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_CPTYPE; 2836e112132382b6442b636ee39b02951d771408e8frobbiew break; 2846e112132382b6442b636ee39b02951d771408e8frobbiew case 'n' : 2856e112132382b6442b636ee39b02951d771408e8frobbiew if(args->flags & CLD_FLG_PTYPS) { 286d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Please specify only one pattern type\n"); 2876e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 2886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2896e112132382b6442b636ee39b02951d771408e8frobbiew } 2906e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LPTYPE; 2916e112132382b6442b636ee39b02951d771408e8frobbiew break; 2926e112132382b6442b636ee39b02951d771408e8frobbiew case 'f' : 2936e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 294d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 2956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 2966e112132382b6442b636ee39b02951d771408e8frobbiew } 2976e112132382b6442b636ee39b02951d771408e8frobbiew if(args->flags & CLD_FLG_PTYPS) { 298d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Please specify only one pattern type\n"); 2996e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 3006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3016e112132382b6442b636ee39b02951d771408e8frobbiew } 3026e112132382b6442b636ee39b02951d771408e8frobbiew args->pattern = my_strtofft(optarg); 3036e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_FPTYPE; 3046e112132382b6442b636ee39b02951d771408e8frobbiew break; 305d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge case 'F' : 306d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge /* the filespec is a list of filespecs in a file */ 307d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_FSLIST; 308d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge break; 3096e112132382b6442b636ee39b02951d771408e8frobbiew case 'z' : 3106e112132382b6442b636ee39b02951d771408e8frobbiew if(args->flags & CLD_FLG_PTYPS) { 311d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Please specify only one pattern type\n"); 3126e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 3136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3146e112132382b6442b636ee39b02951d771408e8frobbiew } 3156e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RPTYPE; 3166e112132382b6442b636ee39b02951d771408e8frobbiew break; 3176e112132382b6442b636ee39b02951d771408e8frobbiew case 'h' : 3186e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 319d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 3206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3216e112132382b6442b636ee39b02951d771408e8frobbiew } 3226e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(optarg[0])) { 323d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 3246e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 3256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3266e112132382b6442b636ee39b02951d771408e8frobbiew } 327d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_HBEAT; 3286e112132382b6442b636ee39b02951d771408e8frobbiew args->hbeat = atoi(optarg); 3296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(strchr(optarg,'m')) { /* multiply by sec */ 3306b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->hbeat *= 60; 3316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'h')) { /* multiply sec*min */ 3326b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->hbeat *= (time_t) (60*60); 3336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'d')) { /* multiply by sec*min*hours */ 3346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->hbeat *= (time_t) (60*60*24); 3356b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 3366e112132382b6442b636ee39b02951d771408e8frobbiew break; 3376e112132382b6442b636ee39b02951d771408e8frobbiew case 'D' : 3386e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 339d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 3406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3416e112132382b6442b636ee39b02951d771408e8frobbiew } 3426e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(optarg[0])) { 343d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 3446e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 3456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3466e112132382b6442b636ee39b02951d771408e8frobbiew } 3476e112132382b6442b636ee39b02951d771408e8frobbiew args->rperc = atoi(optarg); 3486e112132382b6442b636ee39b02951d771408e8frobbiew args->wperc = atoi((char *)(strchr(optarg,':')+1)); 3496e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_DUTY; 3506e112132382b6442b636ee39b02951d771408e8frobbiew break; 3516e112132382b6442b636ee39b02951d771408e8frobbiew case 'r' : 3526e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_R; 3536e112132382b6442b636ee39b02951d771408e8frobbiew break; 3546e112132382b6442b636ee39b02951d771408e8frobbiew case 'w' : 3556e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_W; 3566e112132382b6442b636ee39b02951d771408e8frobbiew break; 3576e112132382b6442b636ee39b02951d771408e8frobbiew case 'o' : { args->flags |= CLD_FLG_SQNCE; break; } 3586e112132382b6442b636ee39b02951d771408e8frobbiew case 't' : 3596e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 360d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 3616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3626e112132382b6442b636ee39b02951d771408e8frobbiew } 3636e112132382b6442b636ee39b02951d771408e8frobbiew args->retries = atoi(optarg); 364d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(ERR, args, "-%c not implemented...\n", c); 3656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3666e112132382b6442b636ee39b02951d771408e8frobbiew break; 3676e112132382b6442b636ee39b02951d771408e8frobbiew case 'm' : 3686e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 369d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 3706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3716e112132382b6442b636ee39b02951d771408e8frobbiew } 3726e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'L') || strchr(optarg,'l')) 3736e112132382b6442b636ee39b02951d771408e8frobbiew args->mrk_flag |= MARK_LAST; 3746e112132382b6442b636ee39b02951d771408e8frobbiew else if (strchr(optarg,'F') || strchr(optarg,'f')) 3756e112132382b6442b636ee39b02951d771408e8frobbiew args->mrk_flag |= MARK_FIRST; 3766e112132382b6442b636ee39b02951d771408e8frobbiew else if (strchr(optarg,'A') || strchr(optarg,'a')) 3776e112132382b6442b636ee39b02951d771408e8frobbiew args->mrk_flag |= MARK_ALL; 3786e112132382b6442b636ee39b02951d771408e8frobbiew else { 379d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Unknown mark type.\n"); 3806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3816e112132382b6442b636ee39b02951d771408e8frobbiew } 3826e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_MBLK; 3836e112132382b6442b636ee39b02951d771408e8frobbiew break; 3846e112132382b6442b636ee39b02951d771408e8frobbiew case 'E' : 3856e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 386d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 3876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3886e112132382b6442b636ee39b02951d771408e8frobbiew } 3896e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(optarg[0])) { 390d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments are non numeric.\n", c); 3916e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 3926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 3936e112132382b6442b636ee39b02951d771408e8frobbiew } 3946e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_CMPR; 3956e112132382b6442b636ee39b02951d771408e8frobbiew args->cmp_lng = strtol(optarg,NULL,0); 3966e112132382b6442b636ee39b02951d771408e8frobbiew break; 3976e112132382b6442b636ee39b02951d771408e8frobbiew case 'N' : 3986e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 399d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 4006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4016e112132382b6442b636ee39b02951d771408e8frobbiew } 4026e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(optarg[0])) { 403d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments are non numeric.\n", c); 4046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4056e112132382b6442b636ee39b02951d771408e8frobbiew } 4066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->flags |= CLD_FLG_VSIZ; 4076e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz = my_strtofft(optarg); 4086e112132382b6442b636ee39b02951d771408e8frobbiew if(strchr(optarg,'k')) { /* multiply by 2^10 */ 4096e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz <<= 10; 4106e112132382b6442b636ee39b02951d771408e8frobbiew } else if(strchr(optarg,'K')) { /* multiply 10^3 */ 4116e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz *= 1000; 4126e112132382b6442b636ee39b02951d771408e8frobbiew } else if(strchr(optarg,'m')) { /* multiply by 2^20 */ 4136e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz <<= 20; 4146e112132382b6442b636ee39b02951d771408e8frobbiew } else if(strchr(optarg,'M')) { /* multiply by 10^6 */ 4156e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz *= 1000000; 4166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'g')) { /* multiply by 2^30 */ 4176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->vsiz <<= 30; 4186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'G')) { /* multiply by 10^9 */ 4196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->vsiz *= 1000000000; 4206e112132382b6442b636ee39b02951d771408e8frobbiew } 4216e112132382b6442b636ee39b02951d771408e8frobbiew break; 4226e112132382b6442b636ee39b02951d771408e8frobbiew case 'I' : 4236e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 424d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 4256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4266e112132382b6442b636ee39b02951d771408e8frobbiew } 4276e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'R') || strchr(optarg,'r')) { 4286e112132382b6442b636ee39b02951d771408e8frobbiew if (!(args->flags & CLD_FLG_BLK) && 4296e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_FILE)) { 4306e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RAW; 4316e112132382b6442b636ee39b02951d771408e8frobbiew } else { 432d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can only specify one IO type\n"); 4336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4346e112132382b6442b636ee39b02951d771408e8frobbiew } 4356e112132382b6442b636ee39b02951d771408e8frobbiew } 4366e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'B') || strchr(optarg,'b')) { 4376e112132382b6442b636ee39b02951d771408e8frobbiew if (!(args->flags & CLD_FLG_RAW) && 4386e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_FILE)) { 4396e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_BLK; 4406e112132382b6442b636ee39b02951d771408e8frobbiew } else { 441d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can only specify one IO type\n"); 4426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4436e112132382b6442b636ee39b02951d771408e8frobbiew } 4446e112132382b6442b636ee39b02951d771408e8frobbiew } 4456e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'F') || strchr(optarg,'f')) { 4466e112132382b6442b636ee39b02951d771408e8frobbiew if (!(args->flags & CLD_FLG_RAW) && 4476e112132382b6442b636ee39b02951d771408e8frobbiew !(args->flags & CLD_FLG_BLK)) { 4486e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_FILE; 4496e112132382b6442b636ee39b02951d771408e8frobbiew } else { 450d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can only specify one IO type\n"); 4516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4526e112132382b6442b636ee39b02951d771408e8frobbiew } 4536e112132382b6442b636ee39b02951d771408e8frobbiew } 454d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if (strchr(optarg,'D') || strchr(optarg,'d')) { 4556e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_DIRECT; 456d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 457d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if (strchr(optarg,'S') || strchr(optarg,'s')) { 458d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if(!(args->flags & CLD_FLG_FILE)) { 459d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can only specify fsync with file IO\n"); 460d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge return(-1); 461d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 462d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_WFSYNC; 463d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 4646e112132382b6442b636ee39b02951d771408e8frobbiew break; 4656e112132382b6442b636ee39b02951d771408e8frobbiew case 'T' : 4666e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 467d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 4686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4696e112132382b6442b636ee39b02951d771408e8frobbiew } 4706e112132382b6442b636ee39b02951d771408e8frobbiew args->run_time = atoi(optarg); 4716e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_TMD; 4726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(strchr(optarg,'m')) { /* multiply by sec */ 4736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->run_time *= 60; 4746b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'h')) { /* multiply sec*min */ 4756b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->run_time *= (time_t) (60*60); 4766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'d')) { /* multiply by sec*min*hours */ 4776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->run_time *= (time_t) (60*60*24); 4786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 4796e112132382b6442b636ee39b02951d771408e8frobbiew break; 4806e112132382b6442b636ee39b02951d771408e8frobbiew case 'L' : 4816e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 482d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 4836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 4846e112132382b6442b636ee39b02951d771408e8frobbiew } 4856e112132382b6442b636ee39b02951d771408e8frobbiew args->seeks = atoi(optarg); 4866e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_SKS; 4876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(strchr(optarg,'k')) { /* multiply by 2^10 */ 4886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks <<= 10; 4896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'K')) { /* multiply 10^3 */ 4906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks *= 1000; 4916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'m')) { /* multiply by 2^20 */ 4926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks <<= 20; 4936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'M')) { /* multiply by 10^6 */ 4946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks *= 1000000; 4956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'g')) { /* multiply by 2^30 */ 4966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks <<= 30; 4976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(strchr(optarg,'G')) { /* multiply by 10^9 */ 4986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks *= 1000000000; 4996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 5006e112132382b6442b636ee39b02951d771408e8frobbiew break; 5016e112132382b6442b636ee39b02951d771408e8frobbiew case 'C' : 5026e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 503d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 5046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5056e112132382b6442b636ee39b02951d771408e8frobbiew } 5066e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(optarg[0])) { 507d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 5086e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 5096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5106e112132382b6442b636ee39b02951d771408e8frobbiew } 5116e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_CYC; 5126e112132382b6442b636ee39b02951d771408e8frobbiew args->cycles = atol(optarg); 5136e112132382b6442b636ee39b02951d771408e8frobbiew break; 5146e112132382b6442b636ee39b02951d771408e8frobbiew case 'K' : 5156e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 516d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 5176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5186e112132382b6442b636ee39b02951d771408e8frobbiew } 5196e112132382b6442b636ee39b02951d771408e8frobbiew if(!isdigit(optarg[0])) { 520d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 5216e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 5226b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5236e112132382b6442b636ee39b02951d771408e8frobbiew } 5246e112132382b6442b636ee39b02951d771408e8frobbiew if(atoi(optarg) > MAX_THREADS) { 525d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "%u exceeds max of %u threads.\n", atoi(optarg), MAX_THREADS); 5266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5276e112132382b6442b636ee39b02951d771408e8frobbiew } 5286e112132382b6442b636ee39b02951d771408e8frobbiew args->t_kids = atoi(optarg); 5296e112132382b6442b636ee39b02951d771408e8frobbiew break; 5306e112132382b6442b636ee39b02951d771408e8frobbiew case 'P' : 5316e112132382b6442b636ee39b02951d771408e8frobbiew if(optarg == NULL) { 532d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c option requires an argument.\n", c); 5336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5346e112132382b6442b636ee39b02951d771408e8frobbiew } 5356e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'X')) { /* returns NULL if char is not found */ 5366e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_XFERS; 5376e112132382b6442b636ee39b02951d771408e8frobbiew } 5386e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'T')) { 5396e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_TPUTS; 5406e112132382b6442b636ee39b02951d771408e8frobbiew } 5416e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'P')) { 5426e112132382b6442b636ee39b02951d771408e8frobbiew glb_flags |= GLB_FLG_PERFP; 5436e112132382b6442b636ee39b02951d771408e8frobbiew } 5446e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'R')) { 5456e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RUNT; 5466e112132382b6442b636ee39b02951d771408e8frobbiew } 547d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if (strchr(optarg,'C')) { 548d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_PCYC; 549d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 5506e112132382b6442b636ee39b02951d771408e8frobbiew if (strchr(optarg,'A')) { 551d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_PRFTYPS; 5526e112132382b6442b636ee39b02951d771408e8frobbiew } 5536e112132382b6442b636ee39b02951d771408e8frobbiew if (!strchr(optarg,'P') && 5546e112132382b6442b636ee39b02951d771408e8frobbiew !strchr(optarg,'A') && 5556e112132382b6442b636ee39b02951d771408e8frobbiew !strchr(optarg,'X') && 5566e112132382b6442b636ee39b02951d771408e8frobbiew !strchr(optarg,'R') && 557d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge !strchr(optarg,'C') && 5586e112132382b6442b636ee39b02951d771408e8frobbiew !strchr(optarg,'T')) { 559d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Unknown performance option\n"); 5606b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5616e112132382b6442b636ee39b02951d771408e8frobbiew } 5626e112132382b6442b636ee39b02951d771408e8frobbiew break; 5636e112132382b6442b636ee39b02951d771408e8frobbiew case 'S' : 5646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!isdigit((int)optarg[0])) { 565d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 5666b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5676e112132382b6442b636ee39b02951d771408e8frobbiew } 5686e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_BLK_RNG; 5696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(strchr(optarg,':') != NULL) { /* we are given a range */ 5706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 10); 5716b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 5726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk <<= 10; 5736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 5746b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 5756b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk *= 1000; 5766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 5776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 5786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk <<= 20; 5796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 5806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 5816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk *= 1000000; 5826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 5836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 5846b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* should be at the next value */ 5856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!isdigit((int) leftovers[0])) { 586d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c arguments is non numeric.\n", c); 5876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 5886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 5896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk = (OFF_T) strtoul(leftovers, &leftovers, 10); 5906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 5916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk <<= 10; 5926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 5936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk *= 1000; 5946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 5956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk <<= 20; 5966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 5976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk *= 1000000; 5986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 5996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else { /* only a single value given */ 6006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 10); 6016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk <<= 10; 6036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk *= 1000; 6056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk <<= 20; 6076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk *= 1000000; 6096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6116e112132382b6442b636ee39b02951d771408e8frobbiew break; 6126e112132382b6442b636ee39b02951d771408e8frobbiew case 's' : 6136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!isdigit((int)optarg[0])) { 614d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c argument is non numeric.\n", c); 6156b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 6166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->flags |= CLD_FLG_LBA_RNG; 6186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(strchr(optarg,':') != NULL) { /* we are given a range */ 6196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 10); 6206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba <<= 10; 6226b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 6236b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6246b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba *= 1000; 6256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 6266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6276b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba <<= 20; 6286b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 6296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6306b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba *= 1000000; 6316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* at the ':' */ 6326b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew leftovers++; /* should be at the next value */ 6346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!isdigit((int) leftovers[0])) { 635d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "-%c second argument is non numeric.\n", c); 6366b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 6376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_lba = (OFF_T) strtoul(leftovers, &leftovers, 10); 6396b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6406e112132382b6442b636ee39b02951d771408e8frobbiew args->stop_lba <<= 10; 6416b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6426e112132382b6442b636ee39b02951d771408e8frobbiew args->stop_lba *= 1000; 6436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6446e112132382b6442b636ee39b02951d771408e8frobbiew args->stop_lba <<= 20; 6456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6466e112132382b6442b636ee39b02951d771408e8frobbiew args->stop_lba *= 1000000; 6476e112132382b6442b636ee39b02951d771408e8frobbiew } 6486b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else { /* only a single value given */ 6496b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 10); 6506b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */ 6516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba <<= 10; 6526b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */ 6536b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba *= 1000; 6546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */ 6556b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba <<= 20; 6566b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */ 6576b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba *= 1000000; 6586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 6596e112132382b6442b636ee39b02951d771408e8frobbiew } 6606e112132382b6442b636ee39b02951d771408e8frobbiew break; 6616e112132382b6442b636ee39b02951d771408e8frobbiew case '?' : 6626e112132382b6442b636ee39b02951d771408e8frobbiew default : 6636e112132382b6442b636ee39b02951d771408e8frobbiew usage(); 6646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 6656e112132382b6442b636ee39b02951d771408e8frobbiew } 6666e112132382b6442b636ee39b02951d771408e8frobbiew } 6676e112132382b6442b636ee39b02951d771408e8frobbiew if(argv[optind] == NULL) { 668d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Unspecified target.\n"); 6696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 6706e112132382b6442b636ee39b02951d771408e8frobbiew } 671d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncpy(args->device, argv[optind], (DEV_NAME_LEN-1)); 6726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(0); 6736e112132382b6442b636ee39b02951d771408e8frobbiew} 6746e112132382b6442b636ee39b02951d771408e8frobbiew 675d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridgeint make_assumptions(child_args_t *args) 6766e112132382b6442b636ee39b02951d771408e8frobbiew{ 6776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew char TmpStr[80]; 6786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew char *device; 6796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew 6806e112132382b6442b636ee39b02951d771408e8frobbiew if(!(args->flags & CLD_FLG_IOTYPS)) { 681d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if((device = (char *) ALLOC(strlen(args->device)+1)) == NULL) { 682d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(ERR, args, "%d : Could not create device string map.\n"); 683d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge return 1; 684d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 685d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge 6866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew memset(device, 0, strlen(args->device)+1); 6876e112132382b6442b636ee39b02951d771408e8frobbiew strncpy(device, args->device, strlen(args->device)); 6886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifndef WINDOWS 6896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(strstr(strlwr(device), RAWDEVICESTR) != NULL) { 690d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-I r) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 6916e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RAW; 6926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else 6936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 6946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(strstr(strupr(device), BLKDEVICESTR) != NULL) { 695d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-I b) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 6966e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_BLK; 6976e112132382b6442b636ee39b02951d771408e8frobbiew } else { 698d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-I f) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 6996e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_FILE; 7006e112132382b6442b636ee39b02951d771408e8frobbiew } 7016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew FREE(device); 7026e112132382b6442b636ee39b02951d771408e8frobbiew } 7036e112132382b6442b636ee39b02951d771408e8frobbiew 7046e112132382b6442b636ee39b02951d771408e8frobbiew if(args->ltrsiz <= 0) { 7056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew sprintf(TmpStr, "(-B %d) ", TRSIZ*BLK_SIZE); 706d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 7076e112132382b6442b636ee39b02951d771408e8frobbiew args->ltrsiz=TRSIZ; 7086e112132382b6442b636ee39b02951d771408e8frobbiew args->htrsiz=TRSIZ; 7096e112132382b6442b636ee39b02951d771408e8frobbiew } 7106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->flags & CLD_FLG_LBA_RNG) { 7116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_blk = args->start_lba / args->htrsiz; 7126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!(args->stop_lba < 0)) 7136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk = args->stop_lba / args->htrsiz; 7146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 7156e112132382b6442b636ee39b02951d771408e8frobbiew if(args->flags & CLD_FLG_BLK_RNG) { 7166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->start_lba = args->start_blk * args->htrsiz; 7176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!(args->stop_blk < 0)) 7186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_lba = args->stop_blk * args->htrsiz; 7196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 7206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew /* override volume size in cases were range is given */ 7216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->flags & CLD_FLG_LBA_RNG) { 7226b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!(args->stop_lba < 0)) 7236b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->vsiz=args->stop_lba-args->start_lba+1; 7246b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 7256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->flags & CLD_FLG_BLK_RNG) { 7266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!(args->stop_lba < 0)) 7276b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->vsiz=args->stop_lba-args->start_lba+args->htrsiz; 7286e112132382b6442b636ee39b02951d771408e8frobbiew } 729d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if((args->vsiz <=0) && (args->flags & CLD_FLG_FILE)) { 730d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->vsiz=get_file_size(args->device); 731d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 7326b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef AIX 7336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->vsiz <= 0) { args->vsiz=get_vsiz(args->device); } 7346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else 7356e112132382b6442b636ee39b02951d771408e8frobbiew if((args->vsiz <= 0) && (args->flags & CLD_FLG_BLK)) { 7366e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz=get_vsiz(args->device); 7376e112132382b6442b636ee39b02951d771408e8frobbiew } 7386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 7396e112132382b6442b636ee39b02951d771408e8frobbiew if(args->vsiz <= 0) { 7406e112132382b6442b636ee39b02951d771408e8frobbiew args->vsiz=VSIZ; 7416b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 7426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!(args->flags & CLD_FLG_VSIZ)) { 7436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef WINDOWS 7446b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew sprintf(TmpStr, "(-N %I64d) ", args->vsiz); 7456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else 7466b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew sprintf(TmpStr, "(-N %lld) ", args->vsiz); 7476b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 748d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 7496e112132382b6442b636ee39b02951d771408e8frobbiew } 7506e112132382b6442b636ee39b02951d771408e8frobbiew 7516e112132382b6442b636ee39b02951d771408e8frobbiew if(args->stop_lba == -1) { 7526b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_lba=args->vsiz-1; 7536b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 7546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->stop_blk == -1) { 7556b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->stop_blk=(args->vsiz / (OFF_T) args->htrsiz) - 1; 7566e112132382b6442b636ee39b02951d771408e8frobbiew } 7576e112132382b6442b636ee39b02951d771408e8frobbiew if(args->t_kids == 0) { 7586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew sprintf(TmpStr, "(-K %d) ", KIDS); 759d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 7606e112132382b6442b636ee39b02951d771408e8frobbiew args->t_kids=KIDS; 7616e112132382b6442b636ee39b02951d771408e8frobbiew } 7626e112132382b6442b636ee39b02951d771408e8frobbiew if((args->flags & (CLD_FLG_W|CLD_FLG_R)) == 0) { 763d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if(args->flags & CLD_FLG_DUTY) { /* no read/write but duty cycle specified */ 764d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if(args->rperc > 0) { 765d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_R; 766d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 767d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 768d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if(args->wperc > 0) { 769d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_W; 770d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-w) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 771d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 772d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } else { 773d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 774d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge args->flags |= CLD_FLG_R; 775d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 7766e112132382b6442b636ee39b02951d771408e8frobbiew } 7776e112132382b6442b636ee39b02951d771408e8frobbiew if(!(args->flags & CLD_FLG_PTYPS)) { 778d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-c) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 7796e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_CPTYPE; 7806e112132382b6442b636ee39b02951d771408e8frobbiew } 7816e112132382b6442b636ee39b02951d771408e8frobbiew if(!(args->flags & CLD_FLG_SKTYPS)) { 782d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-p r) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 7836e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_RANDOM; 7846e112132382b6442b636ee39b02951d771408e8frobbiew } 7856e112132382b6442b636ee39b02951d771408e8frobbiew if(!(args->flags & CLD_FLG_SKS)) { 7866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->vsiz == args->htrsiz) { /* diskcache test */ 7876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks = SEEKS; 7886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } else { 7896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks = (args->vsiz > 0) ? args->vsiz : SEEKS; 7906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew args->seeks /= args->htrsiz; /* calculated seeks are in terms of the largest transfer size */ 7916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 7926e112132382b6442b636ee39b02951d771408e8frobbiew if((args->flags & CLD_FLG_LINEAR) && (args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_W)) { 7936e112132382b6442b636ee39b02951d771408e8frobbiew args->seeks *= 2; 7946e112132382b6442b636ee39b02951d771408e8frobbiew } 795d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge 796d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if(!(args->flags & CLD_FLG_TMD)) { 7976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef WINDOWS 798d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge sprintf(TmpStr, "(-L %I64d) ", args->seeks); 7996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else 800d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge sprintf(TmpStr, "(-L %lld) ", args->seeks); 8016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 802d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 803d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 8046e112132382b6442b636ee39b02951d771408e8frobbiew } 8056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!(args->flags & (CLD_FLG_SKS|CLD_FLG_TMD)) || (args->flags & CLD_FLG_CYC)) { 8066e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_SKS; 8076e112132382b6442b636ee39b02951d771408e8frobbiew } 8086e112132382b6442b636ee39b02951d771408e8frobbiew if(args->flags & (CLD_FLG_LINEAR)) { 8096e112132382b6442b636ee39b02951d771408e8frobbiew if(!(args->flags & (CLD_FLG_LUNU|CLD_FLG_LUND))) { 810d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, "(-p u) ", (MAX_ARG_LEN-1)-strlen(args->argstr)); 8116e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_LUNU; 8126e112132382b6442b636ee39b02951d771408e8frobbiew } 8136e112132382b6442b636ee39b02951d771408e8frobbiew } 8146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew normalize_percs(args); 8156b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(!(args->flags & CLD_FLG_DUTY) && (args->flags & CLD_FLG_RANDOM)) { 8166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew sprintf(TmpStr, "(-D %d:%d)", args->rperc, args->wperc); 817d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr)); 8186e112132382b6442b636ee39b02951d771408e8frobbiew args->flags |= CLD_FLG_DUTY; 8196e112132382b6442b636ee39b02951d771408e8frobbiew } 8206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew 8216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(0); 8226e112132382b6442b636ee39b02951d771408e8frobbiew} 8236e112132382b6442b636ee39b02951d771408e8frobbiew 8246e112132382b6442b636ee39b02951d771408e8frobbiew/* 8256e112132382b6442b636ee39b02951d771408e8frobbiew * checks validity of data after parsing 8266e112132382b6442b636ee39b02951d771408e8frobbiew * args and make assumtions. returns 0 on 8276e112132382b6442b636ee39b02951d771408e8frobbiew * success and -1 on failure. 8286e112132382b6442b636ee39b02951d771408e8frobbiew */ 8296e112132382b6442b636ee39b02951d771408e8frobbiewint check_conclusions(child_args_t *args) 8306e112132382b6442b636ee39b02951d771408e8frobbiew{ 8316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if((args->flags & CLD_FLG_DUTY) && (args->flags & CLD_FLG_LINEAR)) { 832d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Duty cycle testing is supported for random (-pr) tests only.\n"); 8336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 8346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 8356b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if((args->flags & CLD_FLG_BLK_RNG) && (args->flags & CLD_FLG_RTRSIZ)) { 836d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can't have unfixed block sizes and specify seek range in terms of blocks.\n"); 8376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 8386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 83963f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew /* Commented out to not limit the block transfer size 8406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->htrsiz > M_BLK_SIZE) { 841d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Transfer size exceeds max transfer size of %luk, use -B to adjust.\n", M_BLK_SIZE/2); 8426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 8436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 84463f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew */ 8456e112132382b6442b636ee39b02951d771408e8frobbiew if((args->vsiz < 0) || (args->ltrsiz < 1) || (args->htrsiz < 1)) { 846d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Bounds exceeded for transfer size and/or volume size.\n"); 8476b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef WINDOWS 848d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Max transfer size is %lu and Volume size is %I64d\n",(args->htrsiz*BLK_SIZE),args->vsiz); 8496b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else 850d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Max transfer size is %lu and Volume size is %lld\n",(args->htrsiz*BLK_SIZE),args->vsiz); 8516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 8526e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8536e112132382b6442b636ee39b02951d771408e8frobbiew } 8546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->vsiz < (args->stop_lba-args->start_lba+1)) { 855d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(ERR, args, "Volume stop block/lba exceeds volume size.\n"); 8566e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8576e112132382b6442b636ee39b02951d771408e8frobbiew } 8586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->vsiz < args->htrsiz) { 859d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Volume size is to small for transfer size.\n"); 8606b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 8616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 8626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if((!args->flags & CLD_FLG_TMD) && (args->seeks <= 0)) { 8636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef WINDOWS 864d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN,args, "Total seeks of %I64d, is invalid.\n", args->seeks); 8656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else 866d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN,args, "Total seeks of %lld, is invalid.\n", args->seeks); 8676b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 8686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 8696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 8706e112132382b6442b636ee39b02951d771408e8frobbiew if((args->flags & CLD_FLG_SKS) && (args->t_kids > args->seeks)) { 871d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can't have more children then max number of seeks, use -K/-L to adjust.\n"); 8726e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8736e112132382b6442b636ee39b02951d771408e8frobbiew } 8746e112132382b6442b636ee39b02951d771408e8frobbiew if(args->start_blk > args->stop_blk) { 875d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Stop Block of range must be greater the Start Block.\n"); 8766e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8776e112132382b6442b636ee39b02951d771408e8frobbiew } 8786e112132382b6442b636ee39b02951d771408e8frobbiew if(args->start_lba > args->stop_lba) { 879d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Stop LBA of range must be greater the Start LBA.\n"); 8806e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8816e112132382b6442b636ee39b02951d771408e8frobbiew } 8826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if((args->flags & CLD_FLG_LBA_RNG) && (args->flags & CLD_FLG_BLK_RNG)) { 883d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can't specify range in both block and LBA, use -s or -S.\n"); 8846e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8856e112132382b6442b636ee39b02951d771408e8frobbiew } 8866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if((args->flags & CLD_FLG_FILE) && (strstr(args->device,BLKDEVICESTR) != NULL)) { 887d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Can't open block device with file I/O type.\n"); 8886e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8896e112132382b6442b636ee39b02951d771408e8frobbiew } 8906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifndef WINDOWS 8916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if((args->flags & CLD_FLG_BLK) && (strstr(args->device,RAWDEVICESTR) != NULL)) { 892d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Raw device filespec for Block I/O type.\n"); 8936e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8946e112132382b6442b636ee39b02951d771408e8frobbiew } 8956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if((args->flags & CLD_FLG_RAW) && (strstr(args->device,RAWDEVICESTR) == NULL)) { 896d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Device not a raw device.\n"); 8976e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 8986e112132382b6442b636ee39b02951d771408e8frobbiew } 8996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else 9006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if(args->flags & CLD_FLG_RAW) { 901d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "RAW IO type not supported in WINDOWS environments.\n"); 9026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 9036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 9046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif 9056e112132382b6442b636ee39b02951d771408e8frobbiew if((args->hbeat > 0) && (args->flags & CLD_FLG_TMD) && (args->hbeat > args->run_time)) { 906d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Heartbeat should be at least equal to runtime, use -h/-T to adjust.\n"); 9076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew return(-1); 9086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew } 9096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew if((args->hbeat > 0) && !(args->flags & CLD_FLG_PRFTYPS)) { 910d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "At least one performance option, -P, must be specified when using -h.\n"); 9116e112132382b6442b636ee39b02951d771408e8frobbiew return(-1); 9126e112132382b6442b636ee39b02951d771408e8frobbiew } 913d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge if((args->flags & CLD_FLG_W) && !(args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_CMPR)) { 914d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge pMsg(WARN, args, "Write only, ignoring option -E.\n"); 915d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge } 9166e112132382b6442b636ee39b02951d771408e8frobbiew return(0); 9176e112132382b6442b636ee39b02951d771408e8frobbiew} 918