td->total_io_size += ipo->len;
}
-void log_io_u(struct thread_data *td, struct io_u *io_u)
+void log_io_u(const struct thread_data *td, const struct io_u *io_u)
{
if (!td->o.write_iolog_file)
return;
static void iolog_delay(struct thread_data *td, unsigned long delay)
{
- unsigned long usec = utime_since_now(&td->last_issue);
- unsigned long this_delay;
+ uint64_t usec = utime_since_now(&td->last_issue);
+ uint64_t this_delay;
+ struct timeval tv;
+ if (delay < td->time_offset) {
+ td->time_offset = 0;
+ return;
+ }
+
+ delay -= td->time_offset;
if (delay < usec)
return;
delay -= usec;
+ fio_gettime(&tv, NULL);
while (delay && !td->terminate) {
this_delay = delay;
if (this_delay > 500000)
usec_sleep(td, this_delay);
delay -= this_delay;
}
+
+ usec = utime_since_now(&tv);
+ if (usec > delay)
+ td->time_offset = usec - delay;
+ else
+ td->time_offset = 0;
}
static int ipo_special(struct thread_data *td, struct io_piece *ipo)
}
while (!flist_empty(&td->io_hist_list)) {
- ipo = flist_entry(&td->io_hist_list, struct io_piece, list);
+ ipo = flist_first_entry(&td->io_hist_list, struct io_piece, list);
flist_del(&ipo->list);
remove_trim_entry(td, ipo);
td->io_hist_len--;
td->io_hist_len--;
}
-void trim_io_piece(struct thread_data *td, struct io_u *io_u)
+void trim_io_piece(struct thread_data *td, const struct io_u *io_u)
{
struct io_piece *ipo = io_u->ipo;
*/
total = ic.len;
do {
- size_t ret;
+ size_t iret;
- ret = inflate_chunk(&ic, 1, stdout, &stream, &iter);
- total -= ret;
+ iret = inflate_chunk(&ic, 1, stdout, &stream, &iter);
+ total -= iret;
if (!total)
break;
if (iter.err)
break;
ic.seq++;
- ic.len -= ret;
- ic.buf += ret;
+ ic.len -= iret;
+ ic.buf += iret;
} while (1);
if (iter.seq) {