[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200822044105.3097613-2-luke.w.hsiao@gmail.com>
Date: Fri, 21 Aug 2020 21:41:05 -0700
From: Luke Hsiao <luke.w.hsiao@...il.com>
To: David Miller <davem@...emloft.net>
Cc: netdev@...r.kernel.org, Jens Axboe <axboe@...nel.dk>,
Jakub Kicinski <kuba@...nel.org>,
Luke Hsiao <lukehsiao@...gle.com>,
Arjun Roy <arjunroy@...gle.com>,
Soheil Hassas Yeganeh <soheil@...gle.com>,
Eric Dumazet <edumazet@...gle.com>
Subject: [PATCH net-next v3 2/2] io_uring: ignore POLLIN for recvmsg on MSG_ERRQUEUE
From: Luke Hsiao <lukehsiao@...gle.com>
Currently, io_uring's recvmsg subscribes to both POLLERR and POLLIN. In
the context of TCP tx zero-copy, this is inefficient since we are only
reading the error queue and not using recvmsg to read POLLIN responses.
This patch was tested by using a simple sending program to call recvmsg
using io_uring with MSG_ERRQUEUE set and verifying with printks that the
POLLIN is correctly unset when the msg flags are MSG_ERRQUEUE.
Signed-off-by: Arjun Roy <arjunroy@...gle.com>
Signed-off-by: Soheil Hassas Yeganeh <soheil@...gle.com>
Acked-by: Eric Dumazet <edumazet@...gle.com>
Reviewed-by: Jens Axboe <axboe@...nel.dk>
Signed-off-by: Luke Hsiao <lukehsiao@...gle.com>
---
fs/io_uring.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/fs/io_uring.c b/fs/io_uring.c
index dc506b75659c..1aa2191ea683 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -4932,6 +4932,12 @@ static bool io_arm_poll_handler(struct io_kiocb *req)
mask |= POLLIN | POLLRDNORM;
if (def->pollout)
mask |= POLLOUT | POLLWRNORM;
+
+ /* If reading from MSG_ERRQUEUE using recvmsg, ignore POLLIN */
+ if ((req->opcode == IORING_OP_RECVMSG) &&
+ (req->sr_msg.msg_flags & MSG_ERRQUEUE))
+ mask &= ~POLLIN;
+
mask |= POLLERR | POLLPRI;
ipt.pt._qproc = io_async_queue_proc;
--
2.28.0.297.g1956fa8f8d-goog
Powered by blists - more mailing lists