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;