Skip to contentSkip to conversation

Patch "memcg: prevent memcg caches to be both OFF_SLAB & OBJFREELIST_SLAB" has been added to the 4.8-stable tree

PATCH [email protected] 1 participant 1 message Nov 17, 2016

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

memcg: prevent memcg caches to be both OFF_SLAB & OBJFREELIST_SLAB

to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
memcg-prevent-memcg-caches-to-be-both-off_slab-objfreelist_slab.patch
and it can be found in the queue-4.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From f773e36de3d77c4000ca914c9d146f55f2fd51e8 Mon Sep 17 00:00:00 2001

From: Greg Thelen <[email protected]>
Date: Thu, 10 Nov 2016 10:46:41 -0800
Subject: memcg: prevent memcg caches to be both OFF_SLAB & OBJFREELIST_SLAB

From: Greg Thelen <[email protected]>

commit f773e36de3d77c4000ca914c9d146f55f2fd51e8 upstream.

While testing OBJFREELIST_SLAB integration with pagealloc, we found a bug where kmem_cache(sys) would be created with both CFLGS_OFF_SLAB & CFLGS_OBJFREELIST_SLAB. When it happened, critical allocations needed for loading drivers or creating new caches will fail.

The original kmem_cache is created early making OFF_SLAB not possible. When kmem_cache(sys) is created, OFF_SLAB is possible and if pagealloc is enabled it will try to enable it first under certain conditions. Given kmem_cache(sys) reuses the original flag, you can have both flags at the same time resulting in allocation failures and odd behaviors.

This fix discards allocator specific flags from memcg before calling create_cache.

The bug exists since 4.6-rc1 and affects testing debug pagealloc configurations.

Fixes b03a017bebc4 ("mm/slab: introduce new slab management type, OBJFREELIST_SLAB")
Cc Pekka Enberg <[email protected]>
Cc David Rientjes <[email protected]>
Cc Joonsoo Kim <[email protected]>
Cc Vladimir Davydov <[email protected]>
Cc Michal Hocko <[email protected]>
Cc Johannes Weiner <[email protected]>
---
 mm/slab_common.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
mm/slab_common.c +2 -2
@@ -533,8 +533,8 @@ void memcg_create_kmem_cache(struct mem_
 
 	s = create_cache(cache_name, root_cache->object_size,
 			 root_cache->size, root_cache->align,
-			 root_cache->flags, root_cache->ctor,
-			 memcg, root_cache);
+			 root_cache->flags & CACHE_CREATE_MASK,
+			 root_cache->ctor, memcg, root_cache);
 	/*
 	 * If we could not create a memcg cache, do not complain, because
 	 * that's not critical at all as we can always proceed with the root

Patches currently in stable-queue which might be from [email protected] are

queue-4.8/memcg-prevent-memcg-caches-to-be-both-off_slab-objfreelist_slab.patch