Commit d81499bf authored by Pavel Begunkov's avatar Pavel Begunkov Committed by Jens Axboe

io_uring: inline linked part of io_req_find_next

Inline part of __io_req_find_next() that returns a request but doesn't
need io_disarm_next(). It's just two places, but makes links a bit
faster.
Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/4126d13f23d0e91b39b3558e16bd86cafa7fcef2.1631115443.git.asml.silence@gmail.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 6b639522
...@@ -2074,40 +2074,39 @@ static bool io_disarm_next(struct io_kiocb *req) ...@@ -2074,40 +2074,39 @@ static bool io_disarm_next(struct io_kiocb *req)
return posted; return posted;
} }
static struct io_kiocb *__io_req_find_next(struct io_kiocb *req) static void __io_req_find_next_prep(struct io_kiocb *req)
{
struct io_ring_ctx *ctx = req->ctx;
bool posted;
spin_lock(&ctx->completion_lock);
posted = io_disarm_next(req);
if (posted)
io_commit_cqring(req->ctx);
spin_unlock(&ctx->completion_lock);
if (posted)
io_cqring_ev_posted(ctx);
}
static inline struct io_kiocb *io_req_find_next(struct io_kiocb *req)
{ {
struct io_kiocb *nxt; struct io_kiocb *nxt;
if (likely(!(req->flags & (REQ_F_LINK|REQ_F_HARDLINK))))
return NULL;
/* /*
* If LINK is set, we have dependent requests in this chain. If we * If LINK is set, we have dependent requests in this chain. If we
* didn't fail this request, queue the first one up, moving any other * didn't fail this request, queue the first one up, moving any other
* dependencies to the next request. In case of failure, fail the rest * dependencies to the next request. In case of failure, fail the rest
* of the chain. * of the chain.
*/ */
if (req->flags & IO_DISARM_MASK) { if (unlikely(req->flags & IO_DISARM_MASK))
struct io_ring_ctx *ctx = req->ctx; __io_req_find_next_prep(req);
bool posted;
spin_lock(&ctx->completion_lock);
posted = io_disarm_next(req);
if (posted)
io_commit_cqring(req->ctx);
spin_unlock(&ctx->completion_lock);
if (posted)
io_cqring_ev_posted(ctx);
}
nxt = req->link; nxt = req->link;
req->link = NULL; req->link = NULL;
return nxt; return nxt;
} }
static inline struct io_kiocb *io_req_find_next(struct io_kiocb *req)
{
if (likely(!(req->flags & (REQ_F_LINK|REQ_F_HARDLINK))))
return NULL;
return __io_req_find_next(req);
}
static void ctx_flush_and_put(struct io_ring_ctx *ctx, bool *locked) static void ctx_flush_and_put(struct io_ring_ctx *ctx, bool *locked)
{ {
if (!ctx) if (!ctx)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment