mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
objpool: fix the overestimation of object pooling metadata size
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: b4edb8d2d4 ("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>
This commit is contained in:
parent
b24335521d
commit
5ed4b6b37c
1 changed files with 1 additions and 1 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue