verify: always log IO in the order they are issued
[fio.git] / io_u.c
diff --git a/io_u.c b/io_u.c
index 518d884f867565cd70b398281797712d0be84755..64ff73cd5555b8d4efa0303085f7944cae07544c 100644 (file)
--- a/io_u.c
+++ b/io_u.c
@@ -1285,6 +1285,7 @@ again:
                io_u->acct_ddir = -1;
                td->cur_depth++;
                io_u->flags |= IO_U_F_IN_CUR_DEPTH;
+               io_u->ipo = NULL;
        } else if (td->o.verify_async) {
                /*
                 * We ran out, wait for async verify threads to finish and
@@ -1568,6 +1569,15 @@ static void io_completed(struct thread_data *td, struct io_u *io_u,
        td_io_u_lock(td);
        assert(io_u->flags & IO_U_F_FLIGHT);
        io_u->flags &= ~(IO_U_F_FLIGHT | IO_U_F_BUSY_OK);
+
+       /*
+        * Mark IO ok to verify
+        */
+       if (io_u->ipo) {
+               io_u->ipo->flags &= ~IP_F_IN_FLIGHT;
+               write_barrier();
+       }
+
        td_io_u_unlock(td);
 
        if (ddir_sync(io_u->ddir)) {
@@ -1623,12 +1633,6 @@ static void io_completed(struct thread_data *td, struct io_u *io_u,
                                         utime_since_now(&td->start));
                }
 
-               if (td_write(td) && idx == DDIR_WRITE &&
-                   td->o.do_verify &&
-                   td->o.verify != VERIFY_NONE &&
-                   !td->o.experimental_verify)
-                       log_io_piece(td, io_u);
-
                icd->bytes_done[idx] += bytes;
 
                if (io_u->end_io) {