t/zbd: avoid test case 31 failure with small devices
[fio.git] / eta.c
diff --git a/eta.c b/eta.c
index af4027e0e2997e9ae220fe2fe94da05ff1995121..7d07708ff69ee9701fe3ce4f3e8a1e95e91311e8 100644 (file)
--- a/eta.c
+++ b/eta.c
@@ -215,8 +215,9 @@ static unsigned long thread_eta(struct thread_data *td)
                                perc = td->o.rwmix[DDIR_WRITE];
 
                        bytes_total += (bytes_total * perc) / 100;
-               } else
+               } else {
                        bytes_total <<= 1;
+               }
        }
 
        if (td->runstate == TD_RUNNING || td->runstate == TD_VERIFYING) {
@@ -228,8 +229,9 @@ static unsigned long thread_eta(struct thread_data *td)
                        perc = (double) bytes_done / (double) bytes_total;
                        if (perc > 1.0)
                                perc = 1.0;
-               } else
+               } else {
                        perc = 0.0;
+               }
 
                if (td->o.time_based) {
                        if (timeout) {
@@ -375,11 +377,27 @@ bool eta_time_within_slack(unsigned int time)
        return time > ((eta_interval_msec * 95) / 100);
 }
 
+/*
+ * These are the conditions under which we might be able to skip the eta
+ * calculation.
+ */
+static bool skip_eta()
+{
+       if (!(output_format & FIO_OUTPUT_NORMAL) && f_out == stdout)
+               return true;
+       if (temp_stall_ts || eta_print == FIO_ETA_NEVER)
+               return true;
+       if (!isatty(STDOUT_FILENO) && eta_print != FIO_ETA_ALWAYS)
+               return true;
+
+       return false;
+}
+
 /*
  * Print status of the jobs we know about. This includes rate estimates,
  * ETA, thread state, etc.
  */
-bool calc_thread_status(struct jobs_eta *je, int force)
+static bool calc_thread_status(struct jobs_eta *je, int force)
 {
        int unified_rw_rep;
        bool any_td_in_ramp;
@@ -393,14 +411,12 @@ bool calc_thread_status(struct jobs_eta *je, int force)
        static unsigned long long disp_io_iops[DDIR_RWDIR_CNT];
        static struct timespec rate_prev_time, disp_prev_time;
 
-       if (!force) {
-               if (!(output_format & FIO_OUTPUT_NORMAL) &&
-                   f_out == stdout)
-                       return false;
-               if (temp_stall_ts || eta_print == FIO_ETA_NEVER)
-                       return false;
+       bool ret = true;
 
-               if (!isatty(STDOUT_FILENO) && (eta_print != FIO_ETA_ALWAYS))
+       if (!force && skip_eta()) {
+               if (write_bw_log)
+                       ret = false;
+               else
                        return false;
        }
 
@@ -534,7 +550,7 @@ bool calc_thread_status(struct jobs_eta *je, int force)
        je->nr_threads = thread_number;
        update_condensed_str(__run_str, run_str);
        memcpy(je->run_str, run_str, strlen(run_str));
-       return true;
+       return ret;
 }
 
 static int gen_eta_str(struct jobs_eta *je, char *p, size_t left,