[PATCH] disk_util: Allow an engine to turn off disk_util specifically
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index 509f8be474bdf0ab9d4940c12c869753f137fdc9..6222a4185c7105973b4080669e34a37303a7f281 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -43,6 +43,8 @@ static unsigned long page_mask;
 
 int groupid = 0;
 int thread_number = 0;
+int nr_process = 0;
+int nr_thread = 0;
 int shm_id = 0;
 int temp_stall_ts;
 
@@ -692,33 +694,33 @@ static void *thread_main(void *data)
        INIT_LIST_HEAD(&td->io_log_list);
 
        if (init_io_u(td))
-               goto err;
+               goto err_sem;
 
        if (fio_setaffinity(td) == -1) {
                td_verror(td, errno, "cpu_set_affinity");
-               goto err;
+               goto err_sem;
        }
 
        if (init_iolog(td))
-               goto err;
+               goto err_sem;
 
        if (td->ioprio) {
                if (ioprio_set(IOPRIO_WHO_PROCESS, 0, td->ioprio) == -1) {
                        td_verror(td, errno, "ioprio_set");
-                       goto err;
+                       goto err_sem;
                }
        }
 
        if (nice(td->nice) == -1) {
                td_verror(td, errno, "nice");
-               goto err;
+               goto err_sem;
        }
 
        if (init_random_state(td))
-               goto err;
+               goto err_sem;
 
        if (td->ioscheduler && switch_ioscheduler(td))
-               goto err;
+               goto err_sem;
 
        td_set_runstate(td, TD_INITIALIZED);
        fio_sem_up(startup_sem);
@@ -821,6 +823,9 @@ err:
        cleanup_io_u(td);
        td_set_runstate(td, TD_EXITED);
        return (void *) (unsigned long) td->error;
+err_sem:
+       fio_sem_up(startup_sem);
+       goto err;
 }
 
 /*
@@ -948,7 +953,15 @@ static void run_threads(void)
                return;
 
        if (!terse_output) {
-               printf("Starting %d thread%s\n", thread_number, thread_number > 1 ? "s" : "");
+               printf("Starting ");
+               if (nr_thread)
+                       printf("%d thread%s", nr_thread, nr_thread > 1 ? "s" : "");
+               if (nr_process) {
+                       if (nr_thread)
+                               printf(" and ");
+                       printf("%d process%s", nr_process, nr_process > 1 ? "es" : "");
+               }
+               printf("\n");
                fflush(stdout);
        }
 
@@ -1029,6 +1042,7 @@ static void run_threads(void)
                                if (pthread_create(&td->thread, NULL, thread_main, td)) {
                                        perror("thread_create");
                                        nr_started--;
+                                       break;
                                }
                        } else {
                                if (!fork()) {