io_uring/rsrc: get rid of io_rsrc_node allocation cache
authorJens Axboe <axboe@kernel.dk>
Sat, 26 Oct 2024 12:43:44 +0000 (06:43 -0600)
committerJens Axboe <axboe@kernel.dk>
Sat, 2 Nov 2024 21:44:30 +0000 (15:44 -0600)
It's not going to be needed in the fast path going forward, so kill it
off.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/io_uring_types.h
io_uring/io_uring.c
io_uring/rsrc.c

index 42c5f2c992c43ec6b502c67f466be387adc6cc05..696f2a05a98b26bb6f03defcce7ca8164229b481 100644 (file)
@@ -370,9 +370,6 @@ struct io_ring_ctx {
        struct io_rsrc_data             *file_data;
        struct io_rsrc_data             *buf_data;
 
-       /* protected by ->uring_lock */
-       struct io_alloc_cache           rsrc_node_cache;
-
        u32                     pers_next;
        struct xarray           personalities;
 
index 0876aa74c73907de2e964a23bfd9b6c9006eac5f..094788cca47fd3bcb5e476319780ad53095b3fa9 100644 (file)
@@ -312,9 +312,7 @@ static __cold struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
        INIT_LIST_HEAD(&ctx->sqd_list);
        INIT_LIST_HEAD(&ctx->cq_overflow_list);
        INIT_LIST_HEAD(&ctx->io_buffers_cache);
-       ret = io_alloc_cache_init(&ctx->rsrc_node_cache, IO_NODE_ALLOC_CACHE_MAX,
-                           sizeof(struct io_rsrc_node));
-       ret |= io_alloc_cache_init(&ctx->apoll_cache, IO_POLL_ALLOC_CACHE_MAX,
+       ret = io_alloc_cache_init(&ctx->apoll_cache, IO_POLL_ALLOC_CACHE_MAX,
                            sizeof(struct async_poll));
        ret |= io_alloc_cache_init(&ctx->netmsg_cache, IO_ALLOC_CACHE_MAX,
                            sizeof(struct io_async_msghdr));
@@ -358,7 +356,6 @@ static __cold struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
 free_ref:
        percpu_ref_exit(&ctx->refs);
 err:
-       io_alloc_cache_free(&ctx->rsrc_node_cache, kfree);
        io_alloc_cache_free(&ctx->apoll_cache, kfree);
        io_alloc_cache_free(&ctx->netmsg_cache, io_netmsg_cache_free);
        io_alloc_cache_free(&ctx->rw_cache, io_rw_cache_free);
@@ -2740,7 +2737,6 @@ static __cold void io_ring_ctx_free(struct io_ring_ctx *ctx)
 
        WARN_ON_ONCE(!list_empty(&ctx->ltimeout_list));
 
-       io_alloc_cache_free(&ctx->rsrc_node_cache, kfree);
        if (ctx->mm_account) {
                mmdrop(ctx->mm_account);
                ctx->mm_account = NULL;
index 88d698efd75b3febd04fda6897bd731fd67c4e9a..8f8147dd714ce0cf0de7452b2e3b615a41a8698b 100644 (file)
@@ -13,7 +13,6 @@
 #include <uapi/linux/io_uring.h>
 
 #include "io_uring.h"
-#include "alloc_cache.h"
 #include "openclose.h"
 #include "rsrc.h"
 #include "memmap.h"
@@ -129,16 +128,12 @@ struct io_rsrc_node *io_rsrc_node_alloc(struct io_ring_ctx *ctx, int type)
 {
        struct io_rsrc_node *node;
 
-       node = io_alloc_cache_get(&ctx->rsrc_node_cache);
-       if (!node) {
-               node = kzalloc(sizeof(*node), GFP_KERNEL);
-               if (!node)
-                       return NULL;
+       node = kzalloc(sizeof(*node), GFP_KERNEL);
+       if (node) {
+               node->ctx = ctx;
+               node->refs = 1;
+               node->type = type;
        }
-
-       node->ctx = ctx;
-       node->refs = 1;
-       node->type = type;
        return node;
 }
 
@@ -487,8 +482,7 @@ void io_free_rsrc_node(struct io_rsrc_node *node)
                break;
        }
 
-       if (!io_alloc_cache_put(&ctx->rsrc_node_cache, node))
-               kfree(node);
+       kfree(node);
 }
 
 static void __io_sqe_files_unregister(struct io_ring_ctx *ctx)