Merge tag 'media/v6.1-4' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[platform/kernel/linux-starfive.git] / io_uring / net.c
index 15dea91..ab83da7 100644 (file)
@@ -67,8 +67,6 @@ struct io_sr_msg {
        struct io_kiocb                 *notif;
 };
 
-#define IO_APOLL_MULTI_POLLED (REQ_F_APOLL_MULTISHOT | REQ_F_POLLED)
-
 int io_shutdown_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 {
        struct io_shutdown *shutdown = io_kiocb_to_cmd(req, struct io_shutdown);
@@ -591,7 +589,8 @@ static inline void io_recv_prep_retry(struct io_kiocb *req)
  * again (for multishot).
  */
 static inline bool io_recv_finish(struct io_kiocb *req, int *ret,
-                                 unsigned int cflags, bool mshot_finished)
+                                 unsigned int cflags, bool mshot_finished,
+                                 unsigned issue_flags)
 {
        if (!(req->flags & REQ_F_APOLL_MULTISHOT)) {
                io_req_set_res(req, *ret, cflags);
@@ -614,7 +613,7 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret,
 
        io_req_set_res(req, *ret, cflags);
 
-       if (req->flags & REQ_F_POLLED)
+       if (issue_flags & IO_URING_F_MULTISHOT)
                *ret = IOU_STOP_MULTISHOT;
        else
                *ret = IOU_OK;
@@ -773,8 +772,7 @@ retry_multishot:
        if (ret < min_ret) {
                if (ret == -EAGAIN && force_nonblock) {
                        ret = io_setup_async_msg(req, kmsg, issue_flags);
-                       if (ret == -EAGAIN && (req->flags & IO_APOLL_MULTI_POLLED) ==
-                                              IO_APOLL_MULTI_POLLED) {
+                       if (ret == -EAGAIN && (issue_flags & IO_URING_F_MULTISHOT)) {
                                io_kbuf_recycle(req, issue_flags);
                                return IOU_ISSUE_SKIP_COMPLETE;
                        }
@@ -803,7 +801,7 @@ retry_multishot:
        if (kmsg->msg.msg_inq)
                cflags |= IORING_CQE_F_SOCK_NONEMPTY;
 
-       if (!io_recv_finish(req, &ret, cflags, mshot_finished))
+       if (!io_recv_finish(req, &ret, cflags, mshot_finished, issue_flags))
                goto retry_multishot;
 
        if (mshot_finished) {
@@ -869,7 +867,7 @@ retry_multishot:
        ret = sock_recvmsg(sock, &msg, flags);
        if (ret < min_ret) {
                if (ret == -EAGAIN && force_nonblock) {
-                       if ((req->flags & IO_APOLL_MULTI_POLLED) == IO_APOLL_MULTI_POLLED) {
+                       if (issue_flags & IO_URING_F_MULTISHOT) {
                                io_kbuf_recycle(req, issue_flags);
                                return IOU_ISSUE_SKIP_COMPLETE;
                        }
@@ -902,7 +900,7 @@ out_free:
        if (msg.msg_inq)
                cflags |= IORING_CQE_F_SOCK_NONEMPTY;
 
-       if (!io_recv_finish(req, &ret, cflags, ret <= 0))
+       if (!io_recv_finish(req, &ret, cflags, ret <= 0, issue_flags))
                goto retry_multishot;
 
        return ret;
@@ -1289,8 +1287,7 @@ retry:
                         * return EAGAIN to arm the poll infra since it
                         * has already been done
                         */
-                       if ((req->flags & IO_APOLL_MULTI_POLLED) ==
-                           IO_APOLL_MULTI_POLLED)
+                       if (issue_flags & IO_URING_F_MULTISHOT)
                                ret = IOU_ISSUE_SKIP_COMPLETE;
                        return ret;
                }
@@ -1315,9 +1312,7 @@ retry:
                goto retry;
 
        io_req_set_res(req, ret, 0);
-       if (req->flags & REQ_F_POLLED)
-               return IOU_STOP_MULTISHOT;
-       return IOU_OK;
+       return (issue_flags & IO_URING_F_MULTISHOT) ? IOU_STOP_MULTISHOT : IOU_OK;
 }
 
 int io_socket_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)