Recent changes (master)

Jens Axboe
2020-01-19T13:00:17Z

The following changes since commit e08e2dd7b77f99e4bb904fc1df2395c2fe2ffbbe:

Merge branch 'fix_verify_push' of https://github.com/gwendalcr/fio (2020-01-16 15:44:44 -0700)

are available in the Git repository at:

git://git.kernel.dk/fio.git master

for you to fetch changes up to d9b7596a1fad5adf7f6731d067e1513c56eabe96:

Merge branch 'master' of https://github.com/bvanassche/fio (2020-01-18 09:35:25 -0700)

----------------------------------------------------------------
Bart Van Assche (8):
stat: Remove two superfluous casts
stat: Remove more superfluous casts
stat: Remove several superfluous if-tests
stat: Fix a memory leak in add_ddir_status_json()
stat: Fix another memory leak in add_ddir_status_json()
lib/memcpy: Suppress a Coverity leak report for setup_tests()
pmemblk: Fix a memory leak
client: Fix memory leaks in handle_job_opt()

Jens Axboe (1):
Merge branch 'master' of https://github.com/bvanassche/fio

client.c | 4 ++++
engines/pmemblk.c | 2 ++
lib/memcpy.c | 3 +++
stat.c | 43 ++++++++++++++++++++++---------------------
4 files changed, 31 insertions(+), 21 deletions(-)

---

Diff of recent changes:

diff --git a/client.c b/client.c
index 55d89a0e..93bca5df 100644
--- a/client.c
+++ b/client.c
@@ -1157,6 +1157,10 @@ static void handle_job_opt(struct fio_client *client, struct fio_net_cmd *cmd)
struct flist_head *opt_list = &client->opt_lists[pdu->groupid];

flist_add_tail(&p->list, opt_list);
+ } else {
+ free(p->value);
+ free(p->name);
+ free(p);
}
}

diff --git a/engines/pmemblk.c b/engines/pmemblk.c
index 45f6fb65..730f4d77 100644
--- a/engines/pmemblk.c
+++ b/engines/pmemblk.c
@@ -226,6 +226,8 @@ static fio_pmemblk_file_t pmb_open(const char *pathspec, int flags)

pthread_mutex_unlock(&CacheLock);

+ free(path);
+
return pmb;

error:
diff --git a/lib/memcpy.c b/lib/memcpy.c
index cf8572e2..a5521343 100644
--- a/lib/memcpy.c
+++ b/lib/memcpy.c
@@ -201,6 +201,9 @@ static int setup_tests(void)
void *src, *dst;
int i;

+ if (!tests[0].name)
+ return 0;
+
src = malloc(BUF_SIZE);
dst = malloc(BUF_SIZE);
if (!src || !dst) {
diff --git a/stat.c b/stat.c
index 55d83fcc..4d3b728c 100644
--- a/stat.c
+++ b/stat.c
@@ -159,7 +159,7 @@ unsigned int calc_clat_percentiles(uint64_t *io_u_plat, unsigned long long nr,
* isn't a worry. Also note that this does not work for NaN values.
*/
if (len > 1)
- qsort((void *)plist, len, sizeof(plist[0]), double_cmp);
+ qsort(plist, len, sizeof(plist[0]), double_cmp);

ovals = malloc(len * sizeof(*ovals));
if (!ovals)
@@ -259,8 +259,7 @@ static void show_clat_percentiles(uint64_t *io_u_plat, unsigned long long nr,
}

out:
- if (ovals)
- free(ovals);
+ free(ovals);
}

bool calc_lat(struct io_stat *is, unsigned long long *min,
@@ -684,7 +683,7 @@ static int calc_block_percentiles(int nr_block_infos, uint32_t *block_infos,
* isn't a worry. Also note that this does not work for NaN values.
*/
if (len > 1)
- qsort((void *)plist, len, sizeof(plist[0]), double_cmp);
+ qsort(plist, len, sizeof(plist[0]), double_cmp);

/* Start only after the uninit entries end */
for (nr_uninit = 0;
@@ -1168,8 +1167,7 @@ static void show_ddir_status_terse(struct thread_stat *ts,
else
log_buf(out, ";%llu;%llu;%f;%f", 0ULL, 0ULL, 0.0, 0.0);

- if (ovals)
- free(ovals);
+ free(ovals);

bw_stat = calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev);
if (bw_stat) {
@@ -1208,7 +1206,8 @@ static void add_ddir_status_json(struct thread_stat *ts,
double mean, dev, iops;
unsigned int len;
int i;
- struct json_object *dir_object, *tmp_object, *percentile_object, *clat_bins_object = NULL;
+ struct json_object *dir_object, *tmp_object, *percentile_object = NULL,
+ *clat_bins_object = NULL;
char buf[120];
double p_of_agg = 100.0;

@@ -1303,29 +1302,34 @@ static void add_ddir_status_json(struct thread_stat *ts,
} else
len = 0;

- percentile_object = json_create_object();
- if (ts->clat_percentiles)
+ if (ts->clat_percentiles) {
+ percentile_object = json_create_object();
json_object_add_value_object(tmp_object, "percentile", percentile_object);
- for (i = 0; i < len; i++) {
- snprintf(buf, sizeof(buf), "%f", ts->percentile_list[i].u.f);
- json_object_add_value_int(percentile_object, (const char *)buf, ovals[i]);
+ for (i = 0; i < len; i++) {
+ snprintf(buf, sizeof(buf), "%f",
+ ts->percentile_list[i].u.f);
+ json_object_add_value_int(percentile_object, buf,
+ ovals[i]);
+ }
}

- if (output_format & FIO_OUTPUT_JSON_PLUS) {
+ free(ovals);
+
+ if (output_format & FIO_OUTPUT_JSON_PLUS && ts->clat_percentiles) {
clat_bins_object = json_create_object();
- if (ts->clat_percentiles)
- json_object_add_value_object(tmp_object, "bins", clat_bins_object);
+ json_object_add_value_object(tmp_object, "bins",
+ clat_bins_object);

for(i = 0; i < FIO_IO_U_PLAT_NR; i++) {
if (ddir_rw(ddir)) {
if (ts->io_u_plat[ddir][i]) {
snprintf(buf, sizeof(buf), "%llu", plat_idx_to_val(i));
- json_object_add_value_int(clat_bins_object, (const char *)buf, ts->io_u_plat[ddir][i]);
+ json_object_add_value_int(clat_bins_object, buf, ts->io_u_plat[ddir][i]);
}
} else {
if (ts->io_u_sync_plat[i]) {
snprintf(buf, sizeof(buf), "%llu", plat_idx_to_val(i));
- json_object_add_value_int(clat_bins_object, (const char *)buf, ts->io_u_sync_plat[i]);
+ json_object_add_value_int(clat_bins_object, buf, ts->io_u_sync_plat[i]);
}
}
}
@@ -1349,9 +1353,6 @@ static void add_ddir_status_json(struct thread_stat *ts,
if (output_format & FIO_OUTPUT_JSON_PLUS && ts->lat_percentiles)
json_object_add_value_object(tmp_object, "bins", clat_bins_object);

- if (ovals)
- free(ovals);
-
if (calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev)) {
if (rs->agg[ddir]) {
p_of_agg = mean * 100 / (double) (rs->agg[ddir] / 1024);
@@ -1661,7 +1662,7 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts,
snprintf(buf, sizeof(buf), "%f",
ts->percentile_list[i].u.f);
json_object_add_value_int(percentile_object,
- (const char *)buf,
+ buf,
percentiles[i]);
}