io_uring: optimise success case of __io_queue_sqe
authorPavel Begunkov <asml.silence@gmail.com>
Fri, 19 Mar 2021 17:22:34 +0000 (17:22 +0000)
committerJens Axboe <axboe@kernel.dk>
Sun, 11 Apr 2021 23:41:58 +0000 (17:41 -0600)
Move the case of successfully issued request by doing that check first.
It's not much of a difference, just generates slightly better code for
me.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 416afa7..b08813e 100644 (file)
@@ -6330,15 +6330,7 @@ static void __io_queue_sqe(struct io_kiocb *req)
         * We async punt it if the file wasn't marked NOWAIT, or if the file
         * doesn't support non-blocking read/write attempts
         */
-       if (ret == -EAGAIN && !(req->flags & REQ_F_NOWAIT)) {
-               if (!io_arm_poll_handler(req)) {
-                       /*
-                        * Queued up for async execution, worker will release
-                        * submit reference when the iocb is actually submitted.
-                        */
-                       io_queue_async_work(req);
-               }
-       } else if (likely(!ret)) {
+       if (likely(!ret)) {
                /* drop submission reference */
                if (req->flags & REQ_F_COMPLETE_INLINE) {
                        struct io_ring_ctx *ctx = req->ctx;
@@ -6350,6 +6342,14 @@ static void __io_queue_sqe(struct io_kiocb *req)
                } else {
                        io_put_req(req);
                }
+       } else if (ret == -EAGAIN && !(req->flags & REQ_F_NOWAIT)) {
+               if (!io_arm_poll_handler(req)) {
+                       /*
+                        * Queued up for async execution, worker will release
+                        * submit reference when the iocb is actually submitted.
+                        */
+                       io_queue_async_work(req);
+               }
        } else {
                io_req_complete_failed(req, ret);
        }