[PATCH] Change timeout to runtime and rearrange option entries

Runtime is a more descriptive name - the documentation is updated
as well, however the parsing has added an alias functionality to
support older names as well. So 'timeout' still works.

Also rearrange option entries, now they matter because the --cmdhelp
option will print them in order.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/HOWTO b/HOWTO
index 1c8dd4e..57c0730 100644
--- a/HOWTO
+++ b/HOWTO
@@ -347,7 +347,7 @@
 		jobs, and you want to delay starting some jobs to a certain
 		time.
 
-timeout=int	Tell fio to terminate processing after the specified number
+runtime=int	Tell fio to terminate processing after the specified number
 		of seconds. It can be quite hard to determine for how long
 		a specified job will run, so this parameter is handy to
 		cap the total runtime to a given time.
diff --git a/README b/README
index 97251d0..2d5d499 100644
--- a/README
+++ b/README
@@ -54,7 +54,7 @@
 
 $ fio
         --output        Write output to file
-        --timeout       Runtime in seconds
+        --runtime       Runtime in seconds
         --latency-log   Generate per-job latency logs
         --bandwidth-log Generate per-job bandwidth logs
         --minimal       Minimal (terse) output
@@ -124,7 +124,7 @@
 			'x' blocks have been written.
 	end_fsync=x	If 'x', run fsync() after end-of-job.
 	startdelay=x	Start this thread x seconds after startup
-	timeout=x	Terminate x seconds after startup. Can include a
+	runtime=x	Terminate x seconds after startup. Can include a
 			normal time suffix if not given in seconds, such as
 			'm' for minutes, 'h' for hours, and 'd' for days.
 	offset=x	Start io at offset x (x string can include k/m/g)
