aboutsummaryrefslogtreecommitdiffstats
path: root/mm/page-writeback.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/page-writeback.c')
-rw-r--r--mm/page-writeback.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index d8ac2a7fb9e7..143c1c25d680 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -650,9 +650,8 @@ int wb_domain_init(struct wb_domain *dom, gfp_t gfp)
650 650
651 spin_lock_init(&dom->lock); 651 spin_lock_init(&dom->lock);
652 652
653 init_timer_deferrable(&dom->period_timer); 653 setup_deferrable_timer(&dom->period_timer, writeout_period,
654 dom->period_timer.function = writeout_period; 654 (unsigned long)dom);
655 dom->period_timer.data = (unsigned long)dom;
656 655
657 dom->dirty_limit_tstamp = jiffies; 656 dom->dirty_limit_tstamp = jiffies;
658 657
@@ -2353,10 +2352,16 @@ int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
2353 2352
2354 if (wbc->nr_to_write <= 0) 2353 if (wbc->nr_to_write <= 0)
2355 return 0; 2354 return 0;
2356 if (mapping->a_ops->writepages) 2355 while (1) {
2357 ret = mapping->a_ops->writepages(mapping, wbc); 2356 if (mapping->a_ops->writepages)
2358 else 2357 ret = mapping->a_ops->writepages(mapping, wbc);
2359 ret = generic_writepages(mapping, wbc); 2358 else
2359 ret = generic_writepages(mapping, wbc);
2360 if ((ret != -ENOMEM) || (wbc->sync_mode != WB_SYNC_ALL))
2361 break;
2362 cond_resched();
2363 congestion_wait(BLK_RW_ASYNC, HZ/50);
2364 }
2360 return ret; 2365 return ret;
2361} 2366}
2362 2367
@@ -2428,7 +2433,7 @@ void account_page_dirtied(struct page *page, struct address_space *mapping)
2428 inode_attach_wb(inode, page); 2433 inode_attach_wb(inode, page);
2429 wb = inode_to_wb(inode); 2434 wb = inode_to_wb(inode);
2430 2435
2431 mem_cgroup_inc_page_stat(page, MEM_CGROUP_STAT_DIRTY); 2436 inc_memcg_page_state(page, NR_FILE_DIRTY);
2432 __inc_node_page_state(page, NR_FILE_DIRTY); 2437 __inc_node_page_state(page, NR_FILE_DIRTY);
2433 __inc_zone_page_state(page, NR_ZONE_WRITE_PENDING); 2438 __inc_zone_page_state(page, NR_ZONE_WRITE_PENDING);
2434 __inc_node_page_state(page, NR_DIRTIED); 2439 __inc_node_page_state(page, NR_DIRTIED);
@@ -2450,7 +2455,7 @@ void account_page_cleaned(struct page *page, struct address_space *mapping,
2450 struct bdi_writeback *wb) 2455 struct bdi_writeback *wb)
2451{ 2456{
2452 if (mapping_cap_account_dirty(mapping)) { 2457 if (mapping_cap_account_dirty(mapping)) {
2453 mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_DIRTY); 2458 dec_memcg_page_state(page, NR_FILE_DIRTY);
2454 dec_node_page_state(page, NR_FILE_DIRTY); 2459 dec_node_page_state(page, NR_FILE_DIRTY);
2455 dec_zone_page_state(page, NR_ZONE_WRITE_PENDING); 2460 dec_zone_page_state(page, NR_ZONE_WRITE_PENDING);
2456 dec_wb_stat(wb, WB_RECLAIMABLE); 2461 dec_wb_stat(wb, WB_RECLAIMABLE);
@@ -2707,7 +2712,7 @@ int clear_page_dirty_for_io(struct page *page)
2707 */ 2712 */
2708 wb = unlocked_inode_to_wb_begin(inode, &locked); 2713 wb = unlocked_inode_to_wb_begin(inode, &locked);
2709 if (TestClearPageDirty(page)) { 2714 if (TestClearPageDirty(page)) {
2710 mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_DIRTY); 2715 dec_memcg_page_state(page, NR_FILE_DIRTY);
2711 dec_node_page_state(page, NR_FILE_DIRTY); 2716 dec_node_page_state(page, NR_FILE_DIRTY);
2712 dec_zone_page_state(page, NR_ZONE_WRITE_PENDING); 2717 dec_zone_page_state(page, NR_ZONE_WRITE_PENDING);
2713 dec_wb_stat(wb, WB_RECLAIMABLE); 2718 dec_wb_stat(wb, WB_RECLAIMABLE);
@@ -2754,7 +2759,7 @@ int test_clear_page_writeback(struct page *page)
2754 ret = TestClearPageWriteback(page); 2759 ret = TestClearPageWriteback(page);
2755 } 2760 }
2756 if (ret) { 2761 if (ret) {
2757 mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_WRITEBACK); 2762 dec_memcg_page_state(page, NR_WRITEBACK);
2758 dec_node_page_state(page, NR_WRITEBACK); 2763 dec_node_page_state(page, NR_WRITEBACK);
2759 dec_zone_page_state(page, NR_ZONE_WRITE_PENDING); 2764 dec_zone_page_state(page, NR_ZONE_WRITE_PENDING);
2760 inc_node_page_state(page, NR_WRITTEN); 2765 inc_node_page_state(page, NR_WRITTEN);
@@ -2809,7 +2814,7 @@ int __test_set_page_writeback(struct page *page, bool keep_write)
2809 ret = TestSetPageWriteback(page); 2814 ret = TestSetPageWriteback(page);
2810 } 2815 }
2811 if (!ret) { 2816 if (!ret) {
2812 mem_cgroup_inc_page_stat(page, MEM_CGROUP_STAT_WRITEBACK); 2817 inc_memcg_page_state(page, NR_WRITEBACK);
2813 inc_node_page_state(page, NR_WRITEBACK); 2818 inc_node_page_state(page, NR_WRITEBACK);
2814 inc_zone_page_state(page, NR_ZONE_WRITE_PENDING); 2819 inc_zone_page_state(page, NR_ZONE_WRITE_PENDING);
2815 } 2820 }