break;
case 1:
dprint(FD_VERIFY, "fill verify pattern b=0 len=%u\n", len);
- memset(p, td->o.verify_pattern, len);
+ memset(p, td->o.verify_pattern[0], len);
break;
- case 2:
- case 3:
- case 4: {
- unsigned int pattern = td->o.verify_pattern;
- unsigned int i = 0;
- unsigned char c1, c2, c3, c4;
+ default: {
+ unsigned int i = 0, size = 0;
unsigned char *b = p;
dprint(FD_VERIFY, "fill verify pattern b=%d len=%u\n",
td->o.verify_pattern_bytes, len);
- c1 = pattern & 0xff;
- pattern >>= 8;
- c2 = pattern & 0xff;
- pattern >>= 8;
- c3 = pattern & 0xff;
- pattern >>= 8;
- c4 = pattern & 0xff;
-
while (i < len) {
- b[i++] = c1;
- if (i == len)
- break;
- b[i++] = c2;
- if (td->o.verify_pattern_bytes == 2 || i == len)
- continue;
- b[i++] = c3;
- if (td->o.verify_pattern_bytes == 3 || i == len)
- continue;
- b[i++] = c4;
+ size = td->o.verify_pattern_bytes;
+ if (size > (len - i))
+ size = len - i;
+ memcpy(b+i, td->o.verify_pattern, size);
+ i += size;
}
break;
}
{
void *p = io_u_verify_off(hdr, io_u, header_num);
struct vhdr_sha256 *vh = hdr_priv(hdr);
- uint8_t sha256[128];
+ uint8_t sha256[64];
struct sha256_ctx sha256_ctx = {
.buf = sha256,
};
return (res + (res >> 4)) & 0x0F;
}
-int verify_io_u_pattern(unsigned long pattern, unsigned long pattern_size,
+int verify_io_u_pattern(char *pattern, unsigned long pattern_size,
char *buf, unsigned int len, unsigned int mod)
{
unsigned int i;
- char split_pattern[4];
-
- for (i = 0; i < 4; i++) {
- split_pattern[i] = pattern & 0xff;
- pattern >>= 8;
- }
for (i = 0; i < len; i++) {
- if (buf[i] != split_pattern[mod]) {
+ if (buf[i] != pattern[mod]) {
unsigned int bits;
- bits = hweight8(buf[i] ^ split_pattern[mod]);
+ bits = hweight8(buf[i] ^ pattern[mod]);
log_err("fio: got pattern %x, wanted %x. Bad bits %d\n",
- buf[i], split_pattern[mod], bits);
+ buf[i], pattern[mod], bits);
log_err("fio: bad pattern block offset %u\n", i);
return EILSEQ;
}
io_u->file = NULL;
pthread_mutex_lock(&td->io_u_lock);
+
+ if (io_u->flags & IO_U_F_IN_CUR_DEPTH) {
+ td->cur_depth--;
+ io_u->flags &= ~IO_U_F_IN_CUR_DEPTH;
+ }
flist_del(&io_u->list);
flist_add_tail(&io_u->list, &td->verify_list);
+ io_u->flags |= IO_U_F_FREE_DEF;
pthread_mutex_unlock(&td->io_u_lock);
pthread_cond_signal(&td->verify_cond);
- io_u->flags |= IO_U_F_FREE_DEF;
return 0;
}
hdr = p;
if (hdr->fio_magic != FIO_HDR_MAGIC) {
- log_err("Bad verify header %x\n", hdr->fio_magic);
+ log_err("Bad verify header %x at %llu\n",
+ hdr->fio_magic,
+ io_u->offset + hdr_num * hdr->len);
return EILSEQ;
}
dprint(FD_VERIFY, "pattern verify io_u %p, len %u\n",
io_u, hdr->len);
ret = verify_io_u_pattern(td->o.verify_pattern,
- td->o.verify_pattern_bytes,
- p + hdr_size,
- hdr_inc - hdr_size,
- hdr_size % 4);
+ td->o.verify_pattern_bytes,
+ p + hdr_size,
+ hdr_inc - hdr_size,
+ hdr_size % td->o.verify_pattern_bytes);
/*
* Also verify the meta data, if applicable
*/