Merge tag 'nfsd-4.8' of git://linux-nfs.org/~bfields/linux
[linux-2.6-block.git] / mm / page-writeback.c
index f97591d9fa001792ab92e77f855fc3d0026d5530..f4cd7d8005c9071dc1caf77a155eb3f2dc611b61 100644 (file)
@@ -310,19 +310,21 @@ static unsigned long highmem_dirtyable_memory(unsigned long total)
        for_each_node_state(node, N_HIGH_MEMORY) {
                for (i = ZONE_NORMAL + 1; i < MAX_NR_ZONES; i++) {
                        struct zone *z;
-                       unsigned long dirtyable;
+                       unsigned long nr_pages;
 
                        if (!is_highmem_idx(i))
                                continue;
 
                        z = &NODE_DATA(node)->node_zones[i];
-                       dirtyable = zone_page_state(z, NR_FREE_PAGES) +
-                               zone_page_state(z, NR_ZONE_LRU_FILE);
+                       if (!populated_zone(z))
+                               continue;
 
+                       nr_pages = zone_page_state(z, NR_FREE_PAGES);
                        /* watch for underflows */
-                       dirtyable -= min(dirtyable, high_wmark_pages(z));
-
-                       x += dirtyable;
+                       nr_pages -= min(nr_pages, high_wmark_pages(z));
+                       nr_pages += zone_page_state(z, NR_ZONE_INACTIVE_FILE);
+                       nr_pages += zone_page_state(z, NR_ZONE_ACTIVE_FILE);
+                       x += nr_pages;
                }
        }
 
@@ -2461,7 +2463,7 @@ void account_page_dirtied(struct page *page, struct address_space *mapping)
                mem_cgroup_inc_page_stat(page, MEM_CGROUP_STAT_DIRTY);
                __inc_node_page_state(page, NR_FILE_DIRTY);
                __inc_zone_page_state(page, NR_ZONE_WRITE_PENDING);
-               __inc_zone_page_state(page, NR_DIRTIED);
+               __inc_node_page_state(page, NR_DIRTIED);
                __inc_wb_stat(wb, WB_RECLAIMABLE);
                __inc_wb_stat(wb, WB_DIRTIED);
                task_io_account_write(PAGE_SIZE);
@@ -2550,7 +2552,7 @@ void account_page_redirty(struct page *page)
 
                wb = unlocked_inode_to_wb_begin(inode, &locked);
                current->nr_dirtied--;
-               dec_zone_page_state(page, NR_DIRTIED);
+               dec_node_page_state(page, NR_DIRTIED);
                dec_wb_stat(wb, WB_DIRTIED);
                unlocked_inode_to_wb_end(inode, locked);
        }
@@ -2787,7 +2789,7 @@ int test_clear_page_writeback(struct page *page)
                mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_WRITEBACK);
                dec_node_page_state(page, NR_WRITEBACK);
                dec_zone_page_state(page, NR_ZONE_WRITE_PENDING);
-               inc_zone_page_state(page, NR_WRITTEN);
+               inc_node_page_state(page, NR_WRITTEN);
        }
        unlock_page_memcg(page);
        return ret;