X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=options.c;h=0fc9955729f55ce54ce4a66d7284f5db74778097;hp=f5071ae55897774a3923c2ef6fbfe78e68ba5f96;hb=056f3459149a7670257350d84b49858718e4a0e6;hpb=005c565ad012940aa4688de54a49beec26c5b1ad diff --git a/options.c b/options.c index f5071ae5..0fc99557 100644 --- a/options.c +++ b/options.c @@ -74,6 +74,7 @@ static int str_prioclass_cb(void *data, unsigned int *val) td->ioprio &= mask; td->ioprio |= *val << IOPRIO_CLASS_SHIFT; + td->ioprio_set = 1; return 0; } @@ -89,6 +90,7 @@ static int str_prio_cb(void *data, unsigned int *val) if ((td->ioprio >> IOPRIO_CLASS_SHIFT) == 0) td->ioprio |= IOPRIO_CLASS_BE << IOPRIO_CLASS_SHIFT; + td->ioprio_set = 1; return 0; } #endif @@ -217,12 +219,27 @@ static int str_verify_offset_cb(void *data, unsigned int *off) return 0; } -static int str_verify_pattern_cb(void *data, unsigned int *off) +static int str_verify_cb(void *data, const char *mem) { struct thread_data *td = data; - unsigned int msb; + unsigned int nr, msb; + char *pat; - msb = fls(*off); + if (td->o.verify != VERIFY_PATTERN) + return 0; + + pat = get_opt_postfix(mem); + if (!pat) { + log_err("fio: missing pattern\n"); + return 1; + } + + if (strstr(pat, "0x") || strstr(pat, "0X")) + nr = strtol(pat, NULL, 16); + else + nr = strtol(pat, NULL, 16); + + msb = fls(nr); if (msb <= 8) td->o.verify_pattern_bytes = 1; else if (msb <= 16) @@ -232,7 +249,7 @@ static int str_verify_pattern_cb(void *data, unsigned int *off) else td->o.verify_pattern_bytes = 4; - td->o.verify_pattern = *off; + td->o.verify_pattern = nr; return 0; } @@ -321,6 +338,9 @@ static struct fio_option options[] = { { .ival = "sync", .help = "Use read/write", }, + { .ival = "psync", + .help = "Use pread/pwrite", + }, #ifdef FIO_HAVE_LIBAIO { .ival = "libaio", .help = "Linux native asynchronous IO", @@ -603,6 +623,7 @@ static struct fio_option options[] = { .name = "verify", .type = FIO_OPT_STR, .off1 = td_var_offset(verify), + .cb = str_verify_cb, .help = "Verify data written", .def = "0", .posval = { @@ -642,6 +663,10 @@ static struct fio_option options[] = { .oval = VERIFY_META, .help = "Use io information", }, + { .ival = "pattern", + .oval = VERIFY_PATTERN, + .help = "Verify a specific buffer pattern", + }, { .ival = "null", .oval = VERIFY_NULL, @@ -651,7 +676,7 @@ static struct fio_option options[] = { }, { .name = "do_verify", - .type = FIO_OPT_INT, + .type = FIO_OPT_BOOL, .off1 = td_var_offset(do_verify), .help = "Run verification stage after write", .def = "1", @@ -682,11 +707,12 @@ static struct fio_option options[] = { .parent = "verify", }, { - .name = "verify_pattern", - .type = FIO_OPT_INT, - .cb = str_verify_pattern_cb, - .help = "Fill pattern for IO buffers", - .parent = "verify", + .name = "verify_fatal", + .type = FIO_OPT_BOOL, + .off1 = td_var_offset(verify_fatal), + .def = "0", + .help = "Exit on a single verify failure, don't continue", + .parent = "verify", }, { .name = "write_iolog",