]> Pileus Git - ~andy/linux/blobdiff - mm/util.c
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
[~andy/linux] / mm / util.c
index 8c7265afa29f2109b884907daa050b79f0b25f8b..dc3036cdcc6a60ac4e8bea6521279b2cff687bcb 100644 (file)
--- a/mm/util.c
+++ b/mm/util.c
@@ -105,6 +105,25 @@ void *memdup_user(const void __user *src, size_t len)
 }
 EXPORT_SYMBOL(memdup_user);
 
+static __always_inline void *__do_krealloc(const void *p, size_t new_size,
+                                          gfp_t flags)
+{
+       void *ret;
+       size_t ks = 0;
+
+       if (p)
+               ks = ksize(p);
+
+       if (ks >= new_size)
+               return (void *)p;
+
+       ret = kmalloc_track_caller(new_size, flags);
+       if (ret && p)
+               memcpy(ret, p, ks);
+
+       return ret;
+}
+
 /**
  * __krealloc - like krealloc() but don't free @p.
  * @p: object to reallocate memory for.
@@ -117,23 +136,11 @@ EXPORT_SYMBOL(memdup_user);
  */
 void *__krealloc(const void *p, size_t new_size, gfp_t flags)
 {
-       void *ret;
-       size_t ks = 0;
-
        if (unlikely(!new_size))
                return ZERO_SIZE_PTR;
 
-       if (p)
-               ks = ksize(p);
+       return __do_krealloc(p, new_size, flags);
 
-       if (ks >= new_size)
-               return (void *)p;
-
-       ret = kmalloc_track_caller(new_size, flags);
-       if (ret && p)
-               memcpy(ret, p, ks);
-
-       return ret;
 }
 EXPORT_SYMBOL(__krealloc);
 
@@ -157,7 +164,7 @@ void *krealloc(const void *p, size_t new_size, gfp_t flags)
                return ZERO_SIZE_PTR;
        }
 
-       ret = __krealloc(p, new_size, flags);
+       ret = __do_krealloc(p, new_size, flags);
        if (ret && p != ret)
                kfree(p);