Traverse backward through @reqs in struct io_submit_state, so it's possible to remove cur_req from it and easier to handle in general. Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> --- fs/io_uring.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index 82df6171baae..744e8a90b543 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -206,7 +206,6 @@ struct io_submit_state { */ void *reqs[IO_IOPOLL_BATCH]; unsigned int free_reqs; - unsigned int cur_req; /* * File reference cache @@ -839,9 +838,7 @@ static void io_init_submit_state(struct io_ring_ctx *ctx) struct io_submit_state *state = &ctx->submit_state; state->mm = (ctx->flags & IORING_SETUP_SQPOLL) ? NULL : ctx->sqo_mm; - state->free_reqs = 0; - state->cur_req = 0; } static void io_clear_submit_state(struct io_ring_ctx *ctx) @@ -849,8 +846,7 @@ static void io_clear_submit_state(struct io_ring_ctx *ctx) struct io_submit_state *state = &ctx->submit_state; if (state->free_reqs) - kmem_cache_free_bulk(req_cachep, state->free_reqs, - &state->reqs[state->cur_req]); + kmem_cache_free_bulk(req_cachep, state->free_reqs, state->reqs); } static inline bool __req_need_defer(struct io_kiocb *req) @@ -1167,12 +1163,10 @@ static struct io_kiocb *io_get_req(struct io_ring_ctx *ctx) ret = 1; } state->free_reqs = ret - 1; - state->cur_req = 1; - req = state->reqs[0]; + req = state->reqs[ret - 1]; } else { - req = state->reqs[state->cur_req]; state->free_reqs--; - state->cur_req++; + req = state->reqs[state->free_reqs]; } got_it: -- 2.24.0