c->page = page;
 
 check_new_page:
-       if (likely(!kmem_cache_debug(s) && pfmemalloc_match(page, gfpflags)))
-               goto load_freelist;
 
-       /* Only entered in the debug case */
-       if (kmem_cache_debug(s) &&
-                       !alloc_debug_processing(s, page, freelist, addr))
-               goto new_slab;  /* Slab failed checks. Next slab needed */
+       if (kmem_cache_debug(s)) {
+               if (!alloc_debug_processing(s, page, freelist, addr))
+                       /* Slab failed checks. Next slab needed */
+                       goto new_slab;
+               else
+                       /*
+                        * For debug case, we don't load freelist so that all
+                        * allocations go through alloc_debug_processing()
+                        */
+                       goto return_single;
+       }
+
+       if (unlikely(!pfmemalloc_match(page, gfpflags)))
+               /*
+                * For !pfmemalloc_match() case we don't load freelist so that
+                * we don't make further mismatched allocations easier.
+                */
+               goto return_single;
+
+       goto load_freelist;
+
+return_single:
 
        deactivate_slab(s, page, get_freepointer(s, freelist), c);
        return freelist;