Commit d24ac77f authored by Joonsoo Kim's avatar Joonsoo Kim Committed by Pekka Enberg
Browse files

slub: use __cmpxchg_double_slab() at interrupt disabled place



get_freelist(), unfreeze_partials() are only called with interrupt disabled,
so __cmpxchg_double_slab() is suitable.

Acked-by: default avatarChristoph Lameter <cl@linux.com>
Signed-off-by: default avatarJoonsoo Kim <js1304@gmail.com>
Signed-off-by: default avatarPekka Enberg <penberg@kernel.org>
parent e7b691b0
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -1872,7 +1872,11 @@ redo:
	}
}

/* Unfreeze all the cpu partial slabs */
/*
 * Unfreeze all the cpu partial slabs.
 *
 * This function must be called with interrupt disabled.
 */
static void unfreeze_partials(struct kmem_cache *s)
{
	struct kmem_cache_node *n = NULL;
@@ -1928,7 +1932,7 @@ static void unfreeze_partials(struct kmem_cache *s)
				l = m;
			}

		} while (!cmpxchg_double_slab(s, page,
		} while (!__cmpxchg_double_slab(s, page,
				old.freelist, old.counters,
				new.freelist, new.counters,
				"unfreezing slab"));
@@ -2165,6 +2169,8 @@ static inline void *new_slab_objects(struct kmem_cache *s, gfp_t flags,
 * The page is still frozen if the return value is not NULL.
 *
 * If this function returns NULL then the page has been unfrozen.
 *
 * This function must be called with interrupt disabled.
 */
static inline void *get_freelist(struct kmem_cache *s, struct page *page)
{
@@ -2182,7 +2188,7 @@ static inline void *get_freelist(struct kmem_cache *s, struct page *page)
		new.inuse = page->objects;
		new.frozen = freelist != NULL;

	} while (!cmpxchg_double_slab(s, page,
	} while (!__cmpxchg_double_slab(s, page,
		freelist, counters,
		NULL, new.counters,
		"get_freelist"));