]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
io_uring: optimise io_req_find_next() fast check
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 30 Jun 2020 12:20:43 +0000 (15:20 +0300)
committerJens Axboe <axboe@kernel.dk>
Tue, 30 Jun 2020 15:32:04 +0000 (09:32 -0600)
gcc 9.2.0 compiles io_req_find_next() as a separate function leaving
the first REQ_F_LINK_HEAD fast check not inlined. Help it by splitting
out the check from the function.

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

index 82b35948ac5bf92e2ad46ea8b352743934e62d51..9a43847c6823153e68a3e493ca083f24710ecf01 100644 (file)
@@ -1664,12 +1664,9 @@ static void io_fail_links(struct io_kiocb *req)
        io_cqring_ev_posted(ctx);
 }
 
-static struct io_kiocb *io_req_find_next(struct io_kiocb *req)
+static struct io_kiocb *__io_req_find_next(struct io_kiocb *req)
 {
-       if (likely(!(req->flags & REQ_F_LINK_HEAD)))
-               return NULL;
        req->flags &= ~REQ_F_LINK_HEAD;
-
        if (req->flags & REQ_F_LINK_TIMEOUT)
                io_kill_linked_timeout(req);
 
@@ -1685,6 +1682,13 @@ static struct io_kiocb *io_req_find_next(struct io_kiocb *req)
        return NULL;
 }
 
+static struct io_kiocb *io_req_find_next(struct io_kiocb *req)
+{
+       if (likely(!(req->flags & REQ_F_LINK_HEAD)))
+               return NULL;
+       return __io_req_find_next(req);
+}
+
 static void __io_req_task_cancel(struct io_kiocb *req, int error)
 {
        struct io_ring_ctx *ctx = req->ctx;