diff options
-rw-r--r-- | mm/slab_common.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/mm/slab_common.c b/mm/slab_common.c index c29f03adca91..f9fb27b4c843 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c | |||
@@ -178,10 +178,13 @@ static int init_memcg_params(struct kmem_cache *s, | |||
178 | 178 | ||
179 | static void destroy_memcg_params(struct kmem_cache *s) | 179 | static void destroy_memcg_params(struct kmem_cache *s) |
180 | { | 180 | { |
181 | if (is_root_cache(s)) | 181 | if (is_root_cache(s)) { |
182 | kvfree(rcu_access_pointer(s->memcg_params.memcg_caches)); | 182 | kvfree(rcu_access_pointer(s->memcg_params.memcg_caches)); |
183 | else | 183 | } else { |
184 | mem_cgroup_put(s->memcg_params.memcg); | ||
185 | WRITE_ONCE(s->memcg_params.memcg, NULL); | ||
184 | percpu_ref_exit(&s->memcg_params.refcnt); | 186 | percpu_ref_exit(&s->memcg_params.refcnt); |
187 | } | ||
185 | } | 188 | } |
186 | 189 | ||
187 | static void free_memcg_params(struct rcu_head *rcu) | 190 | static void free_memcg_params(struct rcu_head *rcu) |
@@ -253,8 +256,6 @@ static void memcg_unlink_cache(struct kmem_cache *s) | |||
253 | } else { | 256 | } else { |
254 | list_del(&s->memcg_params.children_node); | 257 | list_del(&s->memcg_params.children_node); |
255 | list_del(&s->memcg_params.kmem_caches_node); | 258 | list_del(&s->memcg_params.kmem_caches_node); |
256 | mem_cgroup_put(s->memcg_params.memcg); | ||
257 | WRITE_ONCE(s->memcg_params.memcg, NULL); | ||
258 | } | 259 | } |
259 | } | 260 | } |
260 | #else | 261 | #else |