eta: fix bugs withe fill_device and exitall_on_terminate
[fio.git] / eta.c
diff --git a/eta.c b/eta.c
index 5b8a6879ae5a952c5727b22ff756897b0fc4b76a..47e9e339514dd4780bab3a7f049c79e0a7ff6101 100644 (file)
--- a/eta.c
+++ b/eta.c
@@ -66,7 +66,7 @@ static void check_str_update(struct thread_data *td)
 /*
  * Convert seconds to a printable string.
  */
-static void eta_to_str(char *str, int eta_sec)
+static void eta_to_str(char *str, unsigned long eta_sec)
 {
        unsigned int d, h, m, s;
        int disp_hour = 0;
@@ -115,6 +115,9 @@ static int thread_eta(struct thread_data *td, unsigned long elapsed)
        if (td->o.zone_size && td->o.zone_skip)
                bytes_total /= (td->o.zone_skip / td->o.zone_size);
 
+       if (td->o.fill_device && td->o.size  == -1ULL)
+               return 0;
+
        if (td->runstate == TD_RUNNING || td->runstate == TD_VERIFYING) {
                double perc, perc_t;
 
@@ -247,8 +250,13 @@ void print_thread_status(void)
                eta_sec = 0;
 
        for_each_td(td, i) {
-               if (eta_secs[i] != INT_MAX)
-                       eta_sec += eta_secs[i];
+               if (exitall_on_terminate) {
+                       if (eta_secs[i] < eta_sec)
+                               eta_sec = eta_secs[i];
+               } else {
+                       if (eta_secs[i] > eta_sec)
+                               eta_sec = eta_secs[i];
+               }
        }
 
        free(eta_secs);