Fix more overflows in percentile calculation for Windows
authorAndrzej Jakowski <andrzej.jakowski@intel.com>
Thu, 12 Oct 2017 14:31:06 +0000 (08:31 -0600)
committerJens Axboe <axboe@kernel.dk>
Thu, 12 Oct 2017 14:31:06 +0000 (08:31 -0600)
The previous patch caught one place where we could potentially
overflow for large number of IOs, this patches up a few more.

Signed-off-by: Andrzej Jakowski <andrzej.jakowski@intel.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
gclient.c
stat.c
stat.h

index 43c8a0891818ac0d28d36d770e507960eb29bd4a..daa91538fa498c5324161345a6110742cf080b16 100644 (file)
--- a/gclient.c
+++ b/gclient.c
@@ -1099,7 +1099,7 @@ static void gfio_show_clat_percentiles(struct gfio_client *gc,
                                       int ddir)
 {
        unsigned int *io_u_plat = ts->io_u_plat[ddir];
                                       int ddir)
 {
        unsigned int *io_u_plat = ts->io_u_plat[ddir];
-       unsigned long nr = ts->clat_stat[ddir].samples;
+       unsigned long long nr = ts->clat_stat[ddir].samples;
        fio_fp64_t *plist = ts->percentile_list;
        unsigned int len, scale_down;
        unsigned long long *ovals, minv, maxv;
        fio_fp64_t *plist = ts->percentile_list;
        unsigned int len, scale_down;
        unsigned long long *ovals, minv, maxv;
diff --git a/stat.c b/stat.c
index 5c75868051857582d0e0152287bc37260ace6340..c8a45dbd4ce05e962659245be13e67e0251adcc6 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -135,7 +135,7 @@ static int double_cmp(const void *a, const void *b)
        return cmp;
 }
 
        return cmp;
 }
 
-unsigned int calc_clat_percentiles(unsigned int *io_u_plat, unsigned long nr,
+unsigned int calc_clat_percentiles(unsigned int *io_u_plat, unsigned long long nr,
                                   fio_fp64_t *plist, unsigned long long **output,
                                   unsigned long long *maxv, unsigned long long *minv)
 {
                                   fio_fp64_t *plist, unsigned long long **output,
                                   unsigned long long *maxv, unsigned long long *minv)
 {
@@ -198,7 +198,7 @@ unsigned int calc_clat_percentiles(unsigned int *io_u_plat, unsigned long nr,
 /*
  * Find and display the p-th percentile of clat
  */
 /*
  * Find and display the p-th percentile of clat
  */
-static void show_clat_percentiles(unsigned int *io_u_plat, unsigned long nr,
+static void show_clat_percentiles(unsigned int *io_u_plat, unsigned long long nr,
                                  fio_fp64_t *plist, unsigned int precision,
                                  bool is_clat, struct buf_output *out)
 {
                                  fio_fp64_t *plist, unsigned int precision,
                                  bool is_clat, struct buf_output *out)
 {
diff --git a/stat.h b/stat.h
index 3fda084156bbfb984d34985e686a33ad3bb44082..6ddcad25505b134b2e970c14666ca4cba412d4b9 100644 (file)
--- a/stat.h
+++ b/stat.h
@@ -293,7 +293,7 @@ extern void init_thread_stat(struct thread_stat *ts);
 extern void init_group_run_stat(struct group_run_stats *gs);
 extern void eta_to_str(char *str, unsigned long eta_sec);
 extern bool calc_lat(struct io_stat *is, unsigned long long *min, unsigned long long *max, double *mean, double *dev);
 extern void init_group_run_stat(struct group_run_stats *gs);
 extern void eta_to_str(char *str, unsigned long eta_sec);
 extern bool calc_lat(struct io_stat *is, unsigned long long *min, unsigned long long *max, double *mean, double *dev);
-extern unsigned int calc_clat_percentiles(unsigned int *io_u_plat, unsigned long nr, fio_fp64_t *plist, unsigned long long **output, unsigned long long *maxv, unsigned long long *minv);
+extern unsigned int calc_clat_percentiles(unsigned int *io_u_plat, unsigned long long nr, fio_fp64_t *plist, unsigned long long **output, unsigned long long *maxv, unsigned long long *minv);
 extern void stat_calc_lat_n(struct thread_stat *ts, double *io_u_lat);
 extern void stat_calc_lat_m(struct thread_stat *ts, double *io_u_lat);
 extern void stat_calc_lat_u(struct thread_stat *ts, double *io_u_lat);
 extern void stat_calc_lat_n(struct thread_stat *ts, double *io_u_lat);
 extern void stat_calc_lat_m(struct thread_stat *ts, double *io_u_lat);
 extern void stat_calc_lat_u(struct thread_stat *ts, double *io_u_lat);