Messages in this thread Patch in this message | | | Date | Fri, 10 Feb 2012 16:07:57 -0600 (CST) | From | Christoph Lameter <> | Subject | Re: [PATCH 02/15] mm: sl[au]b: Add knowledge of PFMEMALLOC reserve pages |
| |
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@linux.com>
--- 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 {
| |