public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] slab: introduce kmem_cache_zalloc allocator
@ 2006-03-20 13:07 Pekka J Enberg
  2006-03-20 13:51 ` Eric Dumazet
                   ` (3 more replies)
  0 siblings, 4 replies; 18+ messages in thread
From: Pekka J Enberg @ 2006-03-20 13:07 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel

From: Pekka Enberg <penberg@cs.helsinki.fi>

This patch introduces a memory-zeroing variant of kmem_cache_alloc. The
allocator already exits in XFS and there are potential users for it so
this patch makes the allocator available for the general public.

Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>

---

 include/linux/slab.h |    2 ++
 mm/slab.c            |   17 +++++++++++++++++
 mm/slob.c            |   10 ++++++++++
 3 files changed, 29 insertions(+), 0 deletions(-)

7ebeed21971a6a24749a4966db1ccc69c6806e15
diff --git a/include/linux/slab.h b/include/linux/slab.h
index 8cf5293..b595c09 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -64,6 +64,7 @@ extern kmem_cache_t *kmem_cache_create(c
 extern int kmem_cache_destroy(kmem_cache_t *);
 extern int kmem_cache_shrink(kmem_cache_t *);
 extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t);
+extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t);
 extern void kmem_cache_free(kmem_cache_t *, void *);
 extern unsigned int kmem_cache_size(kmem_cache_t *);
 extern const char *kmem_cache_name(kmem_cache_t *);
@@ -155,6 +156,7 @@ struct kmem_cache *kmem_cache_create(con
 	void (*)(void *, struct kmem_cache *, unsigned long));
 int kmem_cache_destroy(struct kmem_cache *c);
 void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags);
+void *kmem_cache_zalloc(struct kmem_cache *, gfp_t);
 void kmem_cache_free(struct kmem_cache *c, void *b);
 const char *kmem_cache_name(struct kmem_cache *);
 void *kmalloc(size_t size, gfp_t flags);
diff --git a/mm/slab.c b/mm/slab.c
index d0bd7f0..5f3e14b 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3056,6 +3056,23 @@ void *kmem_cache_alloc(struct kmem_cache
 EXPORT_SYMBOL(kmem_cache_alloc);
 
 /**
+ * kmem_cache_alloc - Allocate an object. The memory is set to zero.
+ * @cache: The cache to allocate from.
+ * @flags: See kmalloc().
+ *
+ * Allocate an object from this cache and set the allocated memory to zero.
+ * The flags are only relevant if the cache has no available objects.
+ */
+void *kmem_cache_zalloc(struct kmem_cache *cache, gfp_t flags)
+{
+	void *ret = __cache_alloc(cache, flags, __builtin_return_address(0));
+	if (ret)
+		memset(ret, 0, obj_size(cache));
+	return ret;
+}
+EXPORT_SYMBOL(kmem_cache_zalloc);
+
+/**
  * kmem_ptr_validate - check if an untrusted pointer might
  *	be a slab entry.
  * @cachep: the cache we're checking against
diff --git a/mm/slob.c b/mm/slob.c
index a1f42bd..9bcc7e2 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -294,6 +294,16 @@ void *kmem_cache_alloc(struct kmem_cache
 }
 EXPORT_SYMBOL(kmem_cache_alloc);
 
+void *kmem_cache_zalloc(struct kmem_cache *c, gfp_t flags)
+{
+	void *ret = kmem_cache_alloc(c, flags);
+	if (ret)
+		memset(ret, 0, c->size);
+
+	return ret;
+}
+EXPORT_SYMBOL(kmem_cache_zalloc);
+
 void kmem_cache_free(struct kmem_cache *c, void *b)
 {
 	if (c->dtor)
-- 
1.2.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread
[parent not found: <5Ssjj-314-69@gated-at.bofh.it>]

end of thread, other threads:[~2006-03-21 18:37 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-20 13:07 [PATCH] slab: introduce kmem_cache_zalloc allocator Pekka J Enberg
2006-03-20 13:51 ` Eric Dumazet
2006-03-20 14:21   ` Pekka J Enberg
2006-03-20 16:05 ` Balbir Singh
2006-03-20 16:14   ` Pekka Enberg
2006-03-20 16:45     ` Balbir Singh
2006-03-21  7:13       ` Pekka J Enberg
2006-03-21 10:36 ` Andrew Morton
2006-03-21 11:03   ` Pekka J Enberg
2006-03-21 18:35     ` Manfred Spraul
2006-03-21 18:37       ` Pekka Enberg
2006-03-21 11:25 ` Andrew Morton
2006-03-21 11:50   ` Pekka J Enberg
2006-03-21 16:30   ` Pekka Enberg
     [not found] <5Ssjj-314-69@gated-at.bofh.it>
     [not found] ` <5Sv7o-7l5-23@gated-at.bofh.it>
     [not found]   ` <5Svh9-7xW-61@gated-at.bofh.it>
     [not found]     ` <5SvK8-88q-41@gated-at.bofh.it>
2006-03-20 19:07       ` Bodo Eggert
2006-03-21  3:25         ` Balbir Singh
2006-03-21 10:51           ` Bodo Eggert
2006-03-21 11:32             ` Pekka J Enberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox