X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=verify.c;h=cb13b629be29886b5dbfa4318102c7b05e7c1ca6;hp=6dd7f6a0285df0613d15d6590f9a604e90cd6b49;hb=6683745b5156220ed1a44aab3315afb6c0ff73bb;hpb=8a99fdf63e1350fc2c35794e1c1f779885905b29 diff --git a/verify.c b/verify.c index 6dd7f6a0..cb13b629 100644 --- a/verify.c +++ b/verify.c @@ -13,6 +13,7 @@ #include "smalloc.h" #include "trim.h" #include "lib/rand.h" +#include "lib/hweight.h" #include "crc/md5.h" #include "crc/crc64.h" @@ -308,14 +309,6 @@ static inline void *io_u_verify_off(struct verify_header *hdr, struct vcont *vc) return vc->io_u->buf + vc->hdr_num * hdr->len + hdr_size(hdr); } -static unsigned int hweight8(unsigned int w) -{ - unsigned int res = w - ((w >> 1) & 0x55); - - res = (res & 0x33) + ((res >> 2) & 0x33); - return (res + (res >> 4)) & 0x0F; -} - static int verify_io_u_pattern(struct verify_header *hdr, struct vcont *vc) { struct thread_data *td = vc->td; @@ -690,6 +683,7 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u) .hdr_num = hdr_num, .td = td, }; + unsigned int verify_type; if (ret && td->o.verify_fatal) break; @@ -708,7 +702,12 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u) return EILSEQ; } - switch (hdr->verify_type) { + if (td->o.verify != VERIFY_NONE) + verify_type = td->o.verify; + else + verify_type = hdr->verify_type; + + switch (verify_type) { case VERIFY_MD5: ret = verify_io_u_md5(hdr, &vc); break; @@ -747,6 +746,10 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u) log_err("Bad verify type %u\n", hdr->verify_type); ret = EINVAL; } + + if (ret && verify_type != hdr->verify_type) + log_err("fio: verify type mismatch (%u media, %u given)\n", + hdr->verify_type, verify_type); } done: @@ -973,6 +976,7 @@ int get_next_verify(struct thread_data *td, struct io_u *io_u) io_u->offset = ipo->offset; io_u->buflen = ipo->len; io_u->file = ipo->file; + io_u->flags |= IO_U_F_VER_LIST; if (ipo->flags & IP_F_TRIMMED) io_u->flags |= IO_U_F_TRIMMED; @@ -1048,8 +1052,7 @@ static void *verify_async_thread(void *data) put_io_u(td, io_u); if (!ret) continue; - if (td->o.continue_on_error & ERROR_TYPE_VERIFY && - td_non_fatal_error(ret)) { + if (td_non_fatal_error(td, ERROR_TYPE_VERIFY_BIT, ret)) { update_error_count(td, ret); td_clear_error(td); ret = 0;