diff --git a/init.c b/init.c
index 559ebc1..c272526 100644
--- a/init.c
+++ b/init.c
@@ -78,6 +78,119 @@
 				"sg", "null", },
 	},
 	{
+		.name	= "iodepth",
+		.type	= FIO_OPT_INT,
+		.off1	= td_var_offset(iodepth),
+		.help	= "Amount of IO buffers to keep in flight",
+		.def	= "1",
+	},
+	{
+		.name	= "size",
+		.type	= FIO_OPT_STR_VAL,
+		.off1	= td_var_offset(total_file_size),
+		.help	= "Size of device or file",
+	},
+	{
+		.name	= "bs",
+		.type	= FIO_OPT_STR_VAL_INT,
+		.off1	= td_var_offset(bs[DDIR_READ]),
+		.off2	= td_var_offset(bs[DDIR_WRITE]),
+		.help	= "Block size unit",
+		.def	= "4k",
+	},
+	{
+		.name	= "bsrange",
+		.type	= FIO_OPT_RANGE,
+		.off1	= td_var_offset(min_bs[DDIR_READ]),
+		.off2	= td_var_offset(max_bs[DDIR_READ]),
+		.off3	= td_var_offset(min_bs[DDIR_WRITE]),
+		.off4	= td_var_offset(max_bs[DDIR_WRITE]),
+		.help	= "Set block size range (in more detail than bs)",
+	},
+	{
+		.name	= "bs_unaligned",
+		.type	= FIO_OPT_STR_SET,
+		.off1	= td_var_offset(bs_unaligned),
+		.help	= "Don't sector align IO buffer sizes",
+	},
+	{
+		.name	= "offset",
+		.type	= FIO_OPT_STR_VAL,
+		.off1	= td_var_offset(start_offset),
+		.help	= "Start IO from this offset",
+		.def	= "0",
+	},
+	{
+		.name	= "randrepeat",
+		.type	= FIO_OPT_BOOL,
+		.off1	= td_var_offset(rand_repeatable),
+		.help	= "Use repeatable random IO pattern",
+		.def	= "1",
+	},
+	{
+		.name	= "norandommap",
+		.type	= FIO_OPT_STR_SET,
+		.off1	= td_var_offset(norandommap),
+		.help	= "Accept potential duplicate random blocks",
+	},
+	{
+		.name	= "nrfiles",
+		.type	= FIO_OPT_INT,
+		.off1	= td_var_offset(nr_files),
+		.help	= "Split job workload between this number of files",
+		.def	= "1",
+	},
+	{
+		.name	= "fsync",
+		.type	= FIO_OPT_INT,
+		.off1	= td_var_offset(fsync_blocks),
+		.help	= "Issue fsync for writes every given number of blocks",
+		.def	= "0",
+	},
+	{
+		.name	= "direct",
+		.type	= FIO_OPT_BOOL,
+		.off1	= td_var_offset(odirect),
+		.help	= "Use O_DIRECT IO",
+		.def	= "1",
+	},
+	{
+		.name	= "overwrite",
+		.type	= FIO_OPT_BOOL,
+		.off1	= td_var_offset(overwrite),
+		.help	= "When writing, set whether to overwrite current data",
+		.def	= "0",
+	},
+	{
+		.name	= "loops",
+		.type	= FIO_OPT_INT,
+		.off1	= td_var_offset(loops),
+		.help	= "Number of times to run the job",
+		.def	= "1",
+	},
+	{
+		.name	= "numjobs",
+		.type	= FIO_OPT_INT,
+		.off1	= td_var_offset(numjobs),
+		.help	= "Duplicate this job this many times",
+		.def	= "1",
+	},
+	{
+		.name	= "startdelay",
+		.type	= FIO_OPT_INT,
+		.off1	= td_var_offset(start_delay),
+		.help	= "Only start job when this period has passed",
+		.def	= "0",
+	},
+	{
+		.name	= "runtime",
+		.alias	= "timeout",
+		.type	= FIO_OPT_STR_VAL_TIME,
+		.off1	= td_var_offset(timeout),
+		.help	= "Stop workload when this amount of time has passed",
+		.def	= "0",
+	},
+	{
 		.name	= "mem",
 		.type	= FIO_OPT_STR,
 		.cb	= str_mem_cb,
@@ -126,27 +239,6 @@
 	},
 #endif
 	{
-		.name	= "size",
-		.type	= FIO_OPT_STR_VAL,
-		.off1	= td_var_offset(total_file_size),
-		.help	= "Size of device or file",
-	},
-	{
-		.name	= "bs",
-		.type	= FIO_OPT_STR_VAL_INT,
-		.off1	= td_var_offset(bs[DDIR_READ]),
-		.off2	= td_var_offset(bs[DDIR_WRITE]),
-		.help	= "Block size unit",
-		.def	= "4k",
-	},
-	{
-		.name	= "offset",
-		.type	= FIO_OPT_STR_VAL,
-		.off1	= td_var_offset(start_offset),
-		.help	= "Start IO from this offset",
-		.def	= "0",
-	},
-	{
 		.name	= "zonesize",
 		.type	= FIO_OPT_STR_VAL,
 		.off1	= td_var_offset(zone_size),
@@ -168,43 +260,6 @@
 		.def	= "0",
 	},
 	{
-		.name	= "bsrange",
-		.type	= FIO_OPT_RANGE,
-		.off1	= td_var_offset(min_bs[DDIR_READ]),
-		.off2	= td_var_offset(max_bs[DDIR_READ]),
-		.off3	= td_var_offset(min_bs[DDIR_WRITE]),
-		.off4	= td_var_offset(max_bs[DDIR_WRITE]),
-		.help	= "Set block size range",
-	},
-	{
-		.name	= "randrepeat",
-		.type	= FIO_OPT_BOOL,
-		.off1	= td_var_offset(rand_repeatable),
-		.help	= "Use repeatable random IO pattern",
-		.def	= "1",
-	},
-	{
-		.name	= "nrfiles",
-		.type	= FIO_OPT_INT,
-		.off1	= td_var_offset(nr_files),
-		.help	= "Split job workload between this number of files",
-		.def	= "1",
-	},
-	{
-		.name	= "iodepth",
-		.type	= FIO_OPT_INT,
-		.off1	= td_var_offset(iodepth),
-		.help	= "Amount of IO buffers to keep in flight",
-		.def	= "1",
-	},
-	{
-		.name	= "fsync",
-		.type	= FIO_OPT_INT,
-		.off1	= td_var_offset(fsync_blocks),
-		.help	= "Issue fsync for writes every given number of blocks",
-		.def	= "0",
-	},
-	{
 		.name	= "rwmixcycle",
 		.type	= FIO_OPT_INT,
 		.off1	= td_var_offset(rwmixcycle),
@@ -288,20 +343,6 @@
 		.def	= "1000",
 	},
 	{
-		.name	= "startdelay",
-		.type	= FIO_OPT_INT,
-		.off1	= td_var_offset(start_delay),
-		.help	= "Only start job when this period has passed",
-		.def	= "0",
-	},
-	{
-		.name	= "timeout",
-		.type	= FIO_OPT_STR_VAL_TIME,
-		.off1	= td_var_offset(timeout),
-		.help	= "Stop workload when this amount of time has passed",
-		.def	= "0",
-	},
-	{
 		.name	= "invalidate",
 		.type	= FIO_OPT_BOOL,
 		.off1	= td_var_offset(invalidate_cache),
@@ -337,20 +378,6 @@
 		.def	= "1",
 	},
 	{
-		.name	= "loops",
-		.type	= FIO_OPT_INT,
-		.off1	= td_var_offset(loops),
-		.help	= "Number of times to run the job",
-		.def	= "1",
-	},
-	{
-		.name	= "numjobs",
-		.type	= FIO_OPT_INT,
-		.off1	= td_var_offset(numjobs),
-		.help	= "Duplicate this job this many times",
-		.def	= "1",
-	},
-	{
 		.name	= "cpuload",
 		.type	= FIO_OPT_INT,
 		.off1	= td_var_offset(cpuload),
@@ -362,20 +389,6 @@
 		.off1	= td_var_offset(cpucycle),
 		.help	= "Length of the CPU burn cycles",
 	},
