aboutsummaryrefslogtreecommitdiffstats
path: root/mm/page-writeback.c
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2015-02-11 18:25:01 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-11 20:06:00 -0500
commit6de226191d12fce30331ebf024ca3ed24834f0ee (patch)
tree74d4910406255087f3e72c0e4d483513d8449ad4 /mm/page-writeback.c
parent93aa7d95248d04b934eb8e89717c7b8d6400bf2b (diff)
mm: memcontrol: track move_lock state internally
The complexity of memcg page stat synchronization is currently leaking into the callsites, forcing them to keep track of the move_lock state and the IRQ flags. Simplify the API by tracking it in the memcg. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Michal Hocko <mhocko@suse.cz> Reviewed-by: Vladimir Davydov <vdavydov@parallels.com> Cc: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page-writeback.c')
-rw-r--r--mm/page-writeback.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 6f4335238e33..fb71e9deca85 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -2308,12 +2308,10 @@ EXPORT_SYMBOL(clear_page_dirty_for_io);
2308int test_clear_page_writeback(struct page *page) 2308int test_clear_page_writeback(struct page *page)
2309{ 2309{
2310 struct address_space *mapping = page_mapping(page); 2310 struct address_space *mapping = page_mapping(page);
2311 unsigned long memcg_flags;
2312 struct mem_cgroup *memcg; 2311 struct mem_cgroup *memcg;
2313 bool locked;
2314 int ret; 2312 int ret;
2315 2313
2316 memcg = mem_cgroup_begin_page_stat(page, &locked, &memcg_flags); 2314 memcg = mem_cgroup_begin_page_stat(page);
2317 if (mapping) { 2315 if (mapping) {
2318 struct backing_dev_info *bdi = mapping->backing_dev_info; 2316 struct backing_dev_info *bdi = mapping->backing_dev_info;
2319 unsigned long flags; 2317 unsigned long flags;
@@ -2338,19 +2336,17 @@ int test_clear_page_writeback(struct page *page)
2338 dec_zone_page_state(page, NR_WRITEBACK); 2336 dec_zone_page_state(page, NR_WRITEBACK);
2339 inc_zone_page_state(page, NR_WRITTEN); 2337 inc_zone_page_state(page, NR_WRITTEN);
2340 } 2338 }
2341 mem_cgroup_end_page_stat(memcg, &locked, &memcg_flags); 2339 mem_cgroup_end_page_stat(memcg);
2342 return ret; 2340 return ret;
2343} 2341}
2344 2342
2345int __test_set_page_writeback(struct page *page, bool keep_write) 2343int __test_set_page_writeback(struct page *page, bool keep_write)
2346{ 2344{
2347 struct address_space *mapping = page_mapping(page); 2345 struct address_space *mapping = page_mapping(page);
2348 unsigned long memcg_flags;
2349 struct mem_cgroup *memcg; 2346 struct mem_cgroup *memcg;
2350 bool locked;
2351 int ret; 2347 int ret;
2352 2348
2353 memcg = mem_cgroup_begin_page_stat(page, &locked, &memcg_flags); 2349 memcg = mem_cgroup_begin_page_stat(page);
2354 if (mapping) { 2350 if (mapping) {
2355 struct backing_dev_info *bdi = mapping->backing_dev_info; 2351 struct backing_dev_info *bdi = mapping->backing_dev_info;
2356 unsigned long flags; 2352 unsigned long flags;
@@ -2380,7 +2376,7 @@ int __test_set_page_writeback(struct page *page, bool keep_write)
2380 mem_cgroup_inc_page_stat(memcg, MEM_CGROUP_STAT_WRITEBACK); 2376 mem_cgroup_inc_page_stat(memcg, MEM_CGROUP_STAT_WRITEBACK);
2381 inc_zone_page_state(page, NR_WRITEBACK); 2377 inc_zone_page_state(page, NR_WRITEBACK);
2382 } 2378 }
2383 mem_cgroup_end_page_stat(memcg, &locked, &memcg_flags); 2379 mem_cgroup_end_page_stat(memcg);
2384 return ret; 2380 return ret;
2385 2381
2386} 2382}