assert(ddir_rw(ddir));
if (f->last_pos < f->real_file_size) {
- unsigned long long pos = f->last_pos - f->file_offset;
+ unsigned long long pos;
+ if (f->last_pos == f->file_offset && td->o.ddir_seq_add < 0)
+ f->last_pos = f->real_file_size;
+
+ pos = f->last_pos - f->file_offset;
if (pos)
pos += td->o.ddir_seq_add;
} 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
+ */
+ if (td->cur_depth) {
+ int fio_unused ret;
+
+ ret = io_u_queued_complete(td, td->cur_depth, NULL);
+ }
+
fio_gettime(&t, NULL);
usec_sleep(td, usec);
usec = utime_since_now(&t);
io_u->buf_filled_len = 0;
if (!td->o.zero_buffers)
- fill_random_buf(io_u->buf, max_bs);
+ fill_random_buf(&td->buf_state, io_u->buf, max_bs);
else
memset(io_u->buf, 0, max_bs);
}