X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=stat.c;h=e2bc8ddb5fa4a554cd45b7c2ff9f0fd16f00e91d;hb=a06aec04b3422d8ec63250e3ac56bbf526bc41b0;hp=c1f46e1d43f34fe9a8988279780c269162d9084d;hpb=e5eb6fbf91617be0c7d74147165909a493c90136;p=fio.git diff --git a/stat.c b/stat.c index c1f46e1d..e2bc8ddb 100644 --- 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]; @@ -1821,10 +1828,11 @@ void __show_run_stats(void) /* * These are per-group shared already */ - strncpy(ts->name, td->o.name, FIO_JOBNAME_SIZE - 1); + snprintf(ts->name, sizeof(ts->name), "%s", td->o.name); if (td->o.description) - strncpy(ts->description, td->o.description, - FIO_JOBDESC_SIZE - 1); + snprintf(ts->description, + sizeof(ts->description), "%s", + td->o.description); else memset(ts->description, 0, FIO_JOBDESC_SIZE); @@ -1861,12 +1869,12 @@ void __show_run_stats(void) if (!td->error && td->o.continue_on_error && td->first_error) { ts->error = td->first_error; - ts->verror[sizeof(ts->verror) - 1] = '\0'; - strncpy(ts->verror, td->verror, sizeof(ts->verror) - 1); + snprintf(ts->verror, sizeof(ts->verror), "%s", + td->verror); } else if (td->error) { ts->error = td->error; - ts->verror[sizeof(ts->verror) - 1] = '\0'; - strncpy(ts->verror, td->verror, sizeof(ts->verror) - 1); + snprintf(ts->verror, sizeof(ts->verror), "%s", + td->verror); } } @@ -2115,6 +2123,9 @@ static int check_status_file(void) } if (temp_dir == NULL) temp_dir = "/tmp"; +#ifdef __COVERITY__ + __coverity_tainted_data_sanitize__(temp_dir); +#endif snprintf(fio_status_file_path, sizeof(fio_status_file_path), "%s/%s", temp_dir, FIO_STATUS_FILE); @@ -2572,7 +2583,7 @@ void add_clat_sample(struct thread_data *td, enum fio_ddir ddir, io_u_plat = (uint64_t *) td->ts.io_u_plat[ddir]; dst = malloc(sizeof(struct io_u_plat_entry)); memcpy(&(dst->io_u_plat), io_u_plat, - FIO_IO_U_PLAT_NR * sizeof(unsigned int)); + FIO_IO_U_PLAT_NR * sizeof(uint64_t)); flist_add(&dst->list, &hw->list); __add_log_sample(iolog, sample_plat(dst), ddir, bs, elapsed, offset);