Adds check for numberio during verify phase.
[fio.git] / verify.c
index 721aeb46635701b3f0f1cca8fc2db18d8c2cc4eb..f592c55c509e6e811417bf73b654b9dfae8adce5 100644 (file)
--- a/verify.c
+++ b/verify.c
@@ -383,6 +383,15 @@ static int verify_io_u_meta(struct verify_header *hdr, struct vcont *vc)
        if (td->o.verify_pattern_bytes)
                ret |= verify_io_u_pattern(hdr, vc);
 
+       /*
+        * For read-only workloads, the program cannot be certain of the
+        * last numberio written to a block. Checking of numberio will be done
+        * only for workloads that write data.
+        */
+       if (td_write(td) || td_rw(td))
+               if (vh->numberio != io_u->numberio)
+                       ret = EILSEQ;
+
        if (!ret)
                return 0;
 
@@ -782,7 +791,7 @@ static void fill_meta(struct verify_header *hdr, struct thread_data *td,
        vh->time_sec = io_u->start_time.tv_sec;
        vh->time_usec = io_u->start_time.tv_usec;
 
-       vh->numberio = td->io_issues[DDIR_WRITE];
+       vh->numberio = io_u->numberio;
 
        vh->offset = io_u->offset + header_num * td->o.verify_interval;
 }
@@ -956,6 +965,8 @@ void populate_verify_io_u(struct thread_data *td, struct io_u *io_u)
        if (td->o.verify == VERIFY_NULL)
                return;
 
+       io_u->numberio = td->io_issues[io_u->ddir];
+
        fill_pattern_headers(td, io_u, 0, 0);
 }
 
@@ -988,6 +999,7 @@ int get_next_verify(struct thread_data *td, struct io_u *io_u)
 
                io_u->offset = ipo->offset;
                io_u->buflen = ipo->len;
+               io_u->numberio = ipo->numberio;
                io_u->file = ipo->file;
                io_u->flags |= IO_U_F_VER_LIST;