From: Pavel Begunkov Date: Fri, 24 Sep 2021 21:00:00 +0000 (+0100) Subject: io_uring: reshuffle queue_sqe completion handling X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=d9f9d2842c9156470b3f1d3dafe5684a3c036366;p=linux.git io_uring: reshuffle queue_sqe completion handling If a request completed inline the result should only be zero, it's a grave error otherwise. So, when we see REQ_F_COMPLETE_INLINE it's not even necessary to check the return code, and the flag check can be moved earlier. It's one "if" less for inline completions, and same two checks for it normally completing (ret == 0). Those are two cases we care about the most. Signed-off-by: Pavel Begunkov Link: https://lore.kernel.org/r/ebd4e397a9c26d96c99b24447acc309741041a83.1632516769.git.asml.silence@gmail.com Signed-off-by: Jens Axboe --- diff --git a/fs/io_uring.c b/fs/io_uring.c index d4f8abb451c44..bbb2a262c2728 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -6925,14 +6925,13 @@ static inline void __io_queue_sqe(struct io_kiocb *req) ret = io_issue_sqe(req, IO_URING_F_NONBLOCK|IO_URING_F_COMPLETE_DEFER); + if (req->flags & REQ_F_COMPLETE_INLINE) + return; /* * We async punt it if the file wasn't marked NOWAIT, or if the file * doesn't support non-blocking read/write attempts */ if (likely(!ret)) { - if (req->flags & REQ_F_COMPLETE_INLINE) - return; - linked_timeout = io_prep_linked_timeout(req); if (linked_timeout) io_queue_linked_timeout(linked_timeout);