summaryrefslogtreecommitdiff
path: root/fs/io_uring.c
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2021-09-24 22:00:00 +0100
committerJens Axboe <axboe@kernel.dk>2021-10-19 05:49:54 -0600
commitd9f9d2842c9156470b3f1d3dafe5684a3c036366 (patch)
treedd66b2e6dc1d800748e6b1655ff6739968528256 /fs/io_uring.c
parentd475a9a6226c86b7febe3863b900b820a0e6b71c (diff)
downloadlwn-d9f9d2842c9156470b3f1d3dafe5684a3c036366.tar.gz
lwn-d9f9d2842c9156470b3f1d3dafe5684a3c036366.zip
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 <asml.silence@gmail.com> Link: https://lore.kernel.org/r/ebd4e397a9c26d96c99b24447acc309741041a83.1632516769.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io_uring.c')
-rw-r--r--fs/io_uring.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index d4f8abb451c4..bbb2a262c272 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);