int i;
for (i = 0; i < len; i++)
- fprintf(f_out, "%02x", p[i]);
- fprintf(f_out, "\n");
+ log_info("%02x", p[i]);
+ log_info("\n");
}
static int verify_io_u_crc32(struct verify_header *hdr, struct io_u *io_u)
return 0;
}
-static int verify_io_u(struct io_u *io_u)
+int verify_io_u(struct io_u *io_u)
{
struct verify_header *hdr = (struct verify_header *) io_u->buf;
int ret;
- if (hdr->fio_magic != FIO_HDR_MAGIC)
- return 1;
+ if (hdr->fio_magic != FIO_HDR_MAGIC) {
+ log_err("Bad verify header %x\n", hdr->fio_magic);
+ return EIO;
+ }
if (hdr->verify_type == VERIFY_MD5)
ret = verify_io_u_md5(hdr, io_u);
ret = 1;
}
- return ret;
+ if (ret)
+ return EIO;
+
+ return 0;
}
static void fill_crc32(struct verify_header *hdr, void *p, unsigned int len)
p += sizeof(hdr);
fill_random_bytes(td, p, io_u->buflen - sizeof(hdr));
- if (td->verify == VERIFY_MD5) {
+ if (td->o.verify == VERIFY_MD5) {
fill_md5(&hdr, p, io_u->buflen - sizeof(hdr));
hdr.verify_type = VERIFY_MD5;
} else {
{
struct io_piece *ipo;
+ /*
+ * this io_u is from a requeue, we already filled the offsets
+ */
+ if (io_u->file)
+ return 0;
+
if (!list_empty(&td->io_hist_list)) {
ipo = list_entry(td->io_hist_list.next, struct io_piece, list);
io_u->offset = ipo->offset;
io_u->buflen = ipo->len;
+ io_u->file = ipo->file;
io_u->ddir = DDIR_READ;
+ io_u->xfer_buf = io_u->buf;
+ io_u->xfer_buflen = io_u->buflen;
free(ipo);
return 0;
}
return 1;
}
-
-int do_io_u_verify(struct thread_data *td, struct io_u **io_u)
-{
- struct io_u *v_io_u = *io_u;
- int ret = 0;
-
- if (v_io_u) {
- ret = verify_io_u(v_io_u);
- put_io_u(td, v_io_u);
- *io_u = NULL;
- }
-
- return ret;
-}