Messages in this thread Patch in this message |  | | Date | Wed, 21 Feb 2007 10:06:20 +0200 (EET) | From | Pekka J Enberg <> | Subject | [PATCH 1/3] slab: introduce krealloc |
| |
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 * - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |