From ba88ff112bdfde8103a8143f867bcdc46bc0e50f Mon Sep 17 00:00:00 2001 From: Pavel Begunkov Date: Wed, 10 Feb 2021 00:03:11 +0000 Subject: [PATCH] io_uring: remove ctx from comp_state completion state is closely bound to ctx, we don't need to store ctx inside as we always have it around to pass to flush. Signed-off-by: Pavel Begunkov Signed-off-by: Jens Axboe --- fs/io_uring.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index 7430903..6e800f9 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -269,7 +269,6 @@ struct io_sq_data { struct io_comp_state { unsigned int nr; struct list_head list; - struct io_ring_ctx *ctx; }; struct io_submit_state { @@ -1924,10 +1923,9 @@ static inline void io_req_complete_nostate(struct io_kiocb *req, long res, io_put_req(req); } -static void io_submit_flush_completions(struct io_comp_state *cs) +static void io_submit_flush_completions(struct io_comp_state *cs, + struct io_ring_ctx *ctx) { - struct io_ring_ctx *ctx = cs->ctx; - spin_lock_irq(&ctx->completion_lock); while (!list_empty(&cs->list)) { struct io_kiocb *req; @@ -6520,7 +6518,7 @@ again: if (req->flags & REQ_F_COMPLETE_INLINE) { list_add_tail(&req->compl.list, &cs->list); if (++cs->nr >= 32) - io_submit_flush_completions(cs); + io_submit_flush_completions(cs, req->ctx); req = NULL; } else { req = io_put_req_find_next(req); @@ -6655,10 +6653,11 @@ static int io_submit_sqe(struct io_kiocb *req, const struct io_uring_sqe *sqe, /* * Batched submission is done, ensure local IO is flushed out. */ -static void io_submit_state_end(struct io_submit_state *state) +static void io_submit_state_end(struct io_submit_state *state, + struct io_ring_ctx *ctx) { if (!list_empty(&state->comp.list)) - io_submit_flush_completions(&state->comp); + io_submit_flush_completions(&state->comp, ctx); if (state->plug_started) blk_finish_plug(&state->plug); io_state_file_put(state); @@ -6670,12 +6669,11 @@ static void io_submit_state_end(struct io_submit_state *state) * Start submission side cache. */ static void io_submit_state_start(struct io_submit_state *state, - struct io_ring_ctx *ctx, unsigned int max_ios) + unsigned int max_ios) { state->plug_started = false; state->comp.nr = 0; INIT_LIST_HEAD(&state->comp.list); - state->comp.ctx = ctx; state->free_reqs = 0; state->file_refs = 0; state->ios_left = max_ios; @@ -6859,7 +6857,7 @@ static int io_submit_sqes(struct io_ring_ctx *ctx, unsigned int nr) percpu_counter_add(¤t->io_uring->inflight, nr); refcount_add(nr, ¤t->usage); - io_submit_state_start(&ctx->submit_state, ctx, nr); + io_submit_state_start(&ctx->submit_state, nr); link.head = NULL; for (i = 0; i < nr; i++) { @@ -6908,7 +6906,7 @@ fail_req: } if (link.head) io_queue_link_head(link.head, &ctx->submit_state.comp); - io_submit_state_end(&ctx->submit_state); + io_submit_state_end(&ctx->submit_state, ctx); /* Commit SQ ring head once we've consumed and submitted all SQEs */ io_commit_sqring(ctx); -- 2.7.4