io_uring: optimise io_rw_reissue()
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 19 Jan 2021 13:32:34 +0000 (13:32 +0000)
committerJens Axboe <axboe@kernel.dk>
Mon, 1 Feb 2021 17:02:42 +0000 (10:02 -0700)
The hot path is IO completing on the first try. Reshuffle io_rw_reissue() so
it's checked first.

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

index 98789fe..4a8900d 100644 (file)
@@ -2738,12 +2738,13 @@ end_req:
 static bool io_rw_reissue(struct io_kiocb *req, long res)
 {
 #ifdef CONFIG_BLOCK
-       umode_t mode = file_inode(req->file)->i_mode;
+       umode_t mode;
        int ret;
 
-       if (!S_ISBLK(mode) && !S_ISREG(mode))
+       if (res != -EAGAIN && res != -EOPNOTSUPP)
                return false;
-       if ((res != -EAGAIN && res != -EOPNOTSUPP) || io_wq_current_is_worker())
+       mode = file_inode(req->file)->i_mode;
+       if ((!S_ISBLK(mode) && !S_ISREG(mode)) || io_wq_current_is_worker())
                return false;
 
        lockdep_assert_held(&req->ctx->uring_lock);