Fix fragmented package opcode mismatch
[fio.git] / options.c
index 1914037583fb24163936e18aac7b4473aed87728..4207537e9c4a4bf4958213b6dd3cf6783582b766 100644 (file)
--- a/options.c
+++ b/options.c
@@ -595,6 +595,14 @@ static char *get_next_file_name(char **ptr)
        return start;
 }
 
+static int str_hostname_cb(void *data, const char *input)
+{
+       struct thread_data *td = data;
+
+       td->o.filename = strdup(input);
+       return 0;
+}
+
 static int str_filename_cb(void *data, const char *input)
 {
        struct thread_data *td = data;
@@ -749,6 +757,17 @@ static int str_write_lat_log_cb(void *data, const char *str)
        return 0;
 }
 
+static int str_write_iops_log_cb(void *data, const char *str)
+{
+       struct thread_data *td = data;
+
+       if (str)
+               td->o.iops_log_file = strdup(str);
+
+       td->o.write_iops_log = 1;
+       return 0;
+}
+
 static int str_gtod_reduce_cb(void *data, int *il)
 {
        struct thread_data *td = data;
@@ -758,6 +777,7 @@ static int str_gtod_reduce_cb(void *data, int *il)
        td->o.disable_clat = !!val;
        td->o.disable_slat = !!val;
        td->o.disable_bw = !!val;
+       td->o.clat_percentiles = !val;
        if (val)
                td->tv_cache_mask = 63;
 
@@ -860,6 +880,12 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .prio   = -1, /* must come after "directory" */
                .help   = "File(s) to use for the workload",
        },
+       {
+               .name   = "hostname",
+               .type   = FIO_OPT_STR_STORE,
+               .cb     = str_hostname_cb,
+               .help   = "Hostname for net IO engine",
+       },
        {
                .name   = "kb_base",
                .type   = FIO_OPT_INT,
@@ -1821,6 +1847,15 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .help   = "Time window over which to calculate bandwidth"
                          " (msec)",
                .def    = "500",
+               .parent = "write_bw_log",
+       },
+       {
+               .name   = "iopsavgtime",
+               .type   = FIO_OPT_INT,
+               .off1   = td_var_offset(iops_avg_time),
+               .help   = "Time window over which to calculate IOPS (msec)",
+               .def    = "500",
+               .parent = "write_iops_log",
        },
        {
                .name   = "create_serialize",
@@ -1938,6 +1973,13 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .cb     = str_write_lat_log_cb,
                .help   = "Write log of latency during run",
        },
+       {
+               .name   = "write_iops_log",
+               .type   = FIO_OPT_STR,
+               .off1   = td_var_offset(write_iops_log),
+               .cb     = str_write_iops_log_cb,
+               .help   = "Write log of IOPS during run",
+       },
        {
                .name   = "hugepage-size",
                .type   = FIO_OPT_INT,
@@ -1975,7 +2017,7 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .type   = FIO_OPT_BOOL,
                .off1   = td_var_offset(clat_percentiles),
                .help   = "Enable the reporting of completion latency percentiles",
-               .def    = "0",
+               .def    = "1",
        },
        {
                .name   = "percentile_list",
@@ -2305,7 +2347,10 @@ int fio_show_option_help(const char *opt)
        return show_cmd_help(options, opt);
 }
 
-static void __options_mem(struct thread_data *td, int alloc)
+/*
+ * dupe FIO_OPT_STR_STORE options
+ */
+void options_mem_dupe(struct thread_data *td)
 {
        struct thread_options *o = &td->o;
        struct fio_option *opt;
@@ -2317,32 +2362,13 @@ static void __options_mem(struct thread_data *td, int alloc)
                        continue;
 
                ptr = (void *) o + opt->off1;
-               if (*ptr) {
-                       if (alloc)
-                               *ptr = strdup(*ptr);
-                       else {
-                               free(*ptr);
-                               *ptr = NULL;
-                       }
-               }
+               if (!*ptr)
+                       ptr = td_var(o, opt->off1);
+               if (*ptr)
+                       *ptr = strdup(*ptr);
        }
 }
 
-/*
- * dupe FIO_OPT_STR_STORE options
- */
-void options_mem_dupe(struct thread_data *td)
-{
-       __options_mem(td, 1);
-}
-
-void options_mem_free(struct thread_data fio_unused *td)
-{
-#if 0
-       __options_mem(td, 0);
-#endif
-}
-
 unsigned int fio_get_kb_base(void *data)
 {
        struct thread_data *td = data;
@@ -2423,3 +2449,8 @@ void del_opt_posval(const char *optname, const char *ival)
                o->posval[i].help = NULL;
        }
 }
+
+void fio_options_free(struct thread_data *td)
+{
+       options_free(options, td);
+}