fio: fix aio trim completion latencies
[fio.git] / stat.c
diff --git a/stat.c b/stat.c
index c1f46e1d43f34fe9a8988279780c269162d9084d..bf87917c2956eb60729fa9ea95ac93b1cbe1ed50 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -170,7 +170,7 @@ unsigned int calc_clat_percentiles(uint64_t *io_u_plat, unsigned long long nr,
        is_last = false;
        for (i = 0; i < FIO_IO_U_PLAT_NR && !is_last; i++) {
                sum += io_u_plat[i];
-               while (sum >= (plist[j].u.f / 100.0 * nr)) {
+               while (sum >= ((long double) plist[j].u.f / 100.0 * nr)) {
                        assert(plist[j].u.f <= 100.0);
 
                        ovals[j] = plat_idx_to_val(i);
@@ -187,6 +187,9 @@ unsigned int calc_clat_percentiles(uint64_t *io_u_plat, unsigned long long nr,
                }
        }
 
+       if (!is_last)
+               log_err("fio: error calculating latency percentiles\n");
+
        *output = ovals;
        return len;
 }
@@ -1241,12 +1244,13 @@ static void show_thread_status_terse_all(struct thread_stat *ts,
        /* Additional output if continue_on_error set - default off*/
        if (ts->continue_on_error)
                log_buf(out, ";%llu;%d", (unsigned long long) ts->total_err_count, ts->first_error);
-       if (ver == 2)
-               log_buf(out, "\n");
 
        /* Additional output if description is set */
-       if (strlen(ts->description))
+       if (strlen(ts->description)) {
+               if (ver == 2)
+                       log_buf(out, "\n");
                log_buf(out, ";%s", ts->description);
+       }
 
        log_buf(out, "\n");
 }
@@ -1679,11 +1683,14 @@ void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src,
                dst->io_u_submit[k] += src->io_u_submit[k];
                dst->io_u_complete[k] += src->io_u_complete[k];
        }
-       for (k = 0; k < FIO_IO_U_LAT_N_NR; k++) {
+
+       for (k = 0; k < FIO_IO_U_LAT_N_NR; k++)
                dst->io_u_lat_n[k] += src->io_u_lat_n[k];
+       for (k = 0; k < FIO_IO_U_LAT_U_NR; k++)
                dst->io_u_lat_u[k] += src->io_u_lat_u[k];
+       for (k = 0; k < FIO_IO_U_LAT_M_NR; k++)
                dst->io_u_lat_m[k] += src->io_u_lat_m[k];
-       }
+
        for (k = 0; k < FIO_IO_U_PLAT_NR; k++)
                dst->io_u_sync_plat[k] += src->io_u_sync_plat[k];