X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.c;h=edc6b495789d04e30e88ab520a9204cf37422887;hp=f6c3fc8fe555ca31e78b7eb1666dfa6ac27185f7;hb=e48676baa53074b429460c71fb2c9e0ac7ac7d8c;hpb=d23bb327374520295509bbd98912c8091b701a3e diff --git a/fio.c b/fio.c index f6c3fc8f..edc6b495 100644 --- a/fio.c +++ b/fio.c @@ -35,7 +35,6 @@ #include #include "fio.h" -#include "os.h" unsigned long page_mask; unsigned long page_size; @@ -342,10 +341,17 @@ static void do_verify(struct thread_data *td) put_io_u(td, io_u); break; } + io_u->xfer_buflen = io_u->resid; io_u->xfer_buf += bytes; + io_u->offset += bytes; + + if (io_u->offset == io_u->file->real_file_size) + goto sync_done; + requeue_io_u(td, &io_u); } else { +sync_done: ret = io_u_sync_complete(td, io_u); if (ret < 0) break; @@ -412,7 +418,7 @@ static void do_io(struct thread_data *td) td_set_runstate(td, TD_RUNNING); - while ((td->this_io_bytes[0] + td->this_io_bytes[1]) < td->io_size) { + while ((td->this_io_bytes[0] + td->this_io_bytes[1]) < td->o.size) { struct timeval comp_time; long bytes_done = 0; int min_evts = 0; @@ -452,8 +458,14 @@ static void do_io(struct thread_data *td) io_u->xfer_buflen = io_u->resid; io_u->xfer_buf += bytes; + io_u->offset += bytes; + + if (io_u->offset == io_u->file->real_file_size) + goto sync_done; + requeue_io_u(td, &io_u); } else { +sync_done: fio_gettime(&comp_time, NULL); bytes_done = io_u_sync_complete(td, io_u); if (bytes_done < 0) @@ -735,8 +747,9 @@ static void *thread_main(void *data) INIT_LIST_HEAD(&td->io_u_freelist); INIT_LIST_HEAD(&td->io_u_busylist); INIT_LIST_HEAD(&td->io_u_requeues); - INIT_LIST_HEAD(&td->io_hist_list); INIT_LIST_HEAD(&td->io_log_list); + INIT_LIST_HEAD(&td->io_hist_list); + td->io_hist_tree = RB_ROOT; if (init_io_u(td)) goto err_sem; @@ -977,6 +990,7 @@ static void reap_threads(int *nr_running, int *t_rate, int *m_rate) /* * thread is not dead, continue */ + pending++; continue; reaped: if (td->o.use_thread) { @@ -989,6 +1003,7 @@ reaped: (*nr_running)--; (*m_rate) -= td->o.ratemin; (*t_rate) -= td->o.rate; + pending--; if (td->error) exit_value++; @@ -1196,10 +1211,8 @@ int main(int argc, char *argv[]) if (parse_options(argc, argv)) return 1; - if (!thread_number) { - log_err("Nothing to do\n"); - return 1; - } + if (!thread_number) + return 0; ps = sysconf(_SC_PAGESIZE); if (ps < 0) {