slab: fix calculate_slab_order() for SLAB_RECLAIM_ACCOUNT
authorLinus Torvalds <torvalds@g5.osdl.org>
Wed, 8 Mar 2006 18:33:05 +0000 (10:33 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 8 Mar 2006 18:33:05 +0000 (10:33 -0800)
Instead of having a hard-to-read and confusing conditional in the
caller, just make the slab order calculation handle this special case,
since it's simple and obvious there.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
mm/slab.c

index f2e92dc1c9ce3d1fe1ca8cdfe685684f5bc1005d..6ad6bd5a0b3ec929c0f7783332e5781ec6f147dd 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -1647,6 +1647,14 @@ static inline size_t calculate_slab_order(struct kmem_cache *cachep,
                cachep->gfporder = gfporder;
                left_over = remainder;
 
+               /*
+                * A VFS-reclaimable slab tends to have most allocations
+                * as GFP_NOFS and we really don't want to have to be allocating
+                * higher-order pages when we are unable to shrink dcache.
+                */
+               if (flags & SLAB_RECLAIM_ACCOUNT)
+                       break;
+
                /*
                 * Large number of objects is good, but very large slabs are
                 * currently bad for the gfp()s.
@@ -1869,17 +1877,7 @@ kmem_cache_create (const char *name, size_t size, size_t align,
 
        size = ALIGN(size, align);
 
-       if ((flags & SLAB_RECLAIM_ACCOUNT) && size <= PAGE_SIZE) {
-               /*
-                * A VFS-reclaimable slab tends to have most allocations
-                * as GFP_NOFS and we really don't want to have to be allocating
-                * higher-order pages when we are unable to shrink dcache.
-                */
-               cachep->gfporder = 0;
-               cache_estimate(cachep->gfporder, size, align, flags,
-                              &left_over, &cachep->num);
-       } else
-               left_over = calculate_slab_order(cachep, size, align, flags);
+       left_over = calculate_slab_order(cachep, size, align, flags);
 
        if (!cachep->num) {
                printk("kmem_cache_create: couldn't create cache %s.\n", name);