]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
io_uring/net: make POLL_FIRST receive side checks consistent
authorJens Axboe <axboe@kernel.dk>
Sat, 30 May 2026 02:03:47 +0000 (20:03 -0600)
committerJens Axboe <axboe@kernel.dk>
Sat, 13 Jun 2026 12:27:24 +0000 (06:27 -0600)
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 <axboe@kernel.dk>
io_uring/net.c

index 5ae538b3c0f3c99880d07c288dbac5d22eda1989..7deb62e3b4c0ca9936173a457ef3988fc43b1655 100644 (file)
@@ -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) {