#include "fio.h"
#include "server.h"
#include "crc/crc16.h"
-#include "ieee754.h"
+#include "lib/ieee754.h"
#include "fio_version.h"
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] = {
"",
"START",
"STOP",
"DISK_UTIL",
+ "RUN",
};
const char *fio_server_op(unsigned int op)
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;
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)) {
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;
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);
}
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);