Fix verify
[fio.git] / verify.c
index f21ad6e1a3af73ec535a5c47d181b95a326d189b..0a504deb15f2e22ca6ce20a526296cd97102fcb4 100644 (file)
--- a/verify.c
+++ b/verify.c
@@ -646,12 +646,15 @@ 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)
+static int verify_header(struct verify_header *hdr)
 {
        void *p = hdr;
        uint32_t crc;
 
-       crc = crc32c(p, sizeof(*hdr) - sizeof(hdr->crc32));
+       if (hdr->magic != FIO_HDR_MAGIC)
+               return 0;
+
+       crc = crc32c(p, offsetof(struct verify_header, crc32));
        if (crc == hdr->crc32)
                return 1;
 
@@ -692,8 +695,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->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",
+               if (!verify_header(hdr)) {
+                       log_err("verify: bad magic header %x, wanted %x at "
+                               "file %s offset %llu, length %u\n",
                                hdr->magic, FIO_HDR_MAGIC,
                                io_u->file->file_name,
                                io_u->offset + hdr_num * hdr->len, hdr->len);
@@ -855,7 +859,7 @@ static void populate_hdr(struct thread_data *td, struct io_u *io_u,
        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));
+       hdr->crc32 = crc32c(p, offsetof(struct verify_header, crc32));
 
        data_len = header_len - hdr_size(hdr);