mirror of https://gitee.com/openkylin/linux.git
io_uring: ignore POLLIN for recvmsg on MSG_ERRQUEUE
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@google.com> Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com> Acked-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Luke Hsiao <lukehsiao@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
583bbf0624
commit
901341bb97
|
@ -4898,6 +4898,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;
|
||||
|
|
Loading…
Reference in New Issue