return 0;
}
-static int ignore_error_type(struct thread_data *td, int etype, char *str)
+static int ignore_error_type(struct thread_data *td, enum error_type_bit etype,
+ char *str)
{
unsigned int i;
int *error;
}
td->o.ignore_error_nr[etype] = 4;
- error = malloc(4 * sizeof(struct bssplit));
+ error = calloc(4, sizeof(int));
i = 0;
while ((fname = strsep(&str, ":")) != NULL) {
error[i] = -error[i];
}
if (!error[i]) {
- log_err("Unknown error %s, please use number value \n",
+ log_err("Unknown error %s, please use number value\n",
fname);
+ td->o.ignore_error_nr[etype] = 0;
free(error);
return 1;
}
td->o.continue_on_error |= 1 << etype;
td->o.ignore_error_nr[etype] = i;
td->o.ignore_error[etype] = error;
- } else
+ } else {
+ td->o.ignore_error_nr[etype] = 0;
free(error);
+ }
return 0;
{
struct thread_data *td = cb_data_to_td(data);
char *str, *p, *n;
- int type = 0, ret = 1;
+ int ret = 1;
+ enum error_type_bit type = 0;
if (parse_dryrun())
return 0;
td->o.disable_bw = !!val;
td->o.clat_percentiles = !val;
if (val)
- td->tv_cache_mask = 63;
+ td->ts_cache_mask = 63;
return 0;
}
if (parse_is_percent(v)) {
td->o.start_offset = 0;
td->o.start_offset_percent = -1ULL - v;
- dprint(FD_PARSE, "SET start_offset_percent %d\n", td->o.start_offset_percent);
+ dprint(FD_PARSE, "SET start_offset_percent %d\n",
+ td->o.start_offset_percent);
} else
td->o.start_offset = v;
if (parse_is_percent(v)) {
td->o.size = 0;
td->o.size_percent = -1ULL - v;
+ dprint(FD_PARSE, "SET size_percent %d\n",
+ td->o.size_percent);
} else
td->o.size = v;
.category = FIO_OPT_C_IO,
.group = FIO_OPT_G_IO_BASIC,
},
+ {
+ .name = "serialize_overlap",
+ .lname = "Serialize overlap",
+ .off1 = offsetof(struct thread_options, serialize_overlap),
+ .type = FIO_OPT_BOOL,
+ .help = "Wait for in-flight IOs that collide to complete",
+ .parent = "iodepth",
+ .def = "0",
+ .category = FIO_OPT_C_IO,
+ .group = FIO_OPT_G_IO_BASIC,
+ },
{
.name = "io_submit_mode",
.lname = "IO submit mode",
.oval = FIO_FSERVICE_PARETO,
.help = "Pareto randomized",
},
+ { .ival = "normal",
+ .oval = FIO_FSERVICE_GAUSS,
+ .help = "Normal (Gaussian) randomized",
+ },
{ .ival = "gauss",
.oval = FIO_FSERVICE_GAUSS,
- .help = "Normal (Gaussian) distribution",
+ .help = "Alias for normal",
},
{ .ival = "roundrobin",
.oval = FIO_FSERVICE_RR,
.parent = "nrfiles",
.hide = 1,
},
-#ifdef CONFIG_POSIX_FALLOCATE
+#ifdef FIO_HAVE_ANY_FALLOCATE
{
.name = "fallocate",
.lname = "Fallocate",
.type = FIO_OPT_STR,
.off1 = offsetof(struct thread_options, fallocate_mode),
.help = "Whether pre-allocation is performed when laying out files",
- .def = "posix",
+ .def = "native",
.category = FIO_OPT_C_FILE,
.group = FIO_OPT_G_INVALID,
.posval = {
.oval = FIO_FALLOCATE_NONE,
.help = "Do not pre-allocate space",
},
+ { .ival = "native",
+ .oval = FIO_FALLOCATE_NATIVE,
+ .help = "Use native pre-allocation if possible",
+ },
+#ifdef CONFIG_POSIX_FALLOCATE
{ .ival = "posix",
.oval = FIO_FALLOCATE_POSIX,
.help = "Use posix_fallocate()",
},
+#endif
#ifdef CONFIG_LINUX_FALLOCATE
{ .ival = "keep",
.oval = FIO_FALLOCATE_KEEP_SIZE,
.oval = FIO_FALLOCATE_NONE,
.help = "Alias for 'none'",
},
+#ifdef CONFIG_POSIX_FALLOCATE
{ .ival = "1",
.oval = FIO_FALLOCATE_POSIX,
.help = "Alias for 'posix'",
},
+#endif
},
},
-#else /* CONFIG_POSIX_FALLOCATE */
+#else /* FIO_HAVE_ANY_FALLOCATE */
{
.name = "fallocate",
.lname = "Fallocate",
.type = FIO_OPT_UNSUPPORTED,
.help = "Your platform does not support fallocate",
},
-#endif /* CONFIG_POSIX_FALLOCATE */
+#endif /* FIO_HAVE_ANY_FALLOCATE */
{
.name = "fadvise_hint",
.lname = "Fadvise hint",
.category = FIO_OPT_C_FILE,
.group = FIO_OPT_G_INVALID,
},
-#ifdef FIO_HAVE_STREAMID
- {
- .name = "fadvise_stream",
- .lname = "Fadvise stream",
- .type = FIO_OPT_INT,
- .off1 = offsetof(struct thread_options, fadvise_stream),
- .help = "Use fadvise() to set stream ID",
- .category = FIO_OPT_C_FILE,
- .group = FIO_OPT_G_INVALID,
- },
-#else
- {
- .name = "fadvise_stream",
- .lname = "Fadvise stream",
- .type = FIO_OPT_UNSUPPORTED,
- .help = "Your platform does not support fadvise stream ID",
- },
-#endif
{
.name = "fsync",
.lname = "Fsync",
.category = FIO_OPT_C_IO,
.group = FIO_OPT_G_IO_TYPE,
},
+#ifdef FIO_HAVE_WRITE_HINT
+ {
+ .name = "write_hint",
+ .lname = "Write hint",
+ .type = FIO_OPT_STR,
+ .off1 = offsetof(struct thread_options, write_hint),
+ .help = "Set expected write life time",
+ .category = FIO_OPT_C_ENGINE,
+ .group = FIO_OPT_G_INVALID,
+ .posval = {
+ { .ival = "none",
+ .oval = RWH_WRITE_LIFE_NONE,
+ },
+ { .ival = "short",
+ .oval = RWH_WRITE_LIFE_SHORT,
+ },
+ { .ival = "medium",
+ .oval = RWH_WRITE_LIFE_MEDIUM,
+ },
+ { .ival = "long",
+ .oval = RWH_WRITE_LIFE_LONG,
+ },
+ { .ival = "extreme",
+ .oval = RWH_WRITE_LIFE_EXTREME,
+ },
+ },
+ },
+#endif
{
.name = "create_serialize",
.lname = "Create serialize",
.category = FIO_OPT_C_IO,
.group = FIO_OPT_G_IO_FLOW,
},
- {
- .name = "skip_bad",
- .lname = "Skip operations against bad blocks",
- .type = FIO_OPT_BOOL,
- .off1 = offsetof(struct thread_options, skip_bad),
- .help = "Skip operations against known bad blocks.",
- .hide = 1,
- .def = "0",
- .category = FIO_OPT_C_IO,
- .group = FIO_OPT_G_MTD,
- },
{
.name = "steadystate",
.lname = "Steady state threshold",