X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;ds=sidebyside;f=backend.c;h=e093f75d5988d003901c30804595c8d7f5b6e9d3;hb=f1a32461c844c7ba9314f66dd28b5a01ca7cb69a;hp=20784096a0d7b9b8e417d0235311b4ab983bfd29;hpb=543e2e9d2ebdd26449a3f07934b87c8e1ff35033;p=fio.git diff --git a/backend.c b/backend.c index 20784096..e093f75d 100644 --- a/backend.c +++ b/backend.c @@ -309,6 +309,8 @@ requeue: put_io_u(td, io_u); return true; } else if (ret == FIO_Q_QUEUED) { + if (td_io_commit(td)) + return true; if (io_u_queued_complete(td, 1) < 0) return true; } else if (ret == FIO_Q_COMPLETED) { @@ -520,6 +522,14 @@ sync_done: if (*ret < 0) break; } + + /* + * when doing I/O (not when verifying), + * check for any errors that are to be ignored + */ + if (!from_verify) + break; + return 0; case FIO_Q_QUEUED: /* @@ -871,7 +881,14 @@ static void do_io(struct thread_data *td, uint64_t *bytes_done) if (flow_threshold_exceeded(td)) continue; - if (!td->o.time_based && bytes_issued >= total_bytes) + /* + * Break if we exceeded the bytes. The exception is time + * based runs, but we still need to break out of the loop + * for those to run verification, if enabled. + */ + if (bytes_issued >= total_bytes && + (!td->o.time_based || + (td->o.time_based && td->o.verify != VERIFY_NONE))) break; io_u = get_io_u(td); @@ -1701,6 +1718,15 @@ err: cgroup_shutdown(td, &cgroup_mnt); verify_free_state(td); + if (td->zone_state_index) { + int i; + + for (i = 0; i < DDIR_RWDIR_CNT; i++) + free(td->zone_state_index[i]); + free(td->zone_state_index); + td->zone_state_index = NULL; + } + if (fio_option_is_set(o, cpumask)) { ret = fio_cpuset_exit(&o->cpumask); if (ret)