X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=client.c;h=8b230617f79bd0dbab6853e9388a1e7fa8f700ce;hp=55d89a0e54fd3696dc8685232f5e1fa02a5eb3da;hb=6c5d3a1c08bda1bbf22187c7b80573400e1c1053;hpb=5f8b2810bd04f5a4a8e1f0f166cddeaf26f6644d diff --git a/client.c b/client.c index 55d89a0e..8b230617 100644 --- a/client.c +++ b/client.c @@ -390,8 +390,6 @@ struct fio_client *fio_client_add_explicit(struct client_ops *ops, client = get_new_client(); - client->hostname = strdup(hostname); - if (type == Fio_client_socket) client->is_sock = true; else { @@ -410,6 +408,7 @@ struct fio_client *fio_client_add_explicit(struct client_ops *ops, client->ops = ops; client->refs = 1; client->type = ops->client_type; + client->hostname = strdup(hostname); __fio_client_add_cmd_option(client, "fio"); @@ -471,8 +470,10 @@ int fio_client_add(struct client_ops *ops, const char *hostname, void **cookie) &client->is_sock, &client->port, &client->addr.sin_addr, &client->addr6.sin6_addr, - &client->ipv6)) + &client->ipv6)) { + fio_put_client(client); return -1; + } client->fd = -1; client->ops = ops; @@ -944,7 +945,7 @@ static void convert_io_stat(struct io_stat *dst, struct io_stat *src) static void convert_ts(struct thread_stat *dst, struct thread_stat *src) { - int i, j; + int i, j, k; dst->error = le32_to_cpu(src->error); dst->thread_number = le32_to_cpu(src->thread_number); @@ -969,6 +970,7 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src) dst->majf = le64_to_cpu(src->majf); dst->clat_percentiles = le32_to_cpu(src->clat_percentiles); dst->lat_percentiles = le32_to_cpu(src->lat_percentiles); + dst->slat_percentiles = le32_to_cpu(src->slat_percentiles); dst->percentile_precision = le64_to_cpu(src->percentile_precision); for (i = 0; i < FIO_IO_U_LIST_MAX_LEN; i++) { @@ -991,9 +993,10 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src) for (i = 0; i < FIO_IO_U_LAT_M_NR; i++) dst->io_u_lat_m[i] = le64_to_cpu(src->io_u_lat_m[i]); - for (i = 0; i < DDIR_RWDIR_CNT; i++) - for (j = 0; j < FIO_IO_U_PLAT_NR; j++) - dst->io_u_plat[i][j] = le64_to_cpu(src->io_u_plat[i][j]); + for (i = 0; i < FIO_LAT_CNT; i++) + for (j = 0; j < DDIR_RWDIR_CNT; j++) + for (k = 0; k < FIO_IO_U_PLAT_NR; k++) + dst->io_u_plat[i][j][k] = le64_to_cpu(src->io_u_plat[i][j][k]); for (j = 0; j < FIO_IO_U_PLAT_NR; j++) dst->io_u_sync_plat[j] = le64_to_cpu(src->io_u_sync_plat[j]); @@ -1032,6 +1035,14 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src) dst->nr_block_infos = le64_to_cpu(src->nr_block_infos); for (i = 0; i < dst->nr_block_infos; i++) dst->block_infos[i] = le32_to_cpu(src->block_infos[i]); + for (i = 0; i < DDIR_RWDIR_CNT; i++) { + for (j = 0; j < FIO_IO_U_PLAT_NR; j++) { + dst->io_u_plat_high_prio[i][j] = le64_to_cpu(src->io_u_plat_high_prio[i][j]); + dst->io_u_plat_low_prio[i][j] = le64_to_cpu(src->io_u_plat_low_prio[i][j]); + } + convert_io_stat(&dst->clat_high_prio_stat[i], &src->clat_high_prio_stat[i]); + convert_io_stat(&dst->clat_low_prio_stat[i], &src->clat_low_prio_stat[i]); + } dst->ss_dur = le64_to_cpu(src->ss_dur); dst->ss_state = le32_to_cpu(src->ss_state); @@ -1130,32 +1141,26 @@ static void handle_gs(struct fio_client *client, struct fio_net_cmd *cmd) static void handle_job_opt(struct fio_client *client, struct fio_net_cmd *cmd) { struct cmd_job_option *pdu = (struct cmd_job_option *) cmd->payload; - struct print_option *p; - - if (!job_opt_object) - return; pdu->global = le16_to_cpu(pdu->global); pdu->truncated = le16_to_cpu(pdu->truncated); pdu->groupid = le32_to_cpu(pdu->groupid); - p = malloc(sizeof(*p)); - p->name = strdup((char *) pdu->name); - if (pdu->value[0] != '\0') - p->value = strdup((char *) pdu->value); - else - p->value = NULL; - if (pdu->global) { - const char *pos = ""; - - if (p->value) - pos = p->value; + if (!job_opt_object) + return; - json_object_add_value_string(job_opt_object, p->name, pos); + json_object_add_value_string(job_opt_object, + (const char *)pdu->name, + (const char *)pdu->value); } else if (client->opt_lists) { struct flist_head *opt_list = &client->opt_lists[pdu->groupid]; + struct print_option *p; + p = malloc(sizeof(*p)); + p->name = strdup((const char *)pdu->name); + p->value = pdu->value[0] ? strdup((const char *)pdu->value) : + NULL; flist_add_tail(&p->list, opt_list); } } @@ -1674,6 +1679,7 @@ static struct cmd_iolog_pdu *convert_iolog(struct fio_net_cmd *cmd, ret->log_type = le32_to_cpu(ret->log_type); ret->compressed = le32_to_cpu(ret->compressed); ret->log_offset = le32_to_cpu(ret->log_offset); + ret->log_prio = le32_to_cpu(ret->log_prio); ret->log_hist_coarseness = le32_to_cpu(ret->log_hist_coarseness); if (*store_direct) @@ -1689,8 +1695,9 @@ static struct cmd_iolog_pdu *convert_iolog(struct fio_net_cmd *cmd, s->time = le64_to_cpu(s->time); s->data.val = le64_to_cpu(s->data.val); - s->__ddir = le32_to_cpu(s->__ddir); + s->__ddir = __le32_to_cpu(s->__ddir); s->bs = le64_to_cpu(s->bs); + s->priority = le16_to_cpu(s->priority); if (ret->log_offset) { struct io_sample_offset *so = (void *) s;