projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for O_ATOMIC
[fio.git]
/
options.c
diff --git
a/options.c
b/options.c
index a20b5c5579ced11908a0074d29724ea203722094..4b4c251b92c3e6895d9dafe99c54dc1c9c388147 100644
(file)
--- a/
options.c
+++ b/
options.c
@@
-104,7
+104,7
@@
static int bssplit_ddir(struct thread_options *o, int ddir, char *str)
if (str_to_decimal(fname, &val, 1, o)) {
log_err("fio: bssplit conversion failed\n");
if (str_to_decimal(fname, &val, 1, o)) {
log_err("fio: bssplit conversion failed\n");
- free(
o->
bssplit);
+ free(bssplit);
return 1;
}
return 1;
}
@@
-168,6
+168,9
@@
static int str_bssplit_cb(void *data, const char *input)
char *str, *p, *odir, *ddir;
int ret = 0;
char *str, *p, *odir, *ddir;
int ret = 0;
+ if (parse_dryrun())
+ return 0;
+
p = str = strdup(input);
strip_blank_front(&str);
p = str = strdup(input);
strip_blank_front(&str);
@@
-290,6
+293,10
@@
static int str_ignore_error_cb(void *data, const char *input)
struct thread_data *td = data;
char *str, *p, *n;
int type = 0, ret = 1;
struct thread_data *td = data;
char *str, *p, *n;
int type = 0, ret = 1;
+
+ if (parse_dryrun())
+ return 0;
+
p = str = strdup(input);
strip_blank_front(&str);
p = str = strdup(input);
strip_blank_front(&str);
@@
-315,6
+322,9
@@
static int str_rw_cb(void *data, const char *str)
struct thread_options *o = &td->o;
char *nr = get_opt_postfix(str);
struct thread_options *o = &td->o;
char *nr = get_opt_postfix(str);
+ if (parse_dryrun())
+ return 0;
+
o->ddir_seq_nr = 1;
o->ddir_seq_add = 0;
o->ddir_seq_nr = 1;
o->ddir_seq_add = 0;
@@
-391,6
+401,9
@@
static int str_cpumask_cb(void *data, unsigned long long *val)
long max_cpu;
int ret;
long max_cpu;
int ret;
+ if (parse_dryrun())
+ return 0;
+
ret = fio_cpuset_init(&td->o.cpumask);
if (ret < 0) {
log_err("fio: cpuset_init failed\n");
ret = fio_cpuset_init(&td->o.cpumask);
if (ret < 0) {
log_err("fio: cpuset_init failed\n");
@@
-489,6
+502,9
@@
static int str_cpus_allowed_cb(void *data, const char *input)
struct thread_data *td = data;
int ret;
struct thread_data *td = data;
int ret;
+ if (parse_dryrun())
+ return 0;
+
ret = set_cpus_allowed(td, &td->o.cpumask, input);
if (!ret)
td->o.cpumask_set = 1;
ret = set_cpus_allowed(td, &td->o.cpumask, input);
if (!ret)
td->o.cpumask_set = 1;
@@
-514,6
+530,9
@@
static int str_numa_cpunodes_cb(void *data, char *input)
{
struct thread_data *td = data;
{
struct thread_data *td = data;
+ if (parse_dryrun())
+ return 0;
+
/* numa_parse_nodestring() parses a character string list
* of nodes into a bit mask. The bit mask is allocated by
* numa_allocate_nodemask(), so it should be freed by
/* numa_parse_nodestring() parses a character string list
* of nodes into a bit mask. The bit mask is allocated by
* numa_allocate_nodemask(), so it should be freed by
@@
-536,8
+555,12
@@
static int str_numa_mpol_cb(void *data, char *input)
const char * const policy_types[] =
{ "default", "prefer", "bind", "interleave", "local", NULL };
int i;
const char * const policy_types[] =
{ "default", "prefer", "bind", "interleave", "local", NULL };
int i;
+ char *nodelist;
+
+ if (parse_dryrun())
+ return 0;
-
char *
nodelist = strchr(input, ':');
+ nodelist = strchr(input, ':');
if (nodelist) {
/* NUL-terminate mode */
*nodelist++ = '\0';
if (nodelist) {
/* NUL-terminate mode */
*nodelist++ = '\0';
@@
-669,6
+692,9
@@
static int str_random_distribution_cb(void *data, const char *str)
double val;
char *nr;
double val;
char *nr;
+ if (parse_dryrun())
+ return 0;
+
if (td->o.random_distribution == FIO_RAND_DIST_ZIPF)
val = 1.1;
else if (td->o.random_distribution == FIO_RAND_DIST_PARETO)
if (td->o.random_distribution == FIO_RAND_DIST_ZIPF)
val = 1.1;
else if (td->o.random_distribution == FIO_RAND_DIST_PARETO)
@@
-799,6
+825,9
@@
static int str_opendir_cb(void *data, const char fio_unused *str)
{
struct thread_data *td = data;
{
struct thread_data *td = data;
+ if (parse_dryrun())
+ return 0;
+
if (!td->files_index)
td->o.nr_files = 0;
if (!td->files_index)
td->o.nr_files = 0;
@@
-1863,6
+1892,16
@@
struct fio_option fio_options[FIO_MAX_OPTS] = {
.category = FIO_OPT_C_IO,
.group = FIO_OPT_G_IO_TYPE,
},
.category = FIO_OPT_C_IO,
.group = FIO_OPT_G_IO_TYPE,
},
+ {
+ .name = "atomic",
+ .lname = "Atomic I/O",
+ .type = FIO_OPT_BOOL,
+ .off1 = td_var_offset(oatomic),
+ .help = "Use Atomic IO with O_DIRECT (implies O_DIRECT)",
+ .def = "0",
+ .category = FIO_OPT_C_IO,
+ .group = FIO_OPT_G_IO_TYPE,
+ },
{
.name = "buffered",
.lname = "Buffered I/O",
{
.name = "buffered",
.lname = "Buffered I/O",
@@
-3574,7
+3613,7
@@
int fio_cmd_option_parse(struct thread_data *td, const char *opt, char *val)
int fio_cmd_ioengine_option_parse(struct thread_data *td, const char *opt,
char *val)
{
int fio_cmd_ioengine_option_parse(struct thread_data *td, const char *opt,
char *val)
{
- return parse_cmd_option(opt, val, td->io_ops->options, td);
+ return parse_cmd_option(opt, val, td->io_ops->options, td
->eo
);
}
void fio_fill_default_options(struct thread_data *td)
}
void fio_fill_default_options(struct thread_data *td)