mutex: fixup fio_mutex_down_timeout()
[fio.git] / backend.c
index ae2612036124b700c7959251090389fd84d618ed..a2a6cec2ce267769a0a08891fe58dd60f807e2af 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -974,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;
@@ -1587,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;
 
@@ -1659,7 +1662,7 @@ static void *thread_main(void *data)
        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:
@@ -2114,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;