X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=verify.c;h=265bd5563210bcb1db2cadd69c127e8f4c79869f;hb=4ccdccd149d82c94ec6ccdb4118d9e27479b8516;hp=bb0aba77f96400f66e7729a202773a905c944d2c;hpb=32c17adf7f75da1f0957d4691633fea60259910f;p=fio.git diff --git a/verify.c b/verify.c index bb0aba77..265bd556 100644 --- a/verify.c +++ b/verify.c @@ -10,6 +10,7 @@ #include "fio.h" #include "verify.h" #include "smalloc.h" +#include "lib/rand.h" #include "crc/md5.h" #include "crc/crc64.h" @@ -21,35 +22,12 @@ #include "crc/sha512.h" #include "crc/sha1.h" -static void fill_random_bytes(struct thread_data *td, void *p, unsigned int len) -{ - unsigned int todo; - int r; - - while (len) { - r = os_random_long(&td->verify_state); - - /* - * lrand48_r seems to be broken and only fill the bottom - * 32-bits, even on 64-bit archs with 64-bit longs - */ - todo = sizeof(r); - if (todo > len) - todo = len; - - memcpy(p, &r, todo); - - len -= todo; - p += todo; - } -} - static void fill_pattern(struct thread_data *td, void *p, unsigned int len) { switch (td->o.verify_pattern_bytes) { case 0: dprint(FD_VERIFY, "fill random bytes len=%u\n", len); - fill_random_bytes(td, p, len); + fill_random_buf(p, len); break; case 1: dprint(FD_VERIFY, "fill verify pattern b=0 len=%u\n", len); @@ -503,19 +481,19 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u) .hdr_num = hdr_num, }; - if (ret && td->o.verify_fatal) { - td->terminate = 1; + if (ret && td->o.verify_fatal) break; - } + hdr_size = __hdr_size(td->o.verify); if (td->o.verify_offset) memswp(p, p + td->o.verify_offset, hdr_size); hdr = p; if (hdr->fio_magic != FIO_HDR_MAGIC) { - log_err("Bad verify header %x at %llu\n", - hdr->fio_magic, - io_u->offset + hdr_num * hdr->len); + log_err("verify: bad magic header %x, wanted %x at file %s offset %llu, length %u\n", + hdr->fio_magic, FIO_HDR_MAGIC, + io_u->file->file_name, + io_u->offset + hdr_num * hdr->len, hdr->len); return EILSEQ; } @@ -527,16 +505,19 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u) p + hdr_size, hdr_inc - hdr_size, hdr_size % td->o.verify_pattern_bytes); + + if (ret) { + log_err("pattern: verify failed at file %s offset %llu, length %u\n", + io_u->file->file_name, + io_u->offset + hdr_num * hdr->len, + hdr->len); + } + /* * Also verify the meta data, if applicable */ if (hdr->verify_type == VERIFY_META) ret |= verify_io_u_meta(hdr, td, &vc); - - if (ret) - log_err("fio: verify failed at %llu/%u\n", - io_u->offset + hdr_num * hdr->len, - hdr->len); continue; } @@ -578,6 +559,9 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u) } } + if (ret && td->o.verify_fatal) + td->terminate = 1; + return ret; } @@ -875,7 +859,8 @@ static void *verify_async_thread(void *data) if (ret) { td_verror(td, ret, "async_verify"); - td->terminate = 1; + if (td->o.verify_fatal) + td->terminate = 1; } done: