aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/memcontrol.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 8a4159efa3c0..e0ac636315f8 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -6401,6 +6401,10 @@ static int mem_cgroup_do_precharge(unsigned long count)
6401 mc.precharge += count; 6401 mc.precharge += count;
6402 return ret; 6402 return ret;
6403 } 6403 }
6404 if (ret == -EINTR) {
6405 __mem_cgroup_cancel_charge(root_mem_cgroup, count);
6406 return ret;
6407 }
6404 6408
6405 /* Try charges one by one with reclaim */ 6409 /* Try charges one by one with reclaim */
6406 while (count--) { 6410 while (count--) {
@@ -6409,8 +6413,11 @@ static int mem_cgroup_do_precharge(unsigned long count)
6409 /* 6413 /*
6410 * In case of failure, any residual charges against 6414 * In case of failure, any residual charges against
6411 * mc.to will be dropped by mem_cgroup_clear_mc() 6415 * mc.to will be dropped by mem_cgroup_clear_mc()
6412 * later on. 6416 * later on. However, cancel any charges that are
6417 * bypassed to root right away or they'll be lost.
6413 */ 6418 */
6419 if (ret == -EINTR)
6420 __mem_cgroup_cancel_charge(root_mem_cgroup, 1);
6414 if (ret) 6421 if (ret)
6415 return ret; 6422 return ret;
6416 mc.precharge++; 6423 mc.precharge++;