]> err.no Git - linux-2.6/blobdiff - mm/slub.c
Print out statistics in relation to fragmentation avoidance to /proc/pagetypeinfo
[linux-2.6] / mm / slub.c
index 968ce3776e083f2b4651ad0efc6ccadd2a9ba772..a90c4ffc95765e3c16965473d3b51b262ea91f0b 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1055,6 +1055,9 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
        if (s->flags & SLAB_CACHE_DMA)
                flags |= SLUB_DMA;
 
+       if (s->flags & SLAB_RECLAIM_ACCOUNT)
+               flags |= __GFP_RECLAIMABLE;
+
        if (node == -1)
                page = alloc_pages(flags, s->order);
        else
@@ -1088,12 +1091,13 @@ static struct page *new_slab(struct kmem_cache *s, gfp_t flags, int node)
        void *last;
        void *p;
 
-       BUG_ON(flags & ~(GFP_DMA | __GFP_ZERO | GFP_LEVEL_MASK));
+       BUG_ON(flags & GFP_SLAB_BUG_MASK);
 
        if (flags & __GFP_WAIT)
                local_irq_enable();
 
-       page = allocate_slab(s, flags & GFP_LEVEL_MASK, node);
+       page = allocate_slab(s,
+               flags & (GFP_RECLAIM_MASK | GFP_CONSTRAINT_MASK), node);
        if (!page)
                goto out;