> +static void memcg_vmpressure_shrink_dead(void) > +{ > + struct memcg_cache_params *params, *tmp; > + struct kmem_cache *cachep; > + struct mem_cgroup *memcg; > + > + mutex_lock(&dangling_memcgs_mutex); > + list_for_each_entry(memcg, &dangling_memcgs, dead) { > + > + mem_cgroup_get(memcg); This mem_cgroup_get() looks redundant to me, because you're iterating the list and never release dangling_memcgs_mutex in the middle. > + mutex_lock(&memcg->slab_caches_mutex); > + /* The element may go away as an indirect result of shrink */ > + list_for_each_entry_safe(params, tmp, > + &memcg->memcg_slab_caches, list) { > + > + cachep = memcg_params_to_cache(params); > + /* > + * the cpu_hotplug lock is taken in kmem_cache_create > + * outside the slab_caches_mutex manipulation. It will > + * be taken by kmem_cache_shrink to flush the cache. > + * So we need to drop the lock. It is all right because > + * the lock only protects elements moving in and out the > + * list. > + */ > + mutex_unlock(&memcg->slab_caches_mutex); > + kmem_cache_shrink(cachep); > + mutex_lock(&memcg->slab_caches_mutex); > + } > + mutex_unlock(&memcg->slab_caches_mutex); > + mem_cgroup_put(memcg); > + } > + mutex_unlock(&dangling_memcgs_mutex); > +} -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>