diff options
-rw-r--r-- | mm/slub.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -1965,8 +1965,10 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, | |||
1965 | if (!page) | 1965 | if (!page) |
1966 | goto new_slab; | 1966 | goto new_slab; |
1967 | 1967 | ||
1968 | if (unlikely(!node_match(c, node))) | 1968 | if (unlikely(!node_match(c, node))) { |
1969 | goto another_slab; | 1969 | deactivate_slab(s, c); |
1970 | goto new_slab; | ||
1971 | } | ||
1970 | 1972 | ||
1971 | stat(s, ALLOC_SLOWPATH); | 1973 | stat(s, ALLOC_SLOWPATH); |
1972 | 1974 | ||
@@ -1986,7 +1988,7 @@ load_freelist: | |||
1986 | VM_BUG_ON(!page->frozen); | 1988 | VM_BUG_ON(!page->frozen); |
1987 | 1989 | ||
1988 | if (unlikely(!object)) | 1990 | if (unlikely(!object)) |
1989 | goto another_slab; | 1991 | goto new_slab; |
1990 | 1992 | ||
1991 | stat(s, ALLOC_REFILL); | 1993 | stat(s, ALLOC_REFILL); |
1992 | 1994 | ||
@@ -1995,9 +1997,6 @@ load_freelist: | |||
1995 | local_irq_restore(flags); | 1997 | local_irq_restore(flags); |
1996 | return object; | 1998 | return object; |
1997 | 1999 | ||
1998 | another_slab: | ||
1999 | deactivate_slab(s, c); | ||
2000 | |||
2001 | new_slab: | 2000 | new_slab: |
2002 | page = get_partial(s, gfpflags, node); | 2001 | page = get_partial(s, gfpflags, node); |
2003 | if (page) { | 2002 | if (page) { |