|
@@ -2673,37 +2673,6 @@ static void memcg_unregister_cache(struct kmem_cache *cachep)
|
|
|
css_put(&memcg->css);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * During the creation a new cache, we need to disable our accounting mechanism
|
|
|
- * altogether. This is true even if we are not creating, but rather just
|
|
|
- * enqueing new caches to be created.
|
|
|
- *
|
|
|
- * This is because that process will trigger allocations; some visible, like
|
|
|
- * explicit kmallocs to auxiliary data structures, name strings and internal
|
|
|
- * cache structures; some well concealed, like INIT_WORK() that can allocate
|
|
|
- * objects during debug.
|
|
|
- *
|
|
|
- * If any allocation happens during memcg_kmem_get_cache, we will recurse back
|
|
|
- * to it. This may not be a bounded recursion: since the first cache creation
|
|
|
- * failed to complete (waiting on the allocation), we'll just try to create the
|
|
|
- * cache again, failing at the same point.
|
|
|
- *
|
|
|
- * memcg_kmem_get_cache is prepared to abort after seeing a positive count of
|
|
|
- * memcg_kmem_skip_account. So we enclose anything that might allocate memory
|
|
|
- * inside the following two functions.
|
|
|
- */
|
|
|
-static inline void memcg_stop_kmem_account(void)
|
|
|
-{
|
|
|
- VM_BUG_ON(!current->mm);
|
|
|
- current->memcg_kmem_skip_account++;
|
|
|
-}
|
|
|
-
|
|
|
-static inline void memcg_resume_kmem_account(void)
|
|
|
-{
|
|
|
- VM_BUG_ON(!current->mm);
|
|
|
- current->memcg_kmem_skip_account--;
|
|
|
-}
|
|
|
-
|
|
|
int __memcg_cleanup_cache_params(struct kmem_cache *s)
|
|
|
{
|
|
|
struct kmem_cache *c;
|
|
@@ -2798,9 +2767,9 @@ static void memcg_schedule_register_cache(struct mem_cgroup *memcg,
|
|
|
* this point we can't allow ourselves back into memcg_kmem_get_cache,
|
|
|
* the safest choice is to do it like this, wrapping the whole function.
|
|
|
*/
|
|
|
- memcg_stop_kmem_account();
|
|
|
+ current->memcg_kmem_skip_account = 1;
|
|
|
__memcg_schedule_register_cache(memcg, cachep);
|
|
|
- memcg_resume_kmem_account();
|
|
|
+ current->memcg_kmem_skip_account = 0;
|
|
|
}
|
|
|
|
|
|
int __memcg_charge_slab(struct kmem_cache *cachep, gfp_t gfp, int order)
|