Commit 63de899c authored by Pavel Begunkov's avatar Pavel Begunkov Committed by Jens Axboe
Browse files

io_uring: count allocated requests



Keep track of the number requests a ring currently has allocated (and
not freed), it'll be needed in the next patch.

Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/c8f8308294dc2a1cb8925d984d937d4fc14ab5d4.1746788718.git.asml.silence@gmail.com


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent b0c8a640
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -435,6 +435,7 @@ struct io_ring_ctx {

	/* protected by ->completion_lock */
	unsigned			evfd_last_cq_tail;
	unsigned			nr_req_allocated;

	/*
	 * Protection for resize vs mmap races - both the mmap and resize
+8 −1
Original line number Diff line number Diff line
@@ -957,6 +957,8 @@ __cold bool __io_alloc_req_refill(struct io_ring_ctx *ctx)
	}

	percpu_ref_get_many(&ctx->refs, ret);
	ctx->nr_req_allocated += ret;

	while (ret--) {
		struct io_kiocb *req = reqs[ret];

@@ -2694,8 +2696,10 @@ static void io_req_caches_free(struct io_ring_ctx *ctx)
		kmem_cache_free(req_cachep, req);
		nr++;
	}
	if (nr)
	if (nr) {
		ctx->nr_req_allocated -= nr;
		percpu_ref_put_many(&ctx->refs, nr);
	}
	mutex_unlock(&ctx->uring_lock);
}

@@ -2732,6 +2736,9 @@ static __cold void io_ring_ctx_free(struct io_ring_ctx *ctx)
	percpu_ref_exit(&ctx->refs);
	free_uid(ctx->user);
	io_req_caches_free(ctx);

	WARN_ON_ONCE(ctx->nr_req_allocated);

	if (ctx->hash_map)
		io_wq_put_hash(ctx->hash_map);
	io_napi_free(ctx);