- unsigned char *p = (unsigned char *) io_u->buf;
- struct verify_header hdr;
-
- hdr.fio_magic = FIO_HDR_MAGIC;
- hdr.len = io_u->buflen;
- p += sizeof(hdr);
- fill_random_bytes(td, p, io_u->buflen - sizeof(hdr));
-
- if (td->verify == VERIFY_MD5) {
- fill_md5(&hdr, p, io_u->buflen - sizeof(hdr));
- hdr.verify_type = VERIFY_MD5;
- } else {
- fill_crc32(&hdr, p, io_u->buflen - sizeof(hdr));
- hdr.verify_type = VERIFY_CRC32;
+ struct verify_header *hdr;
+ void *p = io_u->buf, *data;
+ unsigned int hdr_inc, data_len;
+
+ if (td->o.verify == VERIFY_NULL)
+ return;
+
+ fill_pattern(td, p, io_u->buflen);
+
+ hdr_inc = io_u->buflen;
+ if (td->o.verify_interval)
+ hdr_inc = td->o.verify_interval;
+
+ for (;p < io_u->buf + io_u->buflen; p += hdr_inc) {
+ hdr = p;
+
+ hdr->fio_magic = FIO_HDR_MAGIC;
+ hdr->verify_type = td->o.verify;
+ hdr->len = hdr_inc;
+ data_len = hdr_inc - hdr_size(hdr);
+
+ data = p + hdr_size(hdr);
+ switch (td->o.verify) {
+ case VERIFY_MD5:
+ fill_md5(hdr, data, data_len);
+ break;
+ case VERIFY_CRC64:
+ fill_crc64(hdr, data, data_len);
+ break;
+ case VERIFY_CRC32:
+ fill_crc32(hdr, data, data_len);
+ break;
+ case VERIFY_CRC16:
+ fill_crc16(hdr, data, data_len);
+ break;
+ case VERIFY_CRC7:
+ fill_crc7(hdr, data, data_len);
+ break;
+ case VERIFY_SHA256:
+ fill_sha256(hdr, data, data_len);
+ break;
+ case VERIFY_SHA512:
+ fill_sha512(hdr, data, data_len);
+ break;
+ default:
+ log_err("fio: bad verify type: %d\n", td->o.verify);
+ assert(0);
+ }
+ if (td->o.verify_offset)
+ memswp(p, p + td->o.verify_offset, hdr_size(hdr));