From 71f9b933405d1ce1ea1ccf1c68745a164527dc15 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 9 Oct 2014 13:38:06 -0600 Subject: [PATCH] engines/net: turn off UDP package dropping if buf size doesn't match Signed-off-by: Jens Axboe --- engines/net.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/engines/net.c b/engines/net.c index 30f66470..5778bb08 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_close_msg { struct udp_seq { uint64_t magic; uint64_t seq; + uint64_t bs; }; enum { @@ -484,6 +486,7 @@ static void store_udp_seq(struct netio_data *nd, struct io_u *io_u) 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 @@ static void verify_udp_seq(struct thread_data *td, struct netio_data *nd, 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); -- 2.25.1