io_uring: inline ->registered_rings
authorPavel Begunkov <asml.silence@gmail.com>
Wed, 15 Jun 2022 16:33:53 +0000 (17:33 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 25 Jul 2022 00:39:13 +0000 (18:39 -0600)
There can be only 16 registered rings, no need to allocate an array for
them separately but store it in tctx.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/495f0b953c87994dd9e13de2134019054fa5830d.1655310733.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/tctx.c
io_uring/tctx.h

index 3f7e9fe..5a5d4f9 100644 (file)
@@ -53,7 +53,6 @@ void __io_uring_free(struct task_struct *tsk)
        WARN_ON_ONCE(tctx->io_wq);
        WARN_ON_ONCE(tctx->cached_refs);
 
-       kfree(tctx->registered_rings);
        percpu_counter_destroy(&tctx->inflight);
        kfree(tctx);
        tsk->io_uring = NULL;
@@ -69,16 +68,8 @@ __cold int io_uring_alloc_task_context(struct task_struct *task,
        if (unlikely(!tctx))
                return -ENOMEM;
 
-       tctx->registered_rings = kcalloc(IO_RINGFD_REG_MAX,
-                                        sizeof(struct file *), GFP_KERNEL);
-       if (unlikely(!tctx->registered_rings)) {
-               kfree(tctx);
-               return -ENOMEM;
-       }
-
        ret = percpu_counter_init(&tctx->inflight, 0, GFP_KERNEL);
        if (unlikely(ret)) {
-               kfree(tctx->registered_rings);
                kfree(tctx);
                return ret;
        }
@@ -87,7 +78,6 @@ __cold int io_uring_alloc_task_context(struct task_struct *task,
        if (IS_ERR(tctx->io_wq)) {
                ret = PTR_ERR(tctx->io_wq);
                percpu_counter_destroy(&tctx->inflight);
-               kfree(tctx->registered_rings);
                kfree(tctx);
                return ret;
        }
index f4964e4..7684713 100644 (file)
@@ -20,8 +20,9 @@ struct io_uring_task {
        struct io_wq_work_list  task_list;
        struct io_wq_work_list  prio_task_list;
        struct callback_head    task_work;
-       struct file             **registered_rings;
        bool                    task_running;
+
+       struct file             *registered_rings[IO_RINGFD_REG_MAX];
 };
 
 struct io_tctx_node {