X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Fslub.c;h=b9f37cb0f2e6a61d80eeca2b3c9dc3799e863bce;hb=cf03613e9662c28372b8c83538fb402df37c53f5;hp=84f59fde1a10d83a78c4cfca6d08f5705da5021e;hpb=45ff993d2b0b4c07038457cdf07ecf648abd3d78;p=linux-2.6 diff --git a/mm/slub.c b/mm/slub.c index 84f59fde1a..b9f37cb0f2 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1080,7 +1080,6 @@ static struct page *new_slab(struct kmem_cache *s, gfp_t flags, int node) struct page *page; struct kmem_cache_node *n; void *start; - void *end; void *last; void *p; @@ -1101,7 +1100,6 @@ static struct page *new_slab(struct kmem_cache *s, gfp_t flags, int node) SetSlabDebug(page); start = page_address(page); - end = start + s->objects * s->size; if (unlikely(s->flags & SLAB_POISON)) memset(start, POISON_INUSE, PAGE_SIZE << s->order); @@ -2560,8 +2558,12 @@ size_t ksize(const void *object) if (unlikely(object == ZERO_SIZE_PTR)) return 0; - page = get_object_page(object); + page = virt_to_head_page(object); BUG_ON(!page); + + if (unlikely(!PageSlab(page))) + return PAGE_SIZE << compound_order(page); + s = page->slab; BUG_ON(!s);