X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.c;h=fcf3ae80c1fd5316c0ce121434eef2426b4471fe;hb=1d2e2718a98ca85f9b4234d524e6cfad8057387e;hp=6483e64c9462eeae4075fa6f449dae7970bb1eeb;hpb=375b2695693f56987e23deef3ded8e5b06ef6797;p=fio.git diff --git a/fio.c b/fio.c index 6483e64c..fcf3ae80 100644 --- a/fio.c +++ b/fio.c @@ -721,6 +721,24 @@ static int switch_ioscheduler(struct thread_data *td) return 0; } +static int keep_running(struct thread_data *td) +{ + unsigned long long io_done; + + if (td->o.time_based) + return 1; + if (td->o.loops) { + td->o.loops--; + return 1; + } + + io_done = td->io_bytes[DDIR_READ] + td->io_bytes[DDIR_WRITE]; + if (io_done < td->o.size) + return 1; + + return 0; +} + static int clear_io_state(struct thread_data *td) { struct fio_file *f; @@ -736,11 +754,14 @@ static int clear_io_state(struct thread_data *td) td->last_was_sync = 0; + td->nr_done_files = 0; + for_each_file(td, f, i) td_io_close_file(td, f); ret = 0; for_each_file(td, f, i) { + f->flags &= ~FIO_FILE_DONE; ret = td_io_open_file(td, f); if (ret) break; @@ -835,7 +856,7 @@ static void *thread_main(void *data) runtime[0] = runtime[1] = 0; clear_state = 0; - while (td->o.time_based || td->o.loops--) { + while (keep_running(td)) { fio_gettime(&td->start, NULL); memcpy(&td->ts.stat_sample_time, &td->start, sizeof(td->start));