-	{
-		.name	= "direct",
-		.type	= FIO_OPT_BOOL,
-		.off1	= td_var_offset(odirect),
-		.help	= "Use O_DIRECT IO",
-		.def	= "1",
-	},
-	{
-		.name	= "overwrite",
-		.type	= FIO_OPT_BOOL,
-		.off1	= td_var_offset(overwrite),
-		.help	= "When writing, set whether to overwrite current data",
-		.def	= "0",
-	},
 #ifdef FIO_HAVE_CPU_AFFINITY
 	{
 		.name	= "cpumask",
@@ -429,18 +442,6 @@
 		.help	= "Write log of latency during run",
 	},
 	{
-		.name	= "norandommap",
-		.type	= FIO_OPT_STR_SET,
-		.off1	= td_var_offset(norandommap),
-		.help	= "Accept potential duplicate random blocks",
-	},
-	{
-		.name	= "bs_unaligned",
-		.type	= FIO_OPT_STR_SET,
-		.off1	= td_var_offset(bs_unaligned),
-		.help	= "Don't sector align IO buffer sizes",
-	},
-	{
 		.name	= "hugepage-size",
 		.type	= FIO_OPT_STR_VAL,
 		.off1	= td_var_offset(hugepage_size),
diff --git a/parse.c b/parse.c
index 10d2116..886bde6 100644
--- a/parse.c
+++ b/parse.c
@@ -132,6 +132,8 @@
 	while (o->name) {
 		if (!strcmp(o->name, opt))
 			return o;
+		else if (o->alias && !strcmp(o->alias, opt))
+			return o;
 
 		o++;
 	}
diff --git a/parse.h b/parse.h
index 2d4b55e..4ddb76a 100644
--- a/parse.h
+++ b/parse.h
@@ -21,6 +21,7 @@
  */
 struct fio_option {
 	const char *name;		/* option name */
+	const char *alias;		/* possible old allowed name */
 	enum fio_opt_type type;		/* option type */
 	unsigned int off1;		/* potential parameters */
 	unsigned int off2;
diff --git a/stat.c b/stat.c
index a665ec8..e7eb8ad 100644
--- a/stat.c
+++ b/stat.c
@@ -275,7 +275,6 @@
 	td->usr_time += mtime_since(&td->ru_start.ru_utime, &td->ru_end.ru_utime);
 	td->sys_time += mtime_since(&td->ru_start.ru_stime, &td->ru_end.ru_stime);
 	td->ctx += td->ru_end.ru_nvcsw + td->ru_end.ru_nivcsw - (td->ru_start.ru_nvcsw + td->ru_start.ru_nivcsw);
-
 	
 	memcpy(&td->ru_start, &td->ru_end, sizeof(td->ru_end));
 }