mutex: fixup fio_mutex_down_timeout()
[fio.git] / backend.c
index 01e0b3ac7cc5909b503f6d35d0a1f8e541215f6f..a2a6cec2ce267769a0a08891fe58dd60f807e2af 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -54,7 +54,6 @@
 #include "lib/getrusage.h"
 #include "idletime.h"
 #include "err.h"
-#include "lib/tp.h"
 #include "workqueue.h"
 #include "lib/mountcheck.h"
 #include "rate-submit.h"
@@ -935,13 +934,10 @@ static uint64_t do_io(struct thread_data *td)
                        if (td->error)
                                break;
 
-                       ret = workqueue_enqueue(&td->io_wq, &io_u->work);
-                       if (ret)
-                               ret = FIO_Q_QUEUED;
-                       else
-                               ret = FIO_Q_BUSY;
+                       workqueue_enqueue(&td->io_wq, &io_u->work);
+                       ret = FIO_Q_QUEUED;
 
-                       if (ret == FIO_Q_QUEUED && ddir_rw(ddir)) {
+                       if (ddir_rw(ddir)) {
                                td->io_issues[ddir]++;
                                td->io_issue_bytes[ddir] += blen;
                                td->rate_io_issue_bytes[ddir] += blen;
@@ -978,7 +974,7 @@ reap:
 
                if (!in_ramp_time(td) && should_check_rate(td)) {
                        if (check_min_rate(td, &comp_time)) {
-                               if (exitall_on_terminate)
+                               if (exitall_on_terminate || td->o.exitall_error)
                                        fio_terminate_threads(td->groupid);
                                td_verror(td, EIO, "check_min_rate");
                                break;
@@ -1554,13 +1550,12 @@ static void *thread_main(void *data)
                        goto err;
        }
 
-       if (td->flags & TD_F_COMPRESS_LOG)
-               tp_init(&td->tp_data);
+       if (iolog_compress_init(td))
+               goto err;
 
        fio_verify_init(td);
 
-       if ((o->io_submit_mode == IO_MODE_OFFLOAD) &&
-           workqueue_init(td, &td->io_wq, &rated_wq_ops, td->o.iodepth))
+       if (rate_submit_init(td))
                goto err;
 
        fio_gettime(&td->epoch, NULL);
@@ -1592,8 +1587,11 @@ static void *thread_main(void *data)
 
                if (td->o.verify_only && (td_write(td) || td_rw(td)))
                        verify_bytes = do_dry_run(td);
-               else
+               else {
                        verify_bytes = do_io(td);
+                       if (!verify_bytes)
+                               fio_mark_td_terminate(td);
+               }
 
                clear_state = 1;
 
@@ -1658,16 +1656,13 @@ static void *thread_main(void *data)
 
        fio_writeout_logs(td);
 
-       if (o->io_submit_mode == IO_MODE_OFFLOAD)
-               workqueue_exit(&td->io_wq);
-
-       if (td->flags & TD_F_COMPRESS_LOG)
-               tp_exit(&td->tp_data);
+       iolog_compress_exit(td);
+       rate_submit_exit(td);
 
        if (o->exec_postrun)
                exec_string(o, o->exec_postrun, (const char *)"postrun");
 
-       if (exitall_on_terminate)
+       if (exitall_on_terminate || (o->exitall_error && td->error))
                fio_terminate_threads(td->groupid);
 
 err:
@@ -2122,7 +2117,7 @@ reap:
                                        *fio_debug_jobp = pid;
                        }
                        dprint(FD_MUTEX, "wait on startup_mutex\n");
-                       if (fio_mutex_down_timeout(startup_mutex, 10)) {
+                       if (fio_mutex_down_timeout(startup_mutex, 10000)) {
                                log_err("fio: job startup hung? exiting.\n");
                                fio_terminate_threads(TERMINATE_ALL);
                                fio_abort = 1;