From 895b498dcd90e95e7828f6d05d2dd9dc1131994c Mon Sep 17 00:00:00 2001 From: Michal Hocko Date: Tue, 26 Jul 2011 16:08:27 -0700 Subject: [PATCH] --- yaml --- r: 260403 b: refs/heads/master c: d1a05b6973c7cb33144fa965d73facc708ffc37d h: refs/heads/master i: 260401: 9eedf37a926ae24dad55cb5a649c3454be2943c2 260399: 5086ca5844e6bf9b5b0baeef26a2711dab708448 v: v3 --- [refs] | 2 +- trunk/mm/memcontrol.c | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 8ecc3be41f9a..e63269e9c4d5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 82f9d486e59f588c7d100865c36510644abda356 +refs/heads/master: d1a05b6973c7cb33144fa965d73facc708ffc37d diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index 04e505bfd7dd..2f5534e1968c 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -2180,11 +2180,8 @@ static void drain_all_stock_async(struct mem_cgroup *root_mem) struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu); struct mem_cgroup *mem; - if (cpu == curcpu) - continue; - mem = stock->cached; - if (!mem) + if (!mem || !stock->nr_pages) continue; if (mem != root_mem) { if (!root_mem->use_hierarchy) @@ -2193,8 +2190,12 @@ static void drain_all_stock_async(struct mem_cgroup *root_mem) if (!css_is_ancestor(&mem->css, &root_mem->css)) continue; } - if (!test_and_set_bit(FLUSHING_CACHED_CHARGE, &stock->flags)) - schedule_work_on(cpu, &stock->work); + if (!test_and_set_bit(FLUSHING_CACHED_CHARGE, &stock->flags)) { + if (cpu == curcpu) + drain_local_stock(&stock->work); + else + schedule_work_on(cpu, &stock->work); + } } put_online_cpus(); mutex_unlock(&percpu_charge_mutex);