engines/net: turn off UDP package dropping if buf size doesn't match
Signed-off-by: Jens Axboe <axboe@fb.com>
diff --git a/engines/net.c b/engines/net.c
index 30f6647..5778bb0 100644
--- a/engines/net.c
+++ b/engines/net.c
@@ -26,6 +26,7 @@
struct netio_data {
int listenfd;
int use_splice;
+ int seq_off;
int pipes[2];
struct sockaddr_in addr;
struct sockaddr_in6 addr6;
@@ -55,6 +56,7 @@
struct udp_seq {
uint64_t magic;
uint64_t seq;
+ uint64_t bs;
};
enum {
@@ -484,6 +486,7 @@
us = io_u->xfer_buf + io_u->xfer_buflen - sizeof(*us);
us->magic = cpu_to_le64(FIO_UDP_SEQ_MAGIC);
+ us->bs = cpu_to_le64((uint64_t) io_u->xfer_buflen);
us->seq = cpu_to_le64(nd->udp_send_seq++);
}
@@ -493,9 +496,16 @@
struct udp_seq *us;
uint64_t seq;
+ if (nd->seq_off)
+ return;
+
us = io_u->xfer_buf + io_u->xfer_buflen - sizeof(*us);
if (le64_to_cpu(us->magic) != FIO_UDP_SEQ_MAGIC)
return;
+ if (le64_to_cpu(us->bs) != io_u->xfer_buflen) {
+ nd->seq_off = 1;
+ return;
+ }
seq = le64_to_cpu(us->seq);