Add buffer_compress_percentage
[fio.git] / io_u.c
diff --git a/io_u.c b/io_u.c
index 8a033485e7cf9eee2adbb893ab2d13bd2695dde0..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) {
                        /*
@@ -1375,7 +1376,8 @@ static void io_completed(struct thread_data *td, struct io_u *io_u,
                        }
                }
 
-               if (ramp_time_over(td) && td->runstate == TD_RUNNING) {
+               if (ramp_time_over(td) && (td->runstate == TD_RUNNING ||
+                                          td->runstate == TD_VERIFYING)) {
                        account_io_completion(td, io_u, icd, idx, bytes);
 
                        if (__should_check_rate(td, idx)) {
@@ -1531,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);
 }