diff --git a/mm/slub.c b/mm/slub.c
index 9f7bb93e17ecd00f38ad85d9b5a8f3a6c1b50de8..9ee6f515736d188d2935903ec5acfdcaba6d0579 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1881,6 +1881,8 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
 
 	page->inuse++;
 	page->freelist = get_freepointer(s, object);
+	deactivate_slab(s, c);
+	c->page = NULL;
 	c->node = NUMA_NO_NODE;
 	goto unlock_out;
 }
@@ -2112,7 +2114,7 @@ static __always_inline void slab_free(struct kmem_cache *s,
 	tid = c->tid;
 	barrier();
 
-	if (likely(page == c->page && c->node != NUMA_NO_NODE)) {
+	if (likely(page == c->page)) {
 		set_freepointer(s, object, c->freelist);
 
 		if (unlikely(!this_cpu_cmpxchg_double(