[PATCH] objpool: fix the overestimation of object pooling metadata size

zhouwenhao posted 1 patch 4 days, 16 hours ago
lib/objpool.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] objpool: fix the overestimation of object pooling metadata size
Posted by zhouwenhao 4 days, 16 hours ago
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.

Fixes: b4edb8d2d464 ("lib: objpool added: ring-array based lockless MPMC")

Signed-off-by: zhouwenhao <zhouwenhao7600@gmail.com>
---
 lib/objpool.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/objpool.c b/lib/objpool.c
index b998b720c732..d98fadf1de16 100644
--- a/lib/objpool.c
+++ b/lib/objpool.c
@@ -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;
-- 
2.25.1