X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.c;h=7aa55a8f7839bdbb3f08f192cf4990932e4da25f;hb=52c580272d87d2b9b8a65d317bf7c2d432a30fec;hp=5b58ab82252258a072d841c09c69a23f034f1cd2;hpb=cf00f975d506d20ad5f02ee9dd8fec17af74bb2f;p=fio.git diff --git a/fio.c b/fio.c index 5b58ab82..7aa55a8f 100644 --- a/fio.c +++ b/fio.c @@ -343,6 +343,8 @@ static int check_min_rate(struct thread_data *td, struct timeval *now, static inline int runtime_exceeded(struct thread_data *td, struct timeval *t) { + if (in_ramp_time(td)) + return 0; if (!td->o.timeout) return 0; if (mtime_since(&td->epoch, t) >= td->o.timeout * 1000) @@ -452,21 +454,22 @@ static inline void update_tv_cache(struct thread_data *td) __update_tv_cache(td); } -static int break_on_this_error(struct thread_data *td, int *retptr) +static int break_on_this_error(struct thread_data *td, enum fio_ddir ddir, + int *retptr) { int ret = *retptr; if (ret < 0 || td->error) { int err; - if (!td->o.continue_on_error) - return 1; - if (ret < 0) err = -ret; else err = td->error; + if (!(td->o.continue_on_error & td_error_type(ddir, err))) + return 1; + if (td_non_fatal_error(err)) { /* * Continue with the I/Os in case of @@ -612,7 +615,7 @@ sync_done: break; } - if (break_on_this_error(td, &ret)) + if (break_on_this_error(td, io_u->ddir, &ret)) break; /* @@ -678,6 +681,7 @@ static void do_io(struct thread_data *td) int min_evts = 0; struct io_u *io_u; int ret2, full; + enum fio_ddir ddir; if (td->terminate) break; @@ -696,6 +700,8 @@ static void do_io(struct thread_data *td) if (!io_u) break; + ddir = io_u->ddir; + /* * Add verification end_io handler, if asked to verify * a previously written file. @@ -774,7 +780,7 @@ sync_done: break; } - if (break_on_this_error(td, &ret)) + if (break_on_this_error(td, ddir, &ret)) break; /* @@ -1244,9 +1250,12 @@ static void *thread_main(void *data) memcpy(&td->iops_sample_time, &td->start, sizeof(td->start)); memcpy(&td->tv_cache, &td->start, sizeof(td->start)); - if (td->o.ratemin[0] || td->o.ratemin[1]) - memcpy(&td->lastrate, &td->bw_sample_time, - sizeof(td->lastrate)); + if (td->o.ratemin[0] || td->o.ratemin[1]) { + memcpy(&td->lastrate[0], &td->bw_sample_time, + sizeof(td->bw_sample_time)); + memcpy(&td->lastrate[1], &td->bw_sample_time, + sizeof(td->bw_sample_time)); + } if (clear_state) clear_io_state(td); @@ -1790,8 +1799,8 @@ int exec_run(void) return 0; if (write_bw_log) { - setup_log(&agg_io_log[DDIR_READ]); - setup_log(&agg_io_log[DDIR_WRITE]); + setup_log(&agg_io_log[DDIR_READ], 0); + setup_log(&agg_io_log[DDIR_WRITE], 0); } startup_mutex = fio_mutex_init(0);