X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=client.c;h=11fa262a6af9d2a5db68401d3d9c73ab86fc6272;hp=09e810afc6120bb84b28e12164b09bb084661f59;hb=057bc4a6587d99088bfe4da28f43501212137ad4;hpb=b599759ba565e7f2f573af364e6da4fe6d556a90 diff --git a/client.c b/client.c index 09e810af..11fa262a 100644 --- a/client.c +++ b/client.c @@ -942,6 +942,8 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src) dst->kb_base = le32_to_cpu(src->kb_base); dst->unit_base = le32_to_cpu(src->unit_base); + dst->sig_figs = le32_to_cpu(src->sig_figs); + dst->latency_depth = le32_to_cpu(src->latency_depth); dst->latency_target = le64_to_cpu(src->latency_target); dst->latency_window = le64_to_cpu(src->latency_window); @@ -982,6 +984,7 @@ static void convert_gs(struct group_run_stats *dst, struct group_run_stats *src) dst->kb_base = le32_to_cpu(src->kb_base); dst->unit_base = le32_to_cpu(src->unit_base); + dst->sig_figs = le32_to_cpu(src->sig_figs); dst->groupid = le32_to_cpu(src->groupid); dst->unified_rw_rep = le32_to_cpu(src->unified_rw_rep); } @@ -1167,6 +1170,7 @@ static void convert_jobs_eta(struct jobs_eta *je) je->nr_threads = le32_to_cpu(je->nr_threads); je->is_pow2 = le32_to_cpu(je->is_pow2); je->unit_base = le32_to_cpu(je->unit_base); + je->sig_figs = le32_to_cpu(je->sig_figs); } void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je) @@ -1312,14 +1316,16 @@ static void client_flush_hist_samples(FILE *f, int hist_coarseness, void *sample static int fio_client_handle_iolog(struct fio_client *client, struct fio_net_cmd *cmd) { - struct cmd_iolog_pdu *pdu; + struct cmd_iolog_pdu *pdu = NULL; bool store_direct; - char *log_pathname; + char *log_pathname = NULL; + int ret = 0; pdu = convert_iolog(cmd, &store_direct); if (!pdu) { log_err("fio: failed converting IO log\n"); - return 1; + ret = 1; + goto out; } /* allocate buffer big enough for next sprintf() call */ @@ -1327,7 +1333,8 @@ static int fio_client_handle_iolog(struct fio_client *client, strlen(client->hostname)); if (!log_pathname) { log_err("fio: memory allocation of unique pathname failed\n"); - return -1; + ret = -1; + goto out; } /* generate a unique pathname for the log file using hostname */ sprintf(log_pathname, "%s.%s", pdu->name, client->hostname); @@ -1342,7 +1349,8 @@ static int fio_client_handle_iolog(struct fio_client *client, if (fd < 0) { log_err("fio: open log %s: %s\n", log_pathname, strerror(errno)); - return 1; + ret = 1; + goto out; } sz = cmd->pdu_len - sizeof(*pdu); @@ -1351,17 +1359,19 @@ static int fio_client_handle_iolog(struct fio_client *client, if (ret != sz) { log_err("fio: short write on compressed log\n"); - return 1; + ret = 1; + goto out; } - return 0; + ret = 0; } else { FILE *f; f = fopen((const char *) log_pathname, "w"); if (!f) { log_err("fio: fopen log %s : %s\n", log_pathname, strerror(errno)); - return 1; + ret = 1; + goto out; } if (pdu->log_type == IO_LOG_TYPE_HIST) { @@ -1372,8 +1382,17 @@ static int fio_client_handle_iolog(struct fio_client *client, pdu->nr_samples * sizeof(struct io_sample)); } fclose(f); - return 0; + ret = 0; } + +out: + if (pdu && pdu != (void *) cmd->payload) + free(pdu); + + if (log_pathname) + free(log_pathname); + + return ret; } static void handle_probe(struct fio_client *client, struct fio_net_cmd *cmd) @@ -1849,10 +1868,12 @@ static void request_client_etas(struct client_ops *ops) static int handle_cmd_timeout(struct fio_client *client, struct fio_net_cmd_reply *reply) { + uint16_t reply_opcode = reply->opcode; + flist_del(&reply->list); free(reply); - if (reply->opcode != FIO_NET_CMD_SEND_ETA) + if (reply_opcode != FIO_NET_CMD_SEND_ETA) return 1; log_info("client <%s>: timeout on SEND_ETA\n", client->hostname);