td->cur_depth--;
}
+void clear_io_u(struct thread_data *td, struct io_u *io_u)
+{
+ io_u->flags &= ~IO_U_F_FLIGHT;
+ put_io_u(td, io_u);
+}
+
void requeue_io_u(struct thread_data *td, struct io_u **io_u)
{
struct io_u *__io_u = *io_u;
/*
* Get next file to service by choosing one at random
*/
-static struct fio_file *get_next_file_rand(struct thread_data *td, enum fio_file_flags goodf,
+static struct fio_file *get_next_file_rand(struct thread_data *td,
+ enum fio_file_flags goodf,
enum fio_file_flags badf)
{
struct fio_file *f;
td->this_io_bytes[idx] += bytes;
if (ramp_time_over(td)) {
- if (!td->o.disable_clat || !td->o.disable_bw ||
- __should_check_rate(td, idx))
- usec = utime_since(&io_u->issue_time,
+ unsigned long uninitialized_var(lusec);
+ unsigned long uninitialized_var(rusec);
+
+ if (!td->o.disable_clat || !td->o.disable_bw)
+ lusec = utime_since(&io_u->issue_time,
+ &icd->time);
+ if (__should_check_rate(td, idx) ||
+ __should_check_rate(td, idx ^ 1))
+ rusec = utime_since(&io_u->start_time,
&icd->time);
if (!td->o.disable_clat) {
add_clat_sample(td, idx, usec, bytes);
- io_u_mark_latency(td, usec);
+ io_u_mark_latency(td, lusec);
}
if (!td->o.disable_bw)
add_bw_sample(td, idx, bytes, &icd->time);
- if (__should_check_rate(td, idx))
- td->rate_pending_usleep[idx] += (long) td->rate_usec_cycle[idx] - usec;
+ if (__should_check_rate(td, idx)) {
+ td->rate_pending_usleep[idx] +=
+ (long) td->rate_usec_cycle[idx] - rusec;
+ }
if (__should_check_rate(td, idx ^ 1))
- td->rate_pending_usleep[idx ^ 1] -= usec;
+ td->rate_pending_usleep[idx ^ 1] -= rusec;
}
if (td_write(td) && idx == DDIR_WRITE &&
icd->error = io_u->error;
io_u_log_error(td, io_u);
}
+ if (td->o.continue_on_error && icd->error &&
+ td_non_fatal_error(icd->error)) {
+ /*
+ * If there is a non_fatal error, then add to the error count
+ * and clear all the errors.
+ */
+ update_error_count(td, icd->error);
+ td_clear_error(td);
+ icd->error = 0;
+ io_u->error = 0;
+ }
}
static void init_icd(struct thread_data *td, struct io_completion_data *icd,
unsigned long slat_time;
slat_time = utime_since(&io_u->start_time, &io_u->issue_time);
- add_slat_sample(td, io_u->ddir, io_u->xfer_buflen, slat_time);
+ add_slat_sample(td, io_u->ddir, slat_time, io_u->xfer_buflen);
}
}