diff options
| author | Ingo Molnar <mingo@kernel.org> | 2014-06-06 07:55:06 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2014-06-06 07:55:06 +0200 | 
| commit | ec00010972a0971b2c1da4fbe4e5c7d8ed1ecb05 (patch) | |
| tree | c28975d7daf6d8a3aa23afe8f42837b71105b269 /mm/memcontrol.c | |
| parent | 8c6e549a447c51f4f8c0ba7f1e444469f75a354a (diff) | |
| parent | e041e328c4b41e1db79bfe5ba9992c2ed771ad19 (diff) | |
Merge branch 'perf/urgent' into perf/core, to resolve conflict and to prepare for new patches
Conflicts:
	arch/x86/kernel/traps.c
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'mm/memcontrol.c')
| -rw-r--r-- | mm/memcontrol.c | 27 | 
1 files changed, 14 insertions, 13 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index c47dffdcb246..5177c6d4a2dd 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1077,9 +1077,18 @@ static struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)  	rcu_read_lock();  	do { -		memcg = mem_cgroup_from_task(rcu_dereference(mm->owner)); -		if (unlikely(!memcg)) +		/* +		 * Page cache insertions can happen withou an +		 * actual mm context, e.g. during disk probing +		 * on boot, loopback IO, acct() writes etc. +		 */ +		if (unlikely(!mm))  			memcg = root_mem_cgroup; +		else { +			memcg = mem_cgroup_from_task(rcu_dereference(mm->owner)); +			if (unlikely(!memcg)) +				memcg = root_mem_cgroup; +		}  	} while (!css_tryget(&memcg->css));  	rcu_read_unlock();  	return memcg; @@ -3958,17 +3967,9 @@ int mem_cgroup_charge_file(struct page *page, struct mm_struct *mm,  		return 0;  	} -	/* -	 * Page cache insertions can happen without an actual mm -	 * context, e.g. during disk probing on boot. -	 */ -	if (unlikely(!mm)) -		memcg = root_mem_cgroup; -	else { -		memcg = mem_cgroup_try_charge_mm(mm, gfp_mask, 1, true); -		if (!memcg) -			return -ENOMEM; -	} +	memcg = mem_cgroup_try_charge_mm(mm, gfp_mask, 1, true); +	if (!memcg) +		return -ENOMEM;  	__mem_cgroup_commit_charge(memcg, page, 1, type, false);  	return 0;  }  | 
