X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=server.c;h=4da8bf0040397d5173987b3b993e5a794f1959fc;hb=4d658652bac63fd72af8302e27deba5beb381906;hp=e4793f7bcb41cfcaf892254463c183a02c19de61;hpb=d09a64a01a6c807596e9286c93f6c6f30fd2ea26;p=fio.git diff --git a/server.c b/server.c index e4793f7b..4da8bf00 100644 --- a/server.c +++ b/server.c @@ -20,7 +20,7 @@ #include "fio.h" #include "server.h" #include "crc/crc16.h" -#include "ieee754.h" +#include "lib/ieee754.h" #include "fio_version.h" @@ -32,6 +32,7 @@ static int server_fd = -1; static char *fio_server_arg; static char *bind_sock; static struct sockaddr_in saddr_in; +static int first_cmd_check; static const char *fio_server_ops[FIO_NET_CMD_NR] = { "", @@ -48,6 +49,7 @@ static const char *fio_server_ops[FIO_NET_CMD_NR] = { "START", "STOP", "DISK_UTIL", + "RUN", }; const char *fio_server_op(unsigned int op) @@ -181,8 +183,12 @@ struct fio_net_cmd *fio_net_recv_cmd(int sk) if (first) memcpy(cmdret, &cmd, sizeof(cmd)); - else - assert(cmdret->opcode == cmd.opcode); + else if (cmdret->opcode != cmd.opcode) { + log_err("fio: fragment opcode mismatch (%d != %d)\n", + cmdret->opcode, cmd.opcode); + ret = 1; + break; + } if (!cmd.pdu_len) break; @@ -326,6 +332,8 @@ static int fio_server_send_quit_cmd(void) static int handle_job_cmd(struct fio_net_cmd *cmd) { char *buf = (char *) cmd->payload; + struct cmd_start_pdu spdu; + struct cmd_end_pdu epdu; int ret; if (parse_jobs_ini(buf, 1, 0)) { @@ -333,9 +341,14 @@ static int handle_job_cmd(struct fio_net_cmd *cmd) return -1; } - fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_START, 0, NULL); + spdu.jobs = cpu_to_le32(thread_number); + fio_net_send_cmd(server_fd, FIO_NET_CMD_START, &spdu, sizeof(spdu), 0); ret = exec_run(); + + epdu.error = ret; + fio_net_send_cmd(server_fd, FIO_NET_CMD_STOP, &epdu, sizeof(epdu), 0); + fio_server_send_quit_cmd(); reset_fio_state(); return ret; @@ -539,6 +552,8 @@ static int handle_connection(int sk, int block) void fio_server_idle_loop(void) { + if (!first_cmd_check) + fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_RUN, 0, NULL); if (server_fd != -1) handle_connection(server_fd, 0); } @@ -770,6 +785,8 @@ void fio_server_send_du(void) dprint(FD_NET, "server: sending disk_util %d\n", !flist_empty(&disk_list)); + memset(&pdu, 0, sizeof(pdu)); + flist_for_each(entry, &disk_list) { du = flist_entry(entry, struct disk_util, list);