Add low water mark for queuing depth
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index e4fec4f6e0202a041dfd4524f45570a0bdd074de..1c2748e06ee4483b0cdef5457757985140a133a6 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -287,9 +287,13 @@ requeue:
                 * completed io_u's first.
                 */
                min_events = 0;
                 * completed io_u's first.
                 */
                min_events = 0;
-               if (queue_full(td) || ret == FIO_Q_BUSY)
+               if (queue_full(td) || ret == FIO_Q_BUSY) {
                        min_events = 1;
 
                        min_events = 1;
 
+                       if (td->cur_depth > td->iodepth_low)
+                               min_events = td->cur_depth - td->iodepth_low;
+               }
+
                /*
                 * Reap required number of io units, if any, and do the
                 * verification on them through the callback handler
                /*
                 * Reap required number of io units, if any, and do the
                 * verification on them through the callback handler
@@ -411,9 +415,13 @@ requeue:
                 */
                if (ret == FIO_Q_QUEUED || ret == FIO_Q_BUSY) {
                        min_evts = 0;
                 */
                if (ret == FIO_Q_QUEUED || ret == FIO_Q_BUSY) {
                        min_evts = 0;
-                       if (queue_full(td) || ret == FIO_Q_BUSY)
+                       if (queue_full(td) || ret == FIO_Q_BUSY) {
                                min_evts = 1;
 
                                min_evts = 1;
 
+                               if (td->cur_depth > td->iodepth_low)
+                                       min_evts = td->cur_depth - td->iodepth_low;
+                       }
+
                        fio_gettime(&comp_time, NULL);
                        bytes_done = io_u_queued_complete(td, min_evts, NULL);
                        if (bytes_done < 0)
                        fio_gettime(&comp_time, NULL);
                        bytes_done = io_u_queued_complete(td, min_evts, NULL);
                        if (bytes_done < 0)