From: Jens Axboe Date: Sat, 30 May 2026 02:03:47 +0000 (-0600) Subject: io_uring/net: make POLL_FIRST receive side checks consistent X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=856950322678906a0947c31205dd652830f9c628;p=thirdparty%2Fkernel%2Flinux.git io_uring/net: make POLL_FIRST receive side checks consistent io_recv() and io_recvzc() are the odd ones out, as they checks for whether POLL_FIRST should be honored before checking if the file is a socket. It doesn't really matter, but might as well make it consistent across all receive and send types. Signed-off-by: Jens Axboe --- diff --git a/io_uring/net.c b/io_uring/net.c index 5ae538b3c0f3c..7deb62e3b4c0c 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -1216,14 +1216,14 @@ int io_recv(struct io_kiocb *req, unsigned int issue_flags) bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK; bool mshot_finished; - if (!(req->flags & REQ_F_POLLED) && - (sr->flags & IORING_RECVSEND_POLL_FIRST)) - return -EAGAIN; - sock = sock_from_file(req->file); if (unlikely(!sock)) return -ENOTSOCK; + if (!(req->flags & REQ_F_POLLED) && + (sr->flags & IORING_RECVSEND_POLL_FIRST)) + return -EAGAIN; + flags = sr->msg_flags; if (force_nonblock) flags |= MSG_DONTWAIT; @@ -1328,14 +1328,14 @@ int io_recvzc(struct io_kiocb *req, unsigned int issue_flags) unsigned int len; int ret; - if (!(req->flags & REQ_F_POLLED) && - (zc->flags & IORING_RECVSEND_POLL_FIRST)) - return -EAGAIN; - sock = sock_from_file(req->file); if (unlikely(!sock)) return -ENOTSOCK; + if (!(req->flags & REQ_F_POLLED) && + (zc->flags & IORING_RECVSEND_POLL_FIRST)) + return -EAGAIN; + len = zc->len; ret = io_zcrx_recv(req, zc->ifq, sock, 0, issue_flags, &zc->len); if (len && zc->len == 0) {