projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix segfault with verify_async
[fio.git]
/
options.c
diff --git
a/options.c
b/options.c
index 1914037583fb24163936e18aac7b4473aed87728..bb46dc9df8cbf707a87671c4b1f0b1867dd79f4b 100644
(file)
--- a/
options.c
+++ b/
options.c
@@
-595,6
+595,14
@@
static char *get_next_file_name(char **ptr)
return start;
}
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;
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;
}
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;
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.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;
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",
},
.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,
{
.name = "kb_base",
.type = FIO_OPT_INT,
@@
-1555,7
+1581,7
@@
static struct fio_option options[FIO_MAX_OPTS] = {
.name = "verify_dump",
.type = FIO_OPT_BOOL,
.off1 = td_var_offset(verify_dump),
.name = "verify_dump",
.type = FIO_OPT_BOOL,
.off1 = td_var_offset(verify_dump),
- .def = "
1
",
+ .def = "
0
",
.help = "Dump contents of good and bad blocks on failure",
.parent = "verify",
},
.help = "Dump contents of good and bad blocks on failure",
.parent = "verify",
},
@@
-1821,6
+1847,15
@@
static struct fio_option options[FIO_MAX_OPTS] = {
.help = "Time window over which to calculate bandwidth"
" (msec)",
.def = "500",
.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",
},
{
.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",
},
.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,
{
.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",
.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",
},
{
.name = "percentile_list",
@@
-2305,7
+2347,10
@@
int fio_show_option_help(const char *opt)
return show_cmd_help(options, 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;
{
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;
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;
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;
}
}
o->posval[i].help = NULL;
}
}
+
+void fio_options_free(struct thread_data *td)
+{
+ options_free(options, td);
+}