X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=mm%2Fslob.c;h=c56c5e57c19261b7ae26ff6468674cd618b8381b;hb=679299b32dbf9bac4bdaedc850fb95d0f81b4963;hp=08a9bd91a1aaf517f1b17ff688fa9f612273f873;hpb=ecefe4a1c3dcc802c23ef42de6caa08730cfc1a1;p=linux-block.git diff --git a/mm/slob.c b/mm/slob.c index 08a9bd91a1aa..c56c5e57c192 100644 --- a/mm/slob.c +++ b/mm/slob.c @@ -330,7 +330,7 @@ static void *slob_alloc(size_t size, gfp_t gfp, int align, int node) /* Not enough space: must allocate a new page */ if (!b) { - b = slob_new_page(gfp, 0, node); + b = slob_new_page(gfp & ~__GFP_ZERO, 0, node); if (!b) return 0; sp = (struct slob_page *)virt_to_page(b); @@ -398,6 +398,10 @@ static void slob_free(void *block, int size) sp->units += units; if (b < sp->free) { + if (b + units == sp->free) { + units += slob_units(sp->free); + sp->free = slob_next(sp->free); + } set_slob(b, units, sp->free); sp->free = b; } else { @@ -495,6 +499,7 @@ size_t ksize(const void *block) else return sp->page.private; } +EXPORT_SYMBOL(ksize); struct kmem_cache { unsigned int size, align;