X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=iolog.c;h=74c89f0cae2de5c3b0bad5438dc63ac9d211db28;hb=41a87019871503bb85e19e622b6a5f47de6c2aeb;hp=2b5eaf0c52dac715e971e26915d3015f9c274c2c;hpb=ec2ea18e87fad6c42d6875cd4ee1bb25ef9b4627;p=fio.git diff --git a/iolog.c b/iolog.c index 2b5eaf0c..74c89f0c 100644 --- a/iolog.c +++ b/iolog.c @@ -63,6 +63,7 @@ void log_file(struct thread_data *td, struct fio_file *f, static void iolog_delay(struct thread_data *td, unsigned long delay) { uint64_t usec = utime_since_now(&td->last_issue); + unsigned long orig_delay = delay; uint64_t this_delay; struct timespec ts; @@ -88,8 +89,8 @@ static void iolog_delay(struct thread_data *td, unsigned long delay) } usec = utime_since_now(&ts); - if (usec > delay) - td->time_offset = usec - delay; + if (usec > orig_delay) + td->time_offset = usec - orig_delay; else td->time_offset = 0; } @@ -226,16 +227,11 @@ void log_io_piece(struct thread_data *td, struct io_u *io_u) } /* - * We don't need to sort the entries if we only performed sequential - * writes. In this case, just reading back data in the order we wrote - * it out is the faster but still safe. - * - * One exception is if we don't have a random map in which case we need + * Only sort writes if we don't have a random map in which case we need * to check for duplicate blocks and drop the old one, which we rely on * the rb insert/lookup for handling. */ - if (((!td->o.verifysort) || !td_random(td)) && - file_randommap(td, ipo->file)) { + if (file_randommap(td, ipo->file)) { INIT_FLIST_HEAD(&ipo->list); flist_add_tail(&ipo->list, &td->io_hist_list); ipo->flags |= IP_F_ONLIST; @@ -978,7 +974,7 @@ int iolog_file_inflate(const char *file) struct iolog_compress ic; z_stream stream; struct stat sb; - ssize_t ret; + size_t ret; size_t total; void *buf; FILE *f; @@ -1000,12 +996,12 @@ int iolog_file_inflate(const char *file) ic.seq = 1; ret = fread(ic.buf, ic.len, 1, f); - if (ret < 0) { + if (ret == 0 && ferror(f)) { perror("fread"); fclose(f); free(buf); return 1; - } else if (ret != 1) { + } else if (ferror(f) || (!feof(f) && ret != 1)) { log_err("fio: short read on reading log\n"); fclose(f); free(buf);