engines/io_uring: Fully clear out previous SQE contents.
[fio.git] / options.c
index 98187def98fbe842e90ae6d4a85a9fb3f358fd10..2c5bf5e06a44a384464543ff5c2f91a865fe8653 100644 (file)
--- a/options.c
+++ b/options.c
@@ -493,6 +493,9 @@ int fio_cpus_split(os_cpu_mask_t *mask, unsigned int cpu_index)
        const long max_cpu = cpus_online();
 
        cpus_in_mask = fio_cpu_count(mask);
+       if (!cpus_in_mask)
+               return 0;
+
        cpu_index = cpu_index % cpus_in_mask;
 
        index = 0;
@@ -1431,6 +1434,22 @@ static int str_offset_cb(void *data, unsigned long long *__val)
        return 0;
 }
 
+static int str_offset_increment_cb(void *data, unsigned long long *__val)
+{
+       struct thread_data *td = cb_data_to_td(data);
+       unsigned long long v = *__val;
+
+       if (parse_is_percent(v)) {
+               td->o.offset_increment = 0;
+               td->o.offset_increment_percent = -1ULL - v;
+               dprint(FD_PARSE, "SET offset_increment_percent %d\n",
+                                       td->o.offset_increment_percent);
+       } else
+               td->o.offset_increment = v;
+
+       return 0;
+}
+
 static int str_size_cb(void *data, unsigned long long *__val)
 {
        struct thread_data *td = cb_data_to_td(data);
@@ -1773,6 +1792,11 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                            .help = "Linux native asynchronous IO",
                          },
 #endif
+#ifdef ARCH_HAVE_IOURING
+                         { .ival = "io_uring",
+                           .help = "Fast Linux native aio",
+                         },
+#endif
 #ifdef CONFIG_POSIXAIO
                          { .ival = "posixaio",
                            .help = "POSIX asynchronous IO",
@@ -1891,6 +1915,9 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                            .help = "HTTP (WebDAV/S3) IO engine",
                          },
 #endif
+                         { .ival = "nbd",
+                           .help = "Network Block Device (NBD) IO engine"
+                         },
                },
        },
        {
@@ -2073,6 +2100,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .name   = "offset_increment",
                .lname  = "IO offset increment",
                .type   = FIO_OPT_STR_VAL,
+               .cb     = str_offset_increment_cb,
                .off1   = offsetof(struct thread_options, offset_increment),
                .help   = "What is the increment from one offset to the next",
                .parent = "offset",
@@ -4530,7 +4558,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
        {
                .name   = "kb_base",
                .lname  = "KB Base",
-               .type   = FIO_OPT_INT,
+               .type   = FIO_OPT_STR,
                .off1   = offsetof(struct thread_options, kb_base),
                .prio   = 1,
                .def    = "1024",
@@ -4551,7 +4579,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
        {
                .name   = "unit_base",
                .lname  = "Unit for quantities of data (Bits or Bytes)",
-               .type   = FIO_OPT_INT,
+               .type   = FIO_OPT_STR,
                .off1   = offsetof(struct thread_options, unit_base),
                .prio   = 1,
                .posval = {
@@ -4891,8 +4919,7 @@ char *fio_option_dup_subs(const char *opt)
                return NULL;
        }
 
-       in[OPT_LEN_MAX] = '\0';
-       strncpy(in, opt, OPT_LEN_MAX);
+       snprintf(in, sizeof(in), "%s", opt);
 
        while (*inptr && nchr > 0) {
                if (inptr[0] == '$' && inptr[1] == '{') {