Remove .maxval from verify_pattern
[fio.git] / options.c
index 130dc8c784b5f6f0ae67fd60550cd944073f91ea..35a08d3aa6554a238f457966922993708b3b9db7 100644 (file)
--- a/options.c
+++ b/options.c
@@ -8,6 +8,7 @@
 
 #include "fio.h"
 #include "parse.h"
+#include "fls.h"
 
 #define td_var_offset(var)     ((size_t) &((struct thread_options *)0)->var)
 
@@ -203,17 +204,37 @@ static int str_opendir_cb(void *data, const char fio_unused *str)
        return add_dir_files(td, td->o.opendir);
 }
 
-static int str_header_offset_cb(void *data, unsigned int *off)
+static int str_verify_offset_cb(void *data, unsigned int *off)
 {
        struct thread_data *td = data;
+
        if (*off && *off < sizeof(struct verify_header)) {
-               log_err("fio: header_offset too small\n");
+               log_err("fio: verify_offset too small\n");
                return 1;
        }
-       td->o.header_offset = *off;
+
+       td->o.verify_offset = *off;
        return 0;
 }
 
+static int str_verify_pattern_cb(void *data, unsigned int *off)
+{
+       struct thread_data *td = data;
+       unsigned int msb;
+
+       msb = fls(*off);
+       if (msb <= 8)
+               td->o.verify_pattern_bytes = 1;
+       else if (msb <= 16)
+               td->o.verify_pattern_bytes = 2;
+       else if (msb <= 24)
+               td->o.verify_pattern_bytes = 3;
+       else
+               td->o.verify_pattern_bytes = 4;
+
+       td->o.verify_pattern = *off;
+       return 0;
+}
 
 #define __stringify_1(x)       #x
 #define __stringify(x)         __stringify_1(x)
@@ -615,18 +636,24 @@ static struct fio_option options[] = {
                .def    = "1",
        },
        {
-               .name   = "header_interval",
+               .name   = "verify_interval",
                .type   = FIO_OPT_STR_VAL_INT,
-               .off1   = td_var_offset(header_interval),
-               .help   = "Store buffer header every N bytes",
-               .def    = "0",
+               .off1   = td_var_offset(verify_interval),
+               .minval = 2 * sizeof(struct verify_header),
+               .help   = "Store verify buffer header every N bytes",
        },
        {
-               .name   = "header_offset",
+               .name   = "verify_offset",
                .type   = FIO_OPT_STR_VAL_INT,
-               .help   = "Offset header location by N bytes",
+               .help   = "Offset verify header location by N bytes",
                .def    = "0",
-               .cb     = str_header_offset_cb, 
+               .cb     = str_verify_offset_cb, 
+       },
+       {
+               .name   = "verify_pattern",
+               .type   = FIO_OPT_INT,
+               .cb     = str_verify_pattern_cb,
+               .help   = "Fill pattern for IO buffers",
        },
        {
                .name   = "write_iolog",