Merge branch 'multiclnt-sharedfs-try3' of git://github.com/bengland2/fio
[fio.git] / options.c
index 017920e14031357e9ae2aae6dca977b64ced62fc..ede7cda6f018f614374184b9b31a570294fbfa95 100644 (file)
--- a/options.c
+++ b/options.c
@@ -17,6 +17,8 @@
 
 #include "crc/crc32c.h"
 
+char client_sockaddr_str[INET6_ADDRSTRLEN] = {0};
+
 /*
  * Check if mmap/mmaphuge has a :/foo/bar/file at the end. If so, return that.
  */
@@ -443,9 +445,9 @@ static int str_cpumask_cb(void *data, unsigned long long *val)
 
        for (i = 0; i < sizeof(int) * 8; i++) {
                if ((1 << i) & *val) {
-                       if (i > max_cpu) {
+                       if (i >= max_cpu) {
                                log_err("fio: CPU %d too large (max=%ld)\n", i,
-                                                               max_cpu);
+                                                               max_cpu - 1);
                                return 1;
                        }
                        dprint(FD_PARSE, "set cpu allowed %d\n", i);
@@ -503,9 +505,9 @@ static int set_cpus_allowed(struct thread_data *td, os_cpu_mask_t *mask,
                                ret = 1;
                                break;
                        }
-                       if (icpu > max_cpu) {
+                       if (icpu >= max_cpu) {
                                log_err("fio: CPU %d too large (max=%ld)\n",
-                                                       icpu, max_cpu);
+                                                       icpu, max_cpu - 1);
                                ret = 1;
                                break;
                        }
@@ -832,7 +834,12 @@ int set_name_idx(char *target, char *input, int index)
        for (cur_idx = 0; cur_idx <= index; cur_idx++)
                fname = get_next_name(&str);
 
-       len = sprintf(target, "%s/", fname);
+       if (client_sockaddr_str[0]) {
+               len = sprintf(target, "%s/%s.", fname, client_sockaddr_str);
+       } else {
+               len = sprintf(target, "%s/", fname);
+       }
+
        free(p);
 
        return len;
@@ -1622,6 +1629,26 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .category = FIO_OPT_C_IO,
                .group  = FIO_OPT_G_IO_BASIC,
        },
+       {
+               .name   = "io_submit_mode",
+               .lname  = "IO submit mode",
+               .type   = FIO_OPT_STR,
+               .off1   = td_var_offset(io_submit_mode),
+               .help   = "How IO submissions and completions are done",
+               .def    = "inline",
+               .category = FIO_OPT_C_IO,
+               .group  = FIO_OPT_G_IO_BASIC,
+               .posval = {
+                         { .ival = "inline",
+                           .oval = IO_MODE_INLINE,
+                           .help = "Submit and complete IO inline",
+                         },
+                         { .ival = "offload",
+                           .oval = IO_MODE_OFFLOAD,
+                           .help = "Offload submit and complete to threads",
+                         },
+               },
+       },
        {
                .name   = "size",
                .lname  = "Size",
@@ -2641,6 +2668,28 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .category = FIO_OPT_C_IO,
                .group  = FIO_OPT_G_IOLOG,
        },
+       {
+               .name   = "replay_scale",
+               .lname  = "Replace offset scale factor",
+               .type   = FIO_OPT_INT,
+               .off1   = td_var_offset(replay_scale),
+               .parent = "read_iolog",
+               .def    = "1",
+               .help   = "Align offsets to this blocksize",
+               .category = FIO_OPT_C_IO,
+               .group  = FIO_OPT_G_IOLOG,
+       },
+       {
+               .name   = "replay_align",
+               .lname  = "Replace alignment",
+               .type   = FIO_OPT_INT,
+               .off1   = td_var_offset(replay_align),
+               .parent = "read_iolog",
+               .help   = "Scale offset down by this factor",
+               .category = FIO_OPT_C_IO,
+               .group  = FIO_OPT_G_IOLOG,
+               .pow2   = 1,
+       },
        {
                .name   = "exec_prerun",
                .lname  = "Pre-execute runnable",