diff --git a/[refs] b/[refs] index 36d0f942ec40..02ae8fca57df 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: abcd08a6f564171ffa05bc77d1c2ba4cfa949653 +refs/heads/master: 1f99a283dc13b167b93b2e453a30782955f165c2 diff --git a/trunk/mm/slub.c b/trunk/mm/slub.c index 1832ae1ea536..5d425d7116e8 100644 --- a/trunk/mm/slub.c +++ b/trunk/mm/slub.c @@ -2199,9 +2199,8 @@ EXPORT_SYMBOL(kmem_cache_shrink); */ void *krealloc(const void *p, size_t new_size, gfp_t flags) { - struct kmem_cache *new_cache; void *ret; - struct page *page; + size_t ks; if (unlikely(!p)) return kmalloc(new_size, flags); @@ -2211,19 +2210,13 @@ void *krealloc(const void *p, size_t new_size, gfp_t flags) return NULL; } - page = virt_to_head_page(p); - - new_cache = get_slab(new_size, flags); - - /* - * If new size fits in the current cache, bail out. - */ - if (likely(page->slab == new_cache)) + ks = ksize(p); + if (ks >= new_size) return (void *)p; ret = kmalloc(new_size, flags); if (ret) { - memcpy(ret, p, min(new_size, ksize(p))); + memcpy(ret, p, min(new_size, ks)); kfree(p); } return ret;