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 | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index 66742d5772fa..799e80e85027 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 @@ -850,7 +849,6 @@ static void io_init_submit_state(struct io_ring_ctx *ctx) struct io_submit_state *state = &ctx->submit_state; state->free_reqs = 0; - state->cur_req = 0; } static void io_clear_submit_state(struct io_ring_ctx *ctx) @@ -858,8 +856,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) @@ -1204,12 +1201,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