bitmap: fix off-by-8 allocation error
[fio.git] / options.c
index ea1ffb13dd8bf95dd0f8c0bb1bbb0a8f257921c0..d46bcbbcf6c9cab8fc1c41e8800bc5071429ccd9 100644 (file)
--- a/options.c
+++ b/options.c
@@ -748,12 +748,22 @@ static int str_random_distribution_cb(void *data, const char *str)
                return 1;
        }
 
-       if (td->o.random_distribution == FIO_RAND_DIST_ZIPF)
+       free(nr);
+
+       if (td->o.random_distribution == FIO_RAND_DIST_ZIPF) {
+               if (val == 1.00) {
+                       log_err("fio: zipf theta must different than 1.0\n");
+                       return 1;
+               }
                td->o.zipf_theta = val;
-       else
+       } else {
+               if (val <= 0.00 || val >= 1.00) {
+                       log_err("fio: pareto input out of range (0 < input < 1.0)\n");
+                       return 1;
+               }
                td->o.pareto_h = val;
+       }
 
-       free(nr);
        return 0;
 }
 
@@ -1501,6 +1511,23 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .parent = "norandommap",
                .def    = "0",
        },
+       {
+               .name   = "random_generator",
+               .type   = FIO_OPT_STR,
+               .off1   = td_var_offset(random_generator),
+               .help   = "Type of random number generator to use",
+               .def    = "tausworthe",
+               .posval = {
+                         { .ival = "tausworthe",
+                           .oval = FIO_RAND_GEN_TAUSWORTHE,
+                           .help = "Strong Tausworthe generator",
+                         },
+                         { .ival = "lfsr",
+                           .oval = FIO_RAND_GEN_LFSR,
+                           .help = "Variable length LFSR",
+                         },
+               },
+       },
        {
                .name   = "random_distribution",
                .type   = FIO_OPT_STR,