add FIELD_SIZE macro to calculate the size of the specified field
[fio.git] / options.c
index 5c6ec2321bd13819742ed9056318a222a51f88d3..e040495d23169833a81581e75a58231c6e32baa5 100644 (file)
--- a/options.c
+++ b/options.c
@@ -917,7 +917,7 @@ static int str_opendir_cb(void *data, const char fio_unused *str)
 static int pattern_cb(char *pattern, unsigned int max_size,
                      const char *input, unsigned int *pattern_bytes)
 {
-       long off;
+       long off = 0;
        int i = 0, j = 0, len, k, base = 10;
        uint32_t pattern_length;
        char *loc1, *loc2;
@@ -983,6 +983,8 @@ static int pattern_cb(char *pattern, unsigned int max_size,
         */
 fill:
        pattern_length = i;
+       if (!i && !off)
+               i = 1;
        while (i > 1 && i * 2 <= max_size) {
                memcpy(&pattern[i], &pattern[0], i);
                i *= 2;
@@ -1062,7 +1064,7 @@ static int str_verify_pattern_cb(void *data, const char *input)
        /*
         * VERIFY_META could already be set
         */
-       if (!ret && td->o.verify == VERIFY_NONE)
+       if (!ret && !fio_option_is_set(&td->o, verify))
                td->o.verify = VERIFY_PATTERN;
 
        return ret;
@@ -1897,6 +1899,11 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                            .oval = FIO_RAND_GEN_LFSR,
                            .help = "Variable length LFSR",
                          },
+                         {
+                           .ival = "tausworthe64",
+                           .oval = FIO_RAND_GEN_TAUSWORTHE64,
+                           .help = "64-bit Tausworthe variant",
+                         },
                },
                .category = FIO_OPT_C_IO,
                .group  = FIO_OPT_G_RANDOM,
@@ -2395,6 +2402,10 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                            .oval = VERIFY_META,
                            .help = "Use io information",
                          },
+                         { .ival = "pattern",
+                           .oval = VERIFY_PATTERN_NO_HDR,
+                           .help = "Verify strict pattern",
+                         },
                          {
                            .ival = "null",
                            .oval = VERIFY_NULL,
@@ -3039,6 +3050,26 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .category = FIO_OPT_C_FILE,
                .def    = "0",
        },
+       {
+               .name   = "allow_file_create",
+               .lname  = "Allow file create",
+               .type   = FIO_OPT_BOOL,
+               .off1   = td_var_offset(allow_create),
+               .help   = "Permit fio to create files, if they don't exist",
+               .def    = "1",
+               .category = FIO_OPT_C_FILE,
+               .group  = FIO_OPT_G_FILENAME,
+       },
+       {
+               .name   = "allow_mounted_write",
+               .lname  = "Allow mounted write",
+               .type   = FIO_OPT_BOOL,
+               .off1   = td_var_offset(allow_mounted_write),
+               .help   = "Allow writes to a mounted partition",
+               .def    = "0",
+               .category = FIO_OPT_C_FILE,
+               .group  = FIO_OPT_G_FILENAME,
+       },
        {
                .name   = "pre_read",
                .lname  = "Pre-read files",
@@ -4062,7 +4093,7 @@ static void show_closest_option(const char *opt)
                i++;
        }
 
-       if (best_option != -1)
+       if (best_option != -1 && string_distance_ok(name, best_distance))
                log_err("Did you mean %s?\n", fio_options[best_option].name);
 
        free(name);
@@ -4334,7 +4365,7 @@ static int opt_is_set(struct thread_options *o, struct fio_option *opt)
        opt_off = opt - &fio_options[0];
        index = opt_off / (8 * sizeof(uint64_t));
        offset = opt_off & ((8 * sizeof(uint64_t)) - 1);
-       return (o->set_options[index] & (1UL << offset)) != 0;
+       return (o->set_options[index] & ((uint64_t)1 << offset)) != 0;
 }
 
 int __fio_option_is_set(struct thread_options *o, unsigned int off1)
@@ -4359,5 +4390,5 @@ void fio_option_mark_set(struct thread_options *o, struct fio_option *opt)
        opt_off = opt - &fio_options[0];
        index = opt_off / (8 * sizeof(uint64_t));
        offset = opt_off & ((8 * sizeof(uint64_t)) - 1);
-       o->set_options[index] |= 1UL << offset;
+       o->set_options[index] |= (uint64_t)1 << offset;
 }