Proposal for a patch for slub to move the pfmemalloc handling out of the fastpath by simply not assigning a per cpu slab when pfmemalloc processing is going on. Subject: [slub] Fix so that no mods are required for the fast path Remove the check for pfmemalloc from the alloc hotpath and put the logic after the election of a new per cpu slab. For a pfmemalloc page do not use the fast path but force use of the slow path (which is also used for the debug case). Signed-off-by: Christoph Lameter <cl@xxxxxxxxx> --- mm/slub.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c 2012-02-10 09:58:13.066125970 -0600 +++ linux-2.6/mm/slub.c 2012-02-10 10:06:07.114113000 -0600 @@ -2273,11 +2273,12 @@ new_slab: } } - if (likely(!kmem_cache_debug(s))) + if (likely(!kmem_cache_debug(s) && pfmemalloc_match(c, gfpflags))) goto load_freelist; + /* Only entered in the debug case */ - if (!alloc_debug_processing(s, c->page, object, addr)) + if (kmem_cache_debug(s) && !alloc_debug_processing(s, c->page, object, addr)) goto new_slab; /* Slab failed checks. Next slab needed */ c->freelist = get_freepointer(s, object); @@ -2327,8 +2328,7 @@ redo: barrier(); object = c->freelist; - if (unlikely(!object || !node_match(c, node) || - !pfmemalloc_match(c, gfpflags))) + if (unlikely(!object || !node_match(c, node))) object = __slab_alloc(s, gfpflags, node, addr, c); else { -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>