cmd->pdu_len = le32_to_cpu(cmd->pdu_len);
switch (cmd->version) {
- case FIO_SERVER_VER1:
+ case FIO_SERVER_VER2:
break;
default:
log_err("fio: bad server cmd version %d\n", cmd->version);
/*
* Read (and defragment, if necessary) incoming commands
*/
-struct fio_net_cmd *fio_net_recv_cmd(int sk, int block)
+struct fio_net_cmd *fio_net_recv_cmd(int sk)
{
struct fio_net_cmd cmd, *cmdret = NULL;
size_t cmd_size = 0, pdu_offset = 0;
void *pdu = NULL;
do {
- struct pollfd pfd;
-
- pfd.fd = sk;
- pfd.events = POLLIN;
- ret = 0;
- do {
- int timeo = block ? 100 : 10;
-
- ret = poll(&pfd, 1, timeo);
- if (ret < 0) {
- if (errno == EINTR)
- break;
- log_err("fio: poll: %s\n", strerror(errno));
- break;
- } else if (!ret) {
- if (!block)
- return NULL;
- continue;
- }
-
- if (pfd.revents & POLLIN)
- break;
- if (pfd.revents & (POLLERR|POLLHUP)) {
- ret = 1;
- break;
- }
- } while (ret >= 0 && block);
-
- if (ret < 0)
- break;
-
ret = fio_recv_data(sk, &cmd, sizeof(cmd));
if (ret)
break;
int fio_net_send_simple_cmd(int sk, uint16_t opcode, uint64_t serial)
{
- struct fio_net_cmd cmd = {
- .version = __cpu_to_le16(FIO_SERVER_VER1),
- .opcode = cpu_to_le16(opcode),
- .serial = cpu_to_le64(serial),
- };
+ struct fio_net_cmd cmd;
+ fio_init_net_cmd(&cmd, opcode, NULL, 0);
fio_net_cmd_crc(&cmd);
return fio_send_data(sk, &cmd, sizeof(cmd));
/* read forever */
while (!exit_backend) {
- cmd = fio_net_recv_cmd(sk, block);
+ struct pollfd pfd = {
+ .fd = sk,
+ .events = POLLIN,
+ };
+
+ ret = 0;
+ do {
+ ret = poll(&pfd, 1, 100);
+ if (ret < 0) {
+ if (errno == EINTR)
+ break;
+ log_err("fio: poll: %s\n", strerror(errno));
+ break;
+ } else if (!ret) {
+ if (!block)
+ return 0;
+ continue;
+ }
+
+ if (pfd.revents & POLLIN)
+ break;
+ if (pfd.revents & (POLLERR|POLLHUP)) {
+ ret = 1;
+ break;
+ }
+ } while (!exit_backend);
+
+ if (ret < 0)
+ break;
+
+ cmd = fio_net_recv_cmd(sk);
if (!cmd) {
ret = -1;
break;