X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=options.c;h=3112d65e5297f5fb66902c2c237abf7adf832ed6;hp=8c27d46183379cd0f1fb9e5691f7d48436525fb8;hb=90059d65bde4804e4da07401ad6902c1d956b592;hpb=d77a7af3e718200bbd77d76194725ead4bdb3591 diff --git a/options.c b/options.c index 8c27d461..3112d65e 100644 --- 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,6 +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_verify_offset_cb(void *data, unsigned int *off) +{ + struct thread_data *td = data; + + if (*off && *off < sizeof(struct verify_header)) { + log_err("fio: verify_offset too small\n"); + return 1; + } + + 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) @@ -569,6 +601,10 @@ static struct fio_option options[] = { .oval = VERIFY_NONE, .help = "Don't do IO verification", }, + { .ival = "md5", + .oval = VERIFY_MD5, + .help = "Use md5 checksums for verification", + }, { .ival = "crc64", .oval = VERIFY_CRC64, .help = "Use crc64 checksums for verification", @@ -585,10 +621,6 @@ static struct fio_option options[] = { .oval = VERIFY_CRC7, .help = "Use crc7 checksums for verification", }, - { .ival = "md5", - .oval = VERIFY_MD5, - .help = "Use md5 checksums for verification", - }, { .ival = "null", .oval = VERIFY_NULL, @@ -603,6 +635,27 @@ static struct fio_option options[] = { .help = "Sort written verify blocks for read back", .def = "1", }, + { + .name = "verify_interval", + .type = FIO_OPT_STR_VAL_INT, + .off1 = td_var_offset(verify_interval), + .minval = 2 * sizeof(struct verify_header), + .help = "Store verify buffer header every N bytes", + }, + { + .name = "verify_offset", + .type = FIO_OPT_STR_VAL_INT, + .help = "Offset verify header location by N bytes", + .def = "0", + .cb = str_verify_offset_cb, + }, + { + .name = "verify_pattern", + .type = FIO_OPT_INT, + .cb = str_verify_pattern_cb, + .maxval = UINT_MAX, + .help = "Fill pattern for IO buffers", + }, { .name = "write_iolog", .type = FIO_OPT_STR_STORE,