Fio 2.0.3
[fio.git] / io_u.c
diff --git a/io_u.c b/io_u.c
index 703d1e85e45ad570715d237bd3dc96fccff6f020..8a033485e7cf9eee2adbb893ab2d13bd2695dde0 100644 (file)
--- a/io_u.c
+++ b/io_u.c
@@ -377,6 +377,12 @@ static unsigned int __get_next_buflen(struct thread_data *td, struct io_u *io_u)
        if (minbs == maxbs)
                return minbs;
 
+       /*
+        * If we can't satisfy the min block size from here, then fail
+        */
+       if (!io_u_fits(td, io_u, minbs))
+               return 0;
+
        if (td->o.use_os_rand)
                rand_max = OS_RAND_MAX;
        else
@@ -496,12 +502,17 @@ static enum fio_ddir rate_ddir(struct thread_data *td, enum fio_ddir ddir)
 
        /*
         * We are going to sleep, ensure that we flush anything pending as
-        * not to skew our latency numbers
+        * not to skew our latency numbers.
+        *
+        * Changed to only monitor 'in flight' requests here instead of the
+        * td->cur_depth, b/c td->cur_depth does not accurately represent
+        * io's that have been actually submitted to an async engine,
+        * and cur_depth is meaningless for sync engines.
         */
-       if (td->cur_depth) {
+       if (td->io_u_in_flight) {
                int fio_unused ret;
 
-               ret = io_u_queued_complete(td, td->cur_depth, NULL);
+               ret = io_u_queued_complete(td, td->io_u_in_flight, NULL);
        }
 
        fio_gettime(&t, NULL);
@@ -1142,6 +1153,7 @@ static void small_content_scramble(struct io_u *io_u)
 
        p = io_u->xfer_buf;
        boffset = io_u->offset;
+       io_u->buf_filled_len = 0;
 
        for (i = 0; i < nr_blocks; i++) {
                /*