All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] slab: introduce krealloc
@ 2007-02-21  8:06 Pekka J Enberg
  2007-02-21  9:24 ` Arjan van de Ven
  2007-02-21 17:53 ` Christoph Lameter
  0 siblings, 2 replies; 12+ messages in thread
From: Pekka J Enberg @ 2007-02-21  8:06 UTC (permalink / raw)
  To: akpm; +Cc: clameter, linux-kernel, jsipek, unionfs, bunk, hooanon05

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

Introduce krealloc() for reallocating memory while preserving contents.

Cc: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
---
 include/linux/slab.h |    1 +
 mm/util.c            |   34 ++++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+)

Index: 2.6/include/linux/slab.h
===================================================================
--- 2.6.orig/include/linux/slab.h	2007-02-21 09:05:08.000000000 +0200
+++ 2.6/include/linux/slab.h	2007-02-21 09:05:47.000000000 +0200
@@ -72,6 +72,7 @@
  */
 void *__kmalloc(size_t, gfp_t);
 void *__kzalloc(size_t, gfp_t);
+void *krealloc(const void *, size_t, gfp_t);
 void kfree(const void *);
 unsigned int ksize(const void *);
 
Index: 2.6/mm/util.c
===================================================================
--- 2.6.orig/mm/util.c	2007-02-21 09:05:49.000000000 +0200
+++ 2.6/mm/util.c	2007-02-21 09:34:32.000000000 +0200
@@ -18,6 +18,40 @@
 }
 EXPORT_SYMBOL(__kzalloc);
 
+/**
+ * krealloc - reallocate memory. The contents will remain unchanged.
+ *
+ * @p: object to reallocate memory for.
+ * @new_size: how many bytes of memory are required.
+ * @flags: the type of memory to allocate.
+ *
+ * The contents of the object pointed to are preserved up to the
+ * lesser of the new and old sizes.  If @p is %NULL, krealloc()
+ * behaves exactly like kmalloc().  If @size is 0 and @p is not a
+ * %NULL pointer, the object pointed to is freed.
+ */
+void *krealloc(const void *p, size_t new_size, gfp_t flags)
+{
+	void *ret;
+
+	if (unlikely(!p))
+		return kmalloc_track_caller(new_size, flags);
+
+	if (unlikely(!new_size)) {
+		kfree(p);
+		return NULL;
+	}
+
+	ret = kmalloc_track_caller(new_size, flags);
+	if (!ret)
+		return NULL;
+
+	memcpy(ret, p, min(new_size, ksize(p)));
+	kfree(p);
+	return ret;
+}
+EXPORT_SYMBOL(krealloc);
+
 /*
  * kstrdup - allocate space for and copy an existing string
  *

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2007-02-21 19:23 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-21  8:06 [PATCH 1/3] slab: introduce krealloc Pekka J Enberg
2007-02-21  9:24 ` Arjan van de Ven
2007-02-21  9:33   ` Pekka Enberg
2007-02-21  9:36     ` Arjan van de Ven
2007-02-21 17:51     ` Christoph Lameter
2007-02-21 17:53 ` Christoph Lameter
2007-02-21 18:21   ` Pekka Enberg
2007-02-21 18:27     ` Christoph Lameter
2007-02-21 18:37       ` Pekka Enberg
2007-02-21 18:48         ` Christoph Lameter
2007-02-21 19:19           ` Pekka Enberg
2007-02-21 19:22             ` Christoph Lameter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.