diff --git a/[refs] b/[refs] index 2adcc455b7bd..1c95dcdb437c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9442e691e4aec85eba43ac60a3e77c77fd2e73a4 +refs/heads/master: 1a2f67b459bb7846d4a15924face63eb2683acc2 diff --git a/trunk/include/linux/string.h b/trunk/include/linux/string.h index e4c755860316..4f69ef9e6eb5 100644 --- a/trunk/include/linux/string.h +++ b/trunk/include/linux/string.h @@ -99,6 +99,7 @@ extern void * memchr(const void *,int,__kernel_size_t); #endif extern char *kstrdup(const char *s, gfp_t gfp); +extern void *kmemdup(const void *src, size_t len, gfp_t gfp); #ifdef __cplusplus } diff --git a/trunk/mm/util.c b/trunk/mm/util.c index 7368479220b3..e14fa84ef39a 100644 --- a/trunk/mm/util.c +++ b/trunk/mm/util.c @@ -40,6 +40,24 @@ char *kstrdup(const char *s, gfp_t gfp) } EXPORT_SYMBOL(kstrdup); +/** + * kmemdup - duplicate region of memory + * + * @src: memory region to duplicate + * @len: memory region length + * @gfp: GFP mask to use + */ +void *kmemdup(const void *src, size_t len, gfp_t gfp) +{ + void *p; + + p = ____kmalloc(len, gfp); + if (p) + memcpy(p, src, len); + return p; +} +EXPORT_SYMBOL(kmemdup); + /* * strndup_user - duplicate an existing string from user space *