X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Fmemcontrol.c;fp=mm%2Fmemcontrol.c;h=c8569bc298ffc77c5a2627b5a4d2fd2a42b91742;hb=f39d01be4c59a61a08d0cb53f615e7016b85d339;hp=f0ff5a7af318be82496acda617ba014440f36091;hpb=7db82437cfcac4bdfe79a6323eb554fdfa271623;p=pandora-kernel.git diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f0ff5a7af318..c8569bc298ff 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1601,7 +1601,6 @@ static int __mem_cgroup_try_charge(struct mm_struct *mm, * There is a small race that "from" or "to" can be * freed by rmdir, so we use css_tryget(). */ - rcu_read_lock(); from = mc.from; to = mc.to; if (from && css_tryget(&from->css)) { @@ -1622,7 +1621,6 @@ static int __mem_cgroup_try_charge(struct mm_struct *mm, do_continue = (to == mem_over_limit); css_put(&to->css); } - rcu_read_unlock(); if (do_continue) { DEFINE_WAIT(wait); prepare_to_wait(&mc.waitq, &wait, @@ -2429,11 +2427,11 @@ int mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr) } unlock_page_cgroup(pc); + *ptr = mem; if (mem) { - ret = __mem_cgroup_try_charge(NULL, GFP_KERNEL, &mem, false); + ret = __mem_cgroup_try_charge(NULL, GFP_KERNEL, ptr, false); css_put(&mem->css); } - *ptr = mem; return ret; }