libfio: add runstate names
[fio.git] / eta.c
diff --git a/eta.c b/eta.c
index 5be5aed3bcc3a6bb397a06dc6314eb5652d66fbf..aed61ecca935b1406985e9bdd64039d25a890664 100644 (file)
--- a/eta.c
+++ b/eta.c
@@ -6,6 +6,7 @@
 #include <string.h>
 
 #include "fio.h"
+#include "lib/pow2.h"
 
 static char __run_str[REAL_MAX_JOBS + 1];
 static char run_str[__THREAD_RUNSTR_SZ(REAL_MAX_JOBS)];
@@ -122,6 +123,11 @@ void eta_to_str(char *str, unsigned long eta_sec)
        unsigned int d, h, m, s;
        int disp_hour = 0;
 
+       if (eta_sec == -1) {
+               sprintf(str, "--");
+               return;
+       }
+
        s = eta_sec % 60;
        eta_sec /= 60;
        m = eta_sec % 60;
@@ -145,7 +151,7 @@ void eta_to_str(char *str, unsigned long eta_sec)
 /*
  * Best effort calculation of the estimated pending runtime of a job.
  */
-static int thread_eta(struct thread_data *td)
+static unsigned long thread_eta(struct thread_data *td)
 {
        unsigned long long bytes_total, bytes_done;
        unsigned long eta_sec = 0;
@@ -157,6 +163,9 @@ static int thread_eta(struct thread_data *td)
 
        bytes_total = td->total_io_size;
 
+       if (td->flags & TD_F_NO_PROGRESS)
+               return -1;
+
        if (td->o.fill_device && td->o.size  == -1ULL) {
                if (!td->fill_device_size || td->fill_device_size == -1ULL)
                        return 0;
@@ -512,7 +521,8 @@ void display_thread_status(struct jobs_eta *je)
                int l;
                int ddir;
 
-               if ((!je->eta_sec && !eta_good) || je->nr_ramp == je->nr_running)
+               if ((!je->eta_sec && !eta_good) || je->nr_ramp == je->nr_running ||
+                   je->eta_sec == -1)
                        strcpy(perc_str, "-.-% done");
                else {
                        double mult = 100.0;
@@ -572,9 +582,11 @@ struct jobs_eta *get_jobs_eta(int force, size_t *size)
 
        *size = sizeof(*je) + THREAD_RUNSTR_SZ;
        je = malloc(*size);
+       if (!je)
+               return NULL;
        memset(je, 0, *size);
 
-       if (!calc_thread_status(je, 0)) {
+       if (!calc_thread_status(je, force)) {
                free(je);
                return NULL;
        }