X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=backend.c;h=7f57c65ae64678d10f351db12abaa3cfe287d098;hp=edc0644a113b259cf2d65cf91f96175a5f50201b;hb=a7ef38c4f0bb5ff11f46968e7fa5fa9a54c16de0;hpb=9cc8cb91d355d7e47d5b930b352087ec71f85f85 diff --git a/backend.c b/backend.c index edc0644a..7f57c65a 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: /* @@ -1293,7 +1303,7 @@ static bool keep_running(struct thread_data *td) if (diff < td_max_bs(td)) return false; - if (fio_files_done(td)) + if (fio_files_done(td) && !td->o.io_limit) return false; return true; @@ -1701,6 +1711,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) @@ -2130,7 +2149,7 @@ reap: if (waitee_running(td)) { dprint(FD_PROCESS, "%s: waiting for %s\n", td->o.name, td->o.wait_for); - break; + continue; } init_disk_util(td);