From: Hugh Dickins Further adjustments to the mem_cgroup_subsys.disabled tests: add one to mem_cgroup_shrink_usage; move mem_cgroup_charge_common's into its callers, before they've done any work; and add one to mem_cgroup_move_lists, to avoid the overhead of its bit spin locking and unlocking. Signed-off-by: Hugh Dickins Cc: Li Zefan Acked-by: Balbir Singh Acked-by: KAMEZAWA Hiroyuki Cc: KOSAKI Motohiro Signed-off-by: Andrew Morton --- mm/memcontrol.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff -puN mm/memcontrol.c~memcg-clean-up-checking-of-the-disabled-flag-memcg-further-checking-of-disabled-flag mm/memcontrol.c --- a/mm/memcontrol.c~memcg-clean-up-checking-of-the-disabled-flag-memcg-further-checking-of-disabled-flag +++ a/mm/memcontrol.c @@ -354,6 +354,9 @@ void mem_cgroup_move_lists(struct page * struct mem_cgroup_per_zone *mz; unsigned long flags; + if (mem_cgroup_subsys.disabled) + return; + /* * We cannot lock_page_cgroup while holding zone's lru_lock, * because other holders of lock_page_cgroup can be interrupted @@ -533,9 +536,6 @@ static int mem_cgroup_charge_common(stru unsigned long nr_retries = MEM_CGROUP_RECLAIM_RETRIES; struct mem_cgroup_per_zone *mz; - if (mem_cgroup_subsys.disabled) - return 0; - pc = kmem_cache_alloc(page_cgroup_cache, gfp_mask); if (unlikely(pc == NULL)) goto err; @@ -620,6 +620,9 @@ err: int mem_cgroup_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask) { + if (mem_cgroup_subsys.disabled) + return 0; + /* * If already mapped, we don't have to account. * If page cache, page->mapping has address_space. @@ -638,6 +641,9 @@ int mem_cgroup_charge(struct page *page, int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask) { + if (mem_cgroup_subsys.disabled) + return 0; + /* * Corner case handling. This is called from add_to_page_cache() * in usual. But some FS (shmem) precharges this page before calling it @@ -789,6 +795,9 @@ int mem_cgroup_shrink_usage(struct mm_st int progress = 0; int retry = MEM_CGROUP_RECLAIM_RETRIES; + if (mem_cgroup_subsys.disabled) + return 0; + rcu_read_lock(); mem = mem_cgroup_from_task(rcu_dereference(mm->owner)); css_get(&mem->css); _