Thread (3 messages) 3 messages, 3 authors, 2013-02-13

Re: [PATCH] memcg: fix kmemcg registration for late caches

From: Kamezawa Hiroyuki <hidden>
Date: 2013-02-13 10:00:21
Also in: linux-mm

(2013/02/12 1:39), Glauber Costa wrote:
The designed workflow for the caches in kmemcg is: register it with
memcg_register_cache() if kmemcg is already available or later on when a
new kmemcg appears at memcg_update_cache_sizes() which will handle all
caches in the system. The caches created at boot time will be handled by
the later, and the memcg-caches as well as any system caches that are
registered later on by the former.

There is a bug, however, in memcg_register_cache: we correctly set up
the array size, but do not mark the cache as a root cache. This means
that allocations for any cache appearing late in the game will see
memcg->memcg_params->is_root_cache == false, and in particular, trigger
VM_BUG_ON(!cachep->memcg_params->is_root_cache) in
__memcg_kmem_cache_get.

The obvious fix is to include the missing assignment.

Signed-off-by: Glauber Costa <redacted>
Acked-by: KAMEZAWA Hiroyuki <redacted>
quoted hunk ↗ jump to hunk
---
  mm/memcontrol.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 03ebf68..d4e83d0 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -3147,7 +3147,9 @@ int memcg_register_cache(struct mem_cgroup *memcg, struct kmem_cache *s,
  	if (memcg) {
  		s->memcg_params->memcg = memcg;
  		s->memcg_params->root_cache = root_cache;
-	}
+	} else
+		s->memcg_params->is_root_cache = true;
+
  	return 0;
  }
  
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help