Merge branch 'asprintf1' of https://github.com/kusumi/fio into master
[fio.git] / eta.c
diff --git a/eta.c b/eta.c
index 647a1bdd8eed7433c2413fde356844720b45e722..e8c727809e39977dc2886a4e7f2730142db38eb5 100644 (file)
--- a/eta.c
+++ b/eta.c
@@ -383,8 +383,8 @@ bool calc_thread_status(struct jobs_eta *je, int force)
        struct thread_data *td;
        int i, unified_rw_rep;
        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];
+       unsigned long long io_bytes[DDIR_RWDIR_CNT] = {};
+       unsigned long long io_iops[DDIR_RWDIR_CNT] = {};
        struct timespec now;
 
        static unsigned long long rate_io_bytes[DDIR_RWDIR_CNT];
@@ -392,9 +392,6 @@ 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;
 
-       void *je_rate = (void *) je->rate;
-       void *je_iops = (void *) je->iops;
-
        if (!force) {
                if (!(output_format & FIO_OUTPUT_NORMAL) &&
                    f_out == stdout)
@@ -416,8 +413,6 @@ bool calc_thread_status(struct jobs_eta *je, int force)
 
        je->elapsed_sec = (mtime_since_genesis() + 999) / 1000;
 
-       io_bytes[DDIR_READ] = io_bytes[DDIR_WRITE] = io_bytes[DDIR_TRIM] = 0;
-       io_iops[DDIR_READ] = io_iops[DDIR_WRITE] = io_iops[DDIR_TRIM] = 0;
        bw_avg_time = ULONG_MAX;
        unified_rw_rep = 0;
        for_each_td(td, i) {
@@ -510,11 +505,11 @@ bool calc_thread_status(struct jobs_eta *je, int force)
 
        if (write_bw_log && rate_time > bw_avg_time && !in_ramp_time(td)) {
                calc_rate(unified_rw_rep, rate_time, io_bytes, rate_io_bytes,
-                               je_rate);
+                               je->rate);
                memcpy(&rate_prev_time, &now, sizeof(now));
-               add_agg_sample(sample_val(je->rate[DDIR_READ]), DDIR_READ, 0);
-               add_agg_sample(sample_val(je->rate[DDIR_WRITE]), DDIR_WRITE, 0);
-               add_agg_sample(sample_val(je->rate[DDIR_TRIM]), DDIR_TRIM, 0);
+               for_each_rw_ddir(ddir) {
+                       add_agg_sample(sample_val(je->rate[ddir]), ddir, 0, 0);
+               }
        }
 
        disp_time = mtime_since(&disp_prev_time, &now);
@@ -522,8 +517,8 @@ bool calc_thread_status(struct jobs_eta *je, int force)
        if (!force && !eta_time_within_slack(disp_time))
                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);
+       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);
 
        memcpy(&disp_prev_time, &now, sizeof(now));
 
@@ -736,6 +731,10 @@ void print_thread_status(void)
 
 void print_status_init(int thr_number)
 {
+       struct jobs_eta_packed jep;
+
+       compiletime_assert(sizeof(struct jobs_eta) == sizeof(jep), "jobs_eta");
+
        DRD_IGNORE_VAR(__run_str);
        __run_str[thr_number] = 'P';
        update_condensed_str(__run_str, run_str);