return DDIR_WRITE;
}
+void io_u_quiesce(struct thread_data *td)
+{
+ /*
+ * We are going to sleep, ensure that we flush anything pending as
+ * 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.
+ */
+ while (td->io_u_in_flight) {
+ int fio_unused ret;
+
+ ret = io_u_queued_complete(td, 1, NULL);
+ }
+}
+
static enum fio_ddir rate_ddir(struct thread_data *td, enum fio_ddir ddir)
{
enum fio_ddir odir = ddir ^ 1;
} else
usec = td->rate_pending_usleep[ddir];
- /*
- * We are going to sleep, ensure that we flush anything pending as
- * 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.
- */
- while (td->io_u_in_flight) {
- int fio_unused ret;
-
- ret = io_u_queued_complete(td, 1, NULL);
- }
+ io_u_quiesce(td);
fio_gettime(&t, NULL);
usec_sleep(td, usec);
}
}
-/*
- * "randomly" fill the buffer contents
- */
-void io_u_fill_buffer(struct thread_data *td, struct io_u *io_u,
- unsigned int min_write, unsigned int max_bs)
+void fill_io_buffer(struct thread_data *td, void *buf, unsigned int min_write,
+ unsigned int max_bs)
{
- io_u->buf_filled_len = 0;
-
if (!td->o.zero_buffers) {
unsigned int perc = td->o.compress_percentage;
unsigned int seg = min_write;
seg = min(min_write, td->o.compress_chunk);
- fill_random_buf_percentage(&td->buf_state, io_u->buf,
+ if (!seg)
+ seg = min_write;
+
+ fill_random_buf_percentage(&td->buf_state, buf,
perc, seg, max_bs);
} else
- fill_random_buf(&td->buf_state, io_u->buf, max_bs);
+ fill_random_buf(&td->buf_state, buf, max_bs);
} else
- memset(io_u->buf, 0, max_bs);
+ memset(buf, 0, max_bs);
+}
+
+/*
+ * "randomly" fill the buffer contents
+ */
+void io_u_fill_buffer(struct thread_data *td, struct io_u *io_u,
+ unsigned int min_write, unsigned int max_bs)
+{
+ io_u->buf_filled_len = 0;
+ fill_io_buffer(td, io_u->buf, min_write, max_bs);
}