Commit 76128331 authored by Alexei Starovoitov's avatar Alexei Starovoitov Committed by Vlastimil Babka
Browse files

slab: Reuse first bit for OBJEXTS_ALLOC_FAIL



Since the combination of valid upper bits in slab->obj_exts with
OBJEXTS_ALLOC_FAIL bit can never happen,
use OBJEXTS_ALLOC_FAIL == (1ull << 0) as a magic sentinel
instead of (1ull << 2) to free up bit 2.

Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarShakeel Butt <shakeel.butt@linux.dev>
Reviewed-by: default avatarHarry Yoo <harry.yoo@oracle.com>
Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
parent 83382af9
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -341,17 +341,23 @@ enum page_memcg_data_flags {
	__NR_MEMCG_DATA_FLAGS  = (1UL << 2),
};

#define __OBJEXTS_ALLOC_FAIL	MEMCG_DATA_OBJEXTS
#define __FIRST_OBJEXT_FLAG	__NR_MEMCG_DATA_FLAGS

#else /* CONFIG_MEMCG */

#define __OBJEXTS_ALLOC_FAIL	(1UL << 0)
#define __FIRST_OBJEXT_FLAG	(1UL << 0)

#endif /* CONFIG_MEMCG */

enum objext_flags {
	/* slabobj_ext vector failed to allocate */
	OBJEXTS_ALLOC_FAIL = __FIRST_OBJEXT_FLAG,
	/*
	 * Use bit 0 with zero other bits to signal that slabobj_ext vector
	 * failed to allocate. The same bit 0 with valid upper bits means
	 * MEMCG_DATA_OBJEXTS.
	 */
	OBJEXTS_ALLOC_FAIL = __OBJEXTS_ALLOC_FAIL,
	/* the next bit after the last actual flag */
	__NR_OBJEXTS_FLAGS  = (__FIRST_OBJEXT_FLAG << 1),
};
+1 −1
Original line number Diff line number Diff line
@@ -2046,7 +2046,7 @@ static inline void handle_failed_objexts_alloc(unsigned long obj_exts,
	 * objects with no tag reference. Mark all references in this
	 * vector as empty to avoid warnings later on.
	 */
	if (obj_exts & OBJEXTS_ALLOC_FAIL) {
	if (obj_exts == OBJEXTS_ALLOC_FAIL) {
		unsigned int i;

		for (i = 0; i < objects; i++)