|
@@ -297,7 +297,7 @@ static inline struct mem_cgroup *mem_cgroup_from_id(unsigned short id)
|
|
|
return mem_cgroup_from_css(css);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_MEMCG_KMEM
|
|
|
+#ifndef CONFIG_SLOB
|
|
|
/*
|
|
|
* This will be the memcg's index in each cache's ->memcg_params.memcg_caches.
|
|
|
* The main reason for not using cgroup id for this:
|
|
@@ -349,7 +349,7 @@ void memcg_put_cache_ids(void)
|
|
|
DEFINE_STATIC_KEY_FALSE(memcg_kmem_enabled_key);
|
|
|
EXPORT_SYMBOL(memcg_kmem_enabled_key);
|
|
|
|
|
|
-#endif /* CONFIG_MEMCG_KMEM */
|
|
|
+#endif /* !CONFIG_SLOB */
|
|
|
|
|
|
static struct mem_cgroup_per_zone *
|
|
|
mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone)
|
|
@@ -2203,7 +2203,7 @@ static void commit_charge(struct page *page, struct mem_cgroup *memcg,
|
|
|
unlock_page_lru(page, isolated);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_MEMCG_KMEM
|
|
|
+#ifndef CONFIG_SLOB
|
|
|
static int memcg_alloc_cache_id(void)
|
|
|
{
|
|
|
int id, size;
|
|
@@ -2424,7 +2424,7 @@ void __memcg_kmem_uncharge(struct page *page, int order)
|
|
|
page->mem_cgroup = NULL;
|
|
|
css_put_many(&memcg->css, nr_pages);
|
|
|
}
|
|
|
-#endif /* CONFIG_MEMCG_KMEM */
|
|
|
+#endif /* !CONFIG_SLOB */
|
|
|
|
|
|
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
|
|
@@ -2860,7 +2860,7 @@ static u64 mem_cgroup_read_u64(struct cgroup_subsys_state *css,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_MEMCG_KMEM
|
|
|
+#ifndef CONFIG_SLOB
|
|
|
static int memcg_online_kmem(struct mem_cgroup *memcg)
|
|
|
{
|
|
|
int err = 0;
|
|
@@ -2908,24 +2908,6 @@ out:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static int memcg_update_kmem_limit(struct mem_cgroup *memcg,
|
|
|
- unsigned long limit)
|
|
|
-{
|
|
|
- int ret;
|
|
|
-
|
|
|
- mutex_lock(&memcg_limit_mutex);
|
|
|
- /* Top-level cgroup doesn't propagate from root */
|
|
|
- if (!memcg_kmem_online(memcg)) {
|
|
|
- ret = memcg_online_kmem(memcg);
|
|
|
- if (ret)
|
|
|
- goto out;
|
|
|
- }
|
|
|
- ret = page_counter_limit(&memcg->kmem, limit);
|
|
|
-out:
|
|
|
- mutex_unlock(&memcg_limit_mutex);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
static int memcg_propagate_kmem(struct mem_cgroup *memcg)
|
|
|
{
|
|
|
int ret = 0;
|
|
@@ -3000,16 +2982,45 @@ static void memcg_free_kmem(struct mem_cgroup *memcg)
|
|
|
}
|
|
|
}
|
|
|
#else
|
|
|
+static int memcg_propagate_kmem(struct mem_cgroup *memcg)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+static void memcg_offline_kmem(struct mem_cgroup *memcg)
|
|
|
+{
|
|
|
+}
|
|
|
+static void memcg_free_kmem(struct mem_cgroup *memcg)
|
|
|
+{
|
|
|
+}
|
|
|
+#endif /* !CONFIG_SLOB */
|
|
|
+
|
|
|
+#ifdef CONFIG_MEMCG_KMEM
|
|
|
static int memcg_update_kmem_limit(struct mem_cgroup *memcg,
|
|
|
unsigned long limit)
|
|
|
{
|
|
|
- return -EINVAL;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ mutex_lock(&memcg_limit_mutex);
|
|
|
+ /* Top-level cgroup doesn't propagate from root */
|
|
|
+ if (!memcg_kmem_online(memcg)) {
|
|
|
+ ret = memcg_online_kmem(memcg);
|
|
|
+ if (ret)
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+ ret = page_counter_limit(&memcg->kmem, limit);
|
|
|
+out:
|
|
|
+ mutex_unlock(&memcg_limit_mutex);
|
|
|
+ return ret;
|
|
|
}
|
|
|
-static void memcg_offline_kmem(struct mem_cgroup *memcg)
|
|
|
+#else
|
|
|
+static int memcg_update_kmem_limit(struct mem_cgroup *memcg,
|
|
|
+ unsigned long limit)
|
|
|
{
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
#endif /* CONFIG_MEMCG_KMEM */
|
|
|
|
|
|
+
|
|
|
/*
|
|
|
* The user of this function is...
|
|
|
* RES_LIMIT.
|
|
@@ -4182,7 +4193,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
|
|
|
vmpressure_init(&memcg->vmpressure);
|
|
|
INIT_LIST_HEAD(&memcg->event_list);
|
|
|
spin_lock_init(&memcg->event_list_lock);
|
|
|
-#ifdef CONFIG_MEMCG_KMEM
|
|
|
+#ifndef CONFIG_SLOB
|
|
|
memcg->kmemcg_id = -1;
|
|
|
#endif
|
|
|
#ifdef CONFIG_CGROUP_WRITEBACK
|
|
@@ -4244,10 +4255,11 @@ mem_cgroup_css_online(struct cgroup_subsys_state *css)
|
|
|
}
|
|
|
mutex_unlock(&memcg_create_mutex);
|
|
|
|
|
|
-#ifdef CONFIG_MEMCG_KMEM
|
|
|
ret = memcg_propagate_kmem(memcg);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
+
|
|
|
+#ifdef CONFIG_MEMCG_KMEM
|
|
|
ret = tcp_init_cgroup(memcg);
|
|
|
if (ret)
|
|
|
return ret;
|
|
@@ -4308,8 +4320,9 @@ static void mem_cgroup_css_free(struct cgroup_subsys_state *css)
|
|
|
static_branch_dec(&memcg_sockets_enabled_key);
|
|
|
#endif
|
|
|
|
|
|
-#ifdef CONFIG_MEMCG_KMEM
|
|
|
memcg_free_kmem(memcg);
|
|
|
+
|
|
|
+#ifdef CONFIG_MEMCG_KMEM
|
|
|
tcp_destroy_cgroup(memcg);
|
|
|
#endif
|
|
|
|