Add regression test for f7078f7b
[fio.git] / io_u.c
diff --git a/io_u.c b/io_u.c
index d794f011a28332bc96f9e85df16efca920e4f418..2deb5c7216aea5e02c66cf8237fb7648fc3a2dd2 100644 (file)
--- a/io_u.c
+++ b/io_u.c
@@ -668,7 +668,7 @@ static int fill_io_u(struct thread_data *td, struct io_u *io_u)
        /*
         * See if it's time to switch to a new zone
         */
-       if (td->zone_bytes >= td->o.zone_size) {
+       if (td->zone_bytes >= td->o.zone_size && td->o.zone_skip) {
                td->zone_bytes = 0;
                io_u->file->file_offset += td->o.zone_range + td->o.zone_skip;
                io_u->file->last_pos = io_u->file->file_offset;
@@ -1227,9 +1227,10 @@ struct io_u *get_io_u(struct thread_data *td)
                if (io_u->ddir == DDIR_WRITE) {
                        if (td->o.verify != VERIFY_NONE)
                                populate_verify_io_u(td, io_u);
-                       else if (td->o.refill_buffers)
-                               io_u_fill_buffer(td, io_u, io_u->xfer_buflen);
-                       else if (td->o.scramble_buffers)
+                       else if (td->o.refill_buffers) {
+                               io_u_fill_buffer(td, io_u,
+                                       io_u->xfer_buflen, io_u->xfer_buflen);
+                       } else if (td->o.scramble_buffers)
                                do_scramble = 1;
                } else if (io_u->ddir == DDIR_READ) {
                        /*
@@ -1532,12 +1533,18 @@ void io_u_queued(struct thread_data *td, struct io_u *io_u)
  * "randomly" fill the buffer contents
  */
 void io_u_fill_buffer(struct thread_data *td, struct io_u *io_u,
-                     unsigned int max_bs)
+                     unsigned int min_write, unsigned int max_bs)
 {
        io_u->buf_filled_len = 0;
 
-       if (!td->o.zero_buffers)
-               fill_random_buf(&td->buf_state, io_u->buf, max_bs);
-       else
+       if (!td->o.zero_buffers) {
+               unsigned int perc = td->o.compress_percentage;
+
+               if (perc) {
+                       fill_random_buf_percentage(&td->buf_state, io_u->buf,
+                                               perc, min_write, max_bs);
+               } else
+                       fill_random_buf(&td->buf_state, io_u->buf, max_bs);
+       } else
                memset(io_u->buf, 0, max_bs);
 }