From 9e851a53daeff2c33cf1a72f693780163c8dfa3f Mon Sep 17 00:00:00 2001 From: Michal Hocko Date: Tue, 26 Jul 2011 16:08:29 -0700 Subject: [PATCH] --- yaml --- r: 260406 b: refs/heads/master c: 8521fc50d433507a7cdc96bec280f9e5888a54cc h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/memcontrol.c | 12 ++---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index 7baeab3df37d..4e1cd72d3bcc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3e92041d68b40c47faa34c7dc08fc650a6c36adc +refs/heads/master: 8521fc50d433507a7cdc96bec280f9e5888a54cc diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index 79f23a189941..5f84d2351ddb 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -2092,7 +2092,6 @@ struct memcg_stock_pcp { #define FLUSHING_CACHED_CHARGE (0) }; static DEFINE_PER_CPU(struct memcg_stock_pcp, memcg_stock); -static DEFINE_MUTEX(percpu_charge_mutex); /* * Try to consume stocked charge on this cpu. If success, one page is consumed @@ -2199,7 +2198,8 @@ static void drain_all_stock(struct mem_cgroup *root_mem, bool sync) for_each_online_cpu(cpu) { struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu); - if (test_bit(FLUSHING_CACHED_CHARGE, &stock->flags)) + if (mem_cgroup_same_or_subtree(root_mem, stock->cached) && + test_bit(FLUSHING_CACHED_CHARGE, &stock->flags)) flush_work(&stock->work); } out: @@ -2214,22 +2214,14 @@ static void drain_all_stock(struct mem_cgroup *root_mem, bool sync) */ static void drain_all_stock_async(struct mem_cgroup *root_mem) { - /* - * If someone calls draining, avoid adding more kworker runs. - */ - if (!mutex_trylock(&percpu_charge_mutex)) - return; drain_all_stock(root_mem, false); - mutex_unlock(&percpu_charge_mutex); } /* This is a synchronous drain interface. */ static void drain_all_stock_sync(struct mem_cgroup *root_mem) { /* called when force_empty is called */ - mutex_lock(&percpu_charge_mutex); drain_all_stock(root_mem, true); - mutex_unlock(&percpu_charge_mutex); } /*