X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=verify.c;h=696aff762abce69849e254cce47b6accd4fa9dd7;hb=d3a173a927084660c365d6aa162016ebb0746946;hp=eb8eddc78906f4b0dcaa13a9899495e5a8670dca;hpb=9a2a86d0f6f1425a6da666459ccd379e356a30d0;p=fio.git diff --git a/verify.c b/verify.c index eb8eddc7..696aff76 100644 --- a/verify.c +++ b/verify.c @@ -551,10 +551,7 @@ static int verify_io_u_crc32c(struct verify_header *hdr, struct vcont *vc) dprint(FD_VERIFY, "crc32c verify io_u %p, len %u\n", vc->io_u, hdr->len); - if (hdr->verify_type == VERIFY_CRC32C_INTEL) - c = crc32c_intel(p, hdr->len - hdr_size(hdr)); - else - c = crc32c(p, hdr->len - hdr_size(hdr)); + c = crc32c(p, hdr->len - hdr_size(hdr)); if (c == vh->crc32) return 0; @@ -649,6 +646,19 @@ static int verify_trimmed_io_u(struct thread_data *td, struct io_u *io_u) return ret; } +static int verify_hdr_crc(struct verify_header *hdr) +{ + void *p = hdr; + uint32_t crc; + + crc = crc32c(p, sizeof(*hdr) - sizeof(hdr->crc32)); + if (crc == hdr->crc32) + return 1; + + log_err("fio: verify header crc %x, calculated %x\n", hdr->crc32, crc); + return 0; +} + int verify_io_u(struct thread_data *td, struct io_u *io_u) { struct verify_header *hdr; @@ -682,9 +692,9 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u) memswp(p, p + td->o.verify_offset, header_size); hdr = p; - if (hdr->fio_magic != FIO_HDR_MAGIC) { + if (hdr->magic != FIO_HDR_MAGIC || !verify_hdr_crc(hdr)) { log_err("verify: bad magic header %x, wanted %x at file %s offset %llu, length %u\n", - hdr->fio_magic, FIO_HDR_MAGIC, + hdr->magic, FIO_HDR_MAGIC, io_u->file->file_name, io_u->offset + hdr_num * hdr->len, hdr->len); return EILSEQ; @@ -811,10 +821,7 @@ static void fill_crc32c(struct verify_header *hdr, void *p, unsigned int len) { struct vhdr_crc32 *vh = hdr_priv(hdr); - if (hdr->verify_type == VERIFY_CRC32C_INTEL) - vh->crc32 = crc32c_intel(p, len); - else - vh->crc32 = crc32c(p, len); + vh->crc32 = crc32c(p, len); } static void fill_crc64(struct verify_header *hdr, void *p, unsigned int len) @@ -844,10 +851,12 @@ static void populate_hdr(struct thread_data *td, struct io_u *io_u, p = (void *) hdr; - hdr->fio_magic = FIO_HDR_MAGIC; - hdr->len = header_len; + hdr->magic = FIO_HDR_MAGIC; hdr->verify_type = td->o.verify; + hdr->len = header_len; hdr->rand_seed = io_u->rand_seed; + hdr->crc32 = crc32c(p, sizeof(*hdr) - sizeof(hdr->crc32)); + data_len = header_len - hdr_size(hdr); data = p + hdr_size(hdr);