]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
objpool: fix the overestimation of object pooling metadata size
authorzhouwenhao <zhouwenhao7600@gmail.com>
Mon, 2 Feb 2026 13:28:46 +0000 (21:28 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 12 Feb 2026 23:45:57 +0000 (15:45 -0800)
objpool uses struct objpool_head to store metadata information, and its
cpu_slots member points to an array of pointers that store the addresses
of the percpu ring arrays.  However, the memory size allocated during the
initialization of cpu_slots is nr_cpu_ids * sizeof(struct objpool_slot).
On a 64-bit machine, the size of struct objpool_slot is 16 bytes, which is
twice the size of the actual pointer required, and the extra memory is
never be used, resulting in a waste of memory.  Therefore, the memory size
required for cpu_slots needs to be corrected.

Link: https://lkml.kernel.org/r/20260202132846.68257-1-zhouwenhao7600@gmail.com
Fixes: b4edb8d2d464 ("lib: objpool added: ring-array based lockless MPMC")
Signed-off-by: zhouwenhao <zhouwenhao7600@gmail.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Matt Wu <wuqiang.matt@bytedance.com>
Cc: wuqiang.matt <wuqiang.matt@bytedance.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/objpool.c

index b998b720c7329d2907005972aa77fb94e66bb430..d98fadf1de169fdbc0f3d5137a49537389adf119 100644 (file)
@@ -142,7 +142,7 @@ int objpool_init(struct objpool_head *pool, int nr_objs, int object_size,
        pool->gfp = gfp & ~__GFP_ZERO;
        pool->context = context;
        pool->release = release;
-       slot_size = nr_cpu_ids * sizeof(struct objpool_slot);
+       slot_size = nr_cpu_ids * sizeof(struct objpool_slot *);
        pool->cpu_slots = kzalloc(slot_size, pool->gfp);
        if (!pool->cpu_slots)
                return -ENOMEM;