X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=client.c;h=760ec85087b73bba197c95b033154f08c245bc7f;hp=52440f067aed33cd9b03876a385e0ebe0ca1b7e6;hb=017052b628ae0cef4214ea624413149fb6e87550;hpb=e5aa68b3dc01f4188c31091d1c561d3cb7c5af03 diff --git a/client.c b/client.c index 52440f06..760ec850 100644 --- a/client.c +++ b/client.c @@ -62,6 +62,8 @@ static struct json_object *root = NULL; static struct json_array *clients_array = NULL; static struct json_array *du_array = NULL; +static int error_clients; + #define FIO_CLIENT_HASH_BITS 7 #define FIO_CLIENT_HASH_SZ (1 << FIO_CLIENT_HASH_BITS) #define FIO_CLIENT_HASH_MASK (FIO_CLIENT_HASH_SZ - 1) @@ -176,6 +178,9 @@ void fio_put_client(struct fio_client *client) if (!client->did_stat) sum_stat_clients--; + if (client->error) + error_clients++; + free(client); } @@ -380,6 +385,7 @@ static const char *server_name(struct fio_client *client, char *buf, static void probe_client(struct fio_client *client) { struct cmd_client_probe_pdu pdu; + const char *sname; uint64_t tag; char buf[64]; @@ -391,7 +397,9 @@ static void probe_client(struct fio_client *client) pdu.flags = 0; #endif - strcpy((char *) pdu.server, server_name(client, buf, sizeof(buf))); + sname = server_name(client, buf, sizeof(buf)); + memset(pdu.server, 0, sizeof(pdu.server)); + strncpy((char *) pdu.server, sname, sizeof(pdu.server) - 1); fio_net_send_cmd(client->fd, FIO_NET_CMD_PROBE, &pdu, sizeof(pdu), &tag, &client->cmd_list); } @@ -974,14 +982,14 @@ static void convert_agg(struct disk_util_agg *agg) int i; for (i = 0; i < 2; i++) { - agg->ios[i] = le32_to_cpu(agg->ios[i]); - agg->merges[i] = le32_to_cpu(agg->merges[i]); + agg->ios[i] = le64_to_cpu(agg->ios[i]); + agg->merges[i] = le64_to_cpu(agg->merges[i]); agg->sectors[i] = le64_to_cpu(agg->sectors[i]); - agg->ticks[i] = le32_to_cpu(agg->ticks[i]); + agg->ticks[i] = le64_to_cpu(agg->ticks[i]); } - agg->io_ticks = le32_to_cpu(agg->io_ticks); - agg->time_in_queue = le32_to_cpu(agg->time_in_queue); + agg->io_ticks = le64_to_cpu(agg->io_ticks); + agg->time_in_queue = le64_to_cpu(agg->time_in_queue); agg->slavecount = le32_to_cpu(agg->slavecount); agg->max_util.u.f = fio_uint64_to_double(le64_to_cpu(agg->max_util.u.i)); } @@ -991,14 +999,14 @@ static void convert_dus(struct disk_util_stat *dus) int i; for (i = 0; i < 2; i++) { - dus->s.ios[i] = le32_to_cpu(dus->s.ios[i]); - dus->s.merges[i] = le32_to_cpu(dus->s.merges[i]); + dus->s.ios[i] = le64_to_cpu(dus->s.ios[i]); + dus->s.merges[i] = le64_to_cpu(dus->s.merges[i]); dus->s.sectors[i] = le64_to_cpu(dus->s.sectors[i]); - dus->s.ticks[i] = le32_to_cpu(dus->s.ticks[i]); + dus->s.ticks[i] = le64_to_cpu(dus->s.ticks[i]); } - dus->s.io_ticks = le32_to_cpu(dus->s.io_ticks); - dus->s.time_in_queue = le32_to_cpu(dus->s.time_in_queue); + dus->s.io_ticks = le64_to_cpu(dus->s.io_ticks); + dus->s.time_in_queue = le64_to_cpu(dus->s.time_in_queue); dus->s.msec = le64_to_cpu(dus->s.msec); } @@ -1485,6 +1493,7 @@ int fio_handle_client(struct fio_client *client) char buf[64]; __verify_save_state(pdu, server_name(client, buf, sizeof(buf))); + exec_trigger(trigger_cmd); break; } case FIO_NET_CMD_SENDFILE: { @@ -1612,6 +1621,7 @@ static int fio_check_clients_timed_out(void) else log_err("fio: client %s timed out\n", client->hostname); + client->error = ETIMEDOUT; remove_client(client); ret = 1; } @@ -1705,5 +1715,5 @@ int fio_handle_clients(struct client_ops *ops) fio_client_json_fini(); free(pfds); - return retval; + return retval || error_clients; }