|
@@ -3959,8 +3959,20 @@ int __kmem_cache_shrink(struct kmem_cache *s)
|
|
#ifdef CONFIG_MEMCG
|
|
#ifdef CONFIG_MEMCG
|
|
static void kmemcg_cache_deact_after_rcu(struct kmem_cache *s)
|
|
static void kmemcg_cache_deact_after_rcu(struct kmem_cache *s)
|
|
{
|
|
{
|
|
- /* called with all the locks held after a sched RCU grace period */
|
|
|
|
- __kmem_cache_shrink(s);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Called with all the locks held after a sched RCU grace period.
|
|
|
|
+ * Even if @s becomes empty after shrinking, we can't know that @s
|
|
|
|
+ * doesn't have allocations already in-flight and thus can't
|
|
|
|
+ * destroy @s until the associated memcg is released.
|
|
|
|
+ *
|
|
|
|
+ * However, let's remove the sysfs files for empty caches here.
|
|
|
|
+ * Each cache has a lot of interface files which aren't
|
|
|
|
+ * particularly useful for empty draining caches; otherwise, we can
|
|
|
|
+ * easily end up with millions of unnecessary sysfs files on
|
|
|
|
+ * systems which have a lot of memory and transient cgroups.
|
|
|
|
+ */
|
|
|
|
+ if (!__kmem_cache_shrink(s))
|
|
|
|
+ sysfs_slab_remove(s);
|
|
}
|
|
}
|
|
|
|
|
|
void __kmemcg_cache_deactivate(struct kmem_cache *s)
|
|
void __kmemcg_cache_deactivate(struct kmem_cache *s)
|
|
@@ -5659,6 +5671,15 @@ static void sysfs_slab_remove(struct kmem_cache *s)
|
|
*/
|
|
*/
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ if (!s->kobj.state_in_sysfs)
|
|
|
|
+ /*
|
|
|
|
+ * For a memcg cache, this may be called during
|
|
|
|
+ * deactivation and again on shutdown. Remove only once.
|
|
|
|
+ * A cache is never shut down before deactivation is
|
|
|
|
+ * complete, so no need to worry about synchronization.
|
|
|
|
+ */
|
|
|
|
+ return;
|
|
|
|
+
|
|
#ifdef CONFIG_MEMCG
|
|
#ifdef CONFIG_MEMCG
|
|
kset_unregister(s->memcg_kset);
|
|
kset_unregister(s->memcg_kset);
|
|
#endif
|
|
#endif
|