projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fio is also available over http://
[fio.git]
/
verify.c
diff --git
a/verify.c
b/verify.c
index 32cfdd7a24859df70ca5192dbe7397c02075ba65..46e610d713fd221d0e10b7cc74579f5ffb54fc10 100644
(file)
--- a/
verify.c
+++ b/
verify.c
@@
-6,7
+6,6
@@
#include <string.h>
#include "fio.h"
#include <string.h>
#include "fio.h"
-#include "os.h"
static void fill_random_bytes(struct thread_data *td,
unsigned char *p, unsigned int len)
static void fill_random_bytes(struct thread_data *td,
unsigned char *p, unsigned int len)
@@
-38,8
+37,8
@@
static void hexdump(void *buffer, int len)
int i;
for (i = 0; i < len; i++)
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)
}
static int verify_io_u_crc32(struct verify_header *hdr, struct io_u *io_u)
@@
-78,14
+77,17
@@
static int verify_io_u_md5(struct verify_header *hdr, struct io_u *io_u)
return 0;
}
return 0;
}
-
static int verify_io_u(
struct io_u *io_u)
+
int verify_io_u(struct thread_data *td,
struct io_u *io_u)
{
struct verify_header *hdr = (struct verify_header *) io_u->buf;
int ret;
{
struct verify_header *hdr = (struct verify_header *) io_u->buf;
int ret;
+ if (td->o.verify == VERIFY_NULL)
+ return 0;
+
if (hdr->fio_magic != FIO_HDR_MAGIC) {
log_err("Bad verify header %x\n", hdr->fio_magic);
if (hdr->fio_magic != FIO_HDR_MAGIC) {
log_err("Bad verify header %x\n", hdr->fio_magic);
- return
1
;
+ return
EIO
;
}
if (hdr->verify_type == VERIFY_MD5)
}
if (hdr->verify_type == VERIFY_MD5)
@@
-97,7
+99,10
@@
static int verify_io_u(struct io_u *io_u)
ret = 1;
}
ret = 1;
}
- return ret;
+ if (ret)
+ return EIO;
+
+ return 0;
}
static void fill_crc32(struct verify_header *hdr, void *p, unsigned int len)
}
static void fill_crc32(struct verify_header *hdr, void *p, unsigned int len)
@@
-123,15
+128,18
@@
void populate_verify_io_u(struct thread_data *td, struct io_u *io_u)
unsigned char *p = (unsigned char *) io_u->buf;
struct verify_header hdr;
unsigned char *p = (unsigned char *) io_u->buf;
struct verify_header hdr;
+ if (td->o.verify == VERIFY_NULL)
+ return;
+
hdr.fio_magic = FIO_HDR_MAGIC;
hdr.len = io_u->buflen;
p += sizeof(hdr);
fill_random_bytes(td, p, io_u->buflen - sizeof(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) {
+ if (td->
o.
verify == VERIFY_MD5) {
fill_md5(&hdr, p, io_u->buflen - sizeof(hdr));
hdr.verify_type = VERIFY_MD5;
fill_md5(&hdr, p, io_u->buflen - sizeof(hdr));
hdr.verify_type = VERIFY_MD5;
- } else {
+ } else
if (td->o.verify == VERIFY_CRC32)
{
fill_crc32(&hdr, p, io_u->buflen - sizeof(hdr));
hdr.verify_type = VERIFY_CRC32;
}
fill_crc32(&hdr, p, io_u->buflen - sizeof(hdr));
hdr.verify_type = VERIFY_CRC32;
}
@@
-141,13
+149,25
@@
void populate_verify_io_u(struct thread_data *td, struct io_u *io_u)
int get_next_verify(struct thread_data *td, struct io_u *io_u)
{
int get_next_verify(struct thread_data *td, struct io_u *io_u)
{
- struct io_piece *ipo;
+ struct io_piece *ipo
= NULL
;
- if (!list_empty(&td->io_hist_list)) {
- ipo = list_entry(td->io_hist_list.next, struct io_piece, list);
+ /*
+ * this io_u is from a requeue, we already filled the offsets
+ */
+ if (io_u->file)
+ return 0;
+
+ if (!RB_EMPTY_ROOT(&td->io_hist_tree)) {
+ struct rb_node *n = rb_first(&td->io_hist_tree);
+ ipo = rb_entry(n, struct io_piece, rb_node);
+ rb_erase(n, &td->io_hist_tree);
+ } else if (!list_empty(&td->io_hist_list)) {
+ ipo = list_entry(td->io_hist_list.next, struct io_piece, list);
list_del(&ipo->list);
list_del(&ipo->list);
+ }
+ if (ipo) {
io_u->offset = ipo->offset;
io_u->buflen = ipo->len;
io_u->file = ipo->file;
io_u->offset = ipo->offset;
io_u->buflen = ipo->len;
io_u->file = ipo->file;
@@
-160,21
+180,3
@@
int get_next_verify(struct thread_data *td, struct io_u *io_u)
return 1;
}
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) {
- struct io_completion_data icd;
-
- ret = verify_io_u(v_io_u);
- init_icd(&icd);
- io_completed(td, v_io_u, &icd);
- put_io_u(td, v_io_u);
- *io_u = NULL;
- }
-
- return ret;
-}