io_uring: refill request cache in memory order
authorJens Axboe <axboe@kernel.dk>
Tue, 26 Mar 2024 01:07:22 +0000 (19:07 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 15 Apr 2024 14:10:25 +0000 (08:10 -0600)
The allocator will generally return memory in order, but
__io_alloc_req_refill() then adds them to a stack and we'll extract them
in the opposite order. This obviously isn't a huge deal, but:

1) it makes debugging easier when they are in order
2) keeping them in-order is the right thing to do
3) reduces the code for adding them to the stack

Just add them in reverse to the stack.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c

index 8e53b93..8489f18 100644 (file)
@@ -1039,7 +1039,7 @@ __cold bool __io_alloc_req_refill(struct io_ring_ctx *ctx)
 {
        gfp_t gfp = GFP_KERNEL | __GFP_NOWARN;
        void *reqs[IO_REQ_ALLOC_BATCH];
-       int ret, i;
+       int ret;
 
        /*
         * If we have more than a batch's worth of requests in our IRQ side
@@ -1066,8 +1066,8 @@ __cold bool __io_alloc_req_refill(struct io_ring_ctx *ctx)
        }
 
        percpu_ref_get_many(&ctx->refs, ret);
-       for (i = 0; i < ret; i++) {
-               struct io_kiocb *req = reqs[i];
+       while (ret--) {
+               struct io_kiocb *req = reqs[ret];
 
                io_preinit_req(req, ctx);
                io_req_add_to_cache(req, ctx);