fio: Fix (unsigned) integer overflow issues
[fio.git] / eta.c
diff --git a/eta.c b/eta.c
index 8785540aa6f532f7e718810fa89b041a993d3e9f..c2c9d4e8fb79bb9cc74abe0cad0294f30b426c5e 100644 (file)
--- a/eta.c
+++ b/eta.c
@@ -214,7 +214,7 @@ static unsigned long thread_eta(struct thread_data *td)
                if (td->o.time_based) {
                        if (timeout) {
                                perc_t = (double) elapsed / (double) timeout;
-                               if (perc_t > perc)
+                               if (perc_t < perc)
                                        perc = perc_t;
                        } else {
                                /*
@@ -235,7 +235,7 @@ static unsigned long thread_eta(struct thread_data *td)
                        || td->runstate == TD_SETTING_UP
                        || td->runstate == TD_RAMP
                        || td->runstate == TD_PRE_READING) {
-               int t_eta = 0, r_eta = 0;
+               int64_t t_eta = 0, r_eta = 0;
                unsigned long long rate_bytes;
 
                /*
@@ -285,7 +285,7 @@ static unsigned long thread_eta(struct thread_data *td)
 
 static void calc_rate(int unified_rw_rep, unsigned long mtime,
                      unsigned long long *io_bytes,
-                     unsigned long long *prev_io_bytes, unsigned int *rate)
+                     unsigned long long *prev_io_bytes, uint64_t *rate)
 {
        int i;
 
@@ -337,11 +337,11 @@ static void calc_iops(int unified_rw_rep, unsigned long mtime,
  * Print status of the jobs we know about. This includes rate estimates,
  * ETA, thread state, etc.
  */
-int calc_thread_status(struct jobs_eta *je, int force)
+bool calc_thread_status(struct jobs_eta *je, int force)
 {
        struct thread_data *td;
        int i, unified_rw_rep;
-       unsigned long rate_time, disp_time, bw_avg_time, *eta_secs;
+       uint64_t rate_time, disp_time, bw_avg_time, *eta_secs;
        unsigned long long io_bytes[DDIR_RWDIR_CNT];
        unsigned long long io_iops[DDIR_RWDIR_CNT];
        struct timeval now;
@@ -354,12 +354,12 @@ int calc_thread_status(struct jobs_eta *je, int force)
        if (!force) {
                if (!(output_format & FIO_OUTPUT_NORMAL) &&
                    f_out == stdout)
-                       return 0;
+                       return false;
                if (temp_stall_ts || eta_print == FIO_ETA_NEVER)
-                       return 0;
+                       return false;
 
                if (!isatty(STDOUT_FILENO) && (eta_print != FIO_ETA_ALWAYS))
-                       return 0;
+                       return false;
        }
 
        if (!ddir_rw_sum(rate_io_bytes))
@@ -367,8 +367,8 @@ int calc_thread_status(struct jobs_eta *je, int force)
        if (!ddir_rw_sum(disp_io_bytes))
                fill_start_time(&disp_prev_time);
 
-       eta_secs = malloc(thread_number * sizeof(unsigned long));
-       memset(eta_secs, 0, thread_number * sizeof(unsigned long));
+       eta_secs = malloc(thread_number * sizeof(uint64_t));
+       memset(eta_secs, 0, thread_number * sizeof(uint64_t));
 
        je->elapsed_sec = (mtime_since_genesis() + 999) / 1000;
 
@@ -479,7 +479,7 @@ int calc_thread_status(struct jobs_eta *je, int force)
         * Allow a little slack, the target is to print it every 1000 msecs
         */
        if (!force && disp_time < 900)
-               return 0;
+               return false;
 
        calc_rate(unified_rw_rep, disp_time, io_bytes, disp_io_bytes, je->rate);
        calc_iops(unified_rw_rep, disp_time, io_iops, disp_io_iops, je->iops);
@@ -487,12 +487,12 @@ int calc_thread_status(struct jobs_eta *je, int force)
        memcpy(&disp_prev_time, &now, sizeof(now));
 
        if (!force && !je->nr_running && !je->nr_pending)
-               return 0;
+               return false;
 
        je->nr_threads = thread_number;
        update_condensed_str(__run_str, run_str);
        memcpy(je->run_str, run_str, strlen(run_str));
-       return 1;
+       return true;
 }
 
 void display_thread_status(struct jobs_eta *je)
@@ -589,7 +589,7 @@ void display_thread_status(struct jobs_eta *je)
        fflush(stdout);
 }
 
-struct jobs_eta *get_jobs_eta(int force, size_t *size)
+struct jobs_eta *get_jobs_eta(bool force, size_t *size)
 {
        struct jobs_eta *je;
 
@@ -616,7 +616,7 @@ void print_thread_status(void)
        struct jobs_eta *je;
        size_t size;
 
-       je = get_jobs_eta(0, &size);
+       je = get_jobs_eta(false, &size);
        if (je)
                display_thread_status(je);