[PATCH] zoned vm counters: conversion of nr_writeback to per zone counter
Christoph Lameter [Fri, 30 Jun 2006 08:55:40 +0000 (01:55 -0700)]
Conversion of nr_writeback to per zone counter.

This removes the last page_state counter from arch/i386/mm/pgtable.c so we
drop the page_state from there.

[akpm@osdl.org: bugfix]
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

arch/i386/mm/pgtable.c
drivers/base/node.c
fs/proc/proc_misc.c
include/linux/mmzone.h
include/linux/page-flags.h
include/linux/vmstat.h
mm/page-writeback.c
mm/page_alloc.c
mm/vmstat.c

index aa211dc..5e735ff 100644 (file)
@@ -30,7 +30,6 @@ void show_mem(void)
        struct page *page;
        pg_data_t *pgdat;
        unsigned long i;
-       struct page_state ps;
        unsigned long flags;
 
        printk(KERN_INFO "Mem-info:\n");
@@ -58,9 +57,9 @@ void show_mem(void)
        printk(KERN_INFO "%d pages shared\n", shared);
        printk(KERN_INFO "%d pages swap cached\n", cached);
 
-       get_page_state(&ps);
        printk(KERN_INFO "%lu pages dirty\n", global_page_state(NR_FILE_DIRTY));
-       printk(KERN_INFO "%lu pages writeback\n", ps.nr_writeback);
+       printk(KERN_INFO "%lu pages writeback\n",
+                                       global_page_state(NR_WRITEBACK));
        printk(KERN_INFO "%lu pages mapped\n", global_page_state(NR_FILE_MAPPED));
        printk(KERN_INFO "%lu pages slab\n", global_page_state(NR_SLAB));
        printk(KERN_INFO "%lu pages pagetables\n",
index 6fed520..a7b3dcb 100644 (file)
@@ -49,9 +49,6 @@ static ssize_t node_read_meminfo(struct sys_device * dev, char * buf)
        get_page_state_node(&ps, nid);
        __get_zone_counts(&active, &inactive, &free, NODE_DATA(nid));
 
-       /* Check for negative values in these approximate counters */
-       if ((long)ps.nr_writeback < 0)
-               ps.nr_writeback = 0;
 
        n = sprintf(buf, "\n"
                       "Node %d MemTotal:     %8lu kB\n"
@@ -80,7 +77,7 @@ static ssize_t node_read_meminfo(struct sys_device * dev, char * buf)
                       nid, K(i.totalram - i.totalhigh),
                       nid, K(i.freeram - i.freehigh),
                       nid, K(node_page_state(nid, NR_FILE_DIRTY)),
-                      nid, K(ps.nr_writeback),
+                      nid, K(node_page_state(nid, NR_WRITEBACK)),
                       nid, K(node_page_state(nid, NR_FILE_PAGES)),
                       nid, K(node_page_state(nid, NR_FILE_MAPPED)),
                       nid, K(node_page_state(nid, NR_ANON_PAGES)),
index e23717d..48cb358 100644 (file)
@@ -191,7 +191,7 @@ static int meminfo_read_proc(char *page, char **start, off_t off,
                K(i.totalswap),
                K(i.freeswap),
                K(global_page_state(NR_FILE_DIRTY)),
-               K(ps.nr_writeback),
+               K(global_page_state(NR_WRITEBACK)),
                K(global_page_state(NR_ANON_PAGES)),
                K(global_page_state(NR_FILE_MAPPED)),
                K(global_page_state(NR_SLAB)),
index 1cc8412..885cc97 100644 (file)
@@ -54,6 +54,7 @@ enum zone_stat_item {
        NR_SLAB,        /* Pages used by slab allocator */
        NR_PAGETABLE,   /* used for pagetables */
        NR_FILE_DIRTY,
+       NR_WRITEBACK,
        NR_VM_ZONE_STAT_ITEMS };
 
 struct per_cpu_pages {
index ff235c4..5748642 100644 (file)
        do {                                                            \
                if (!test_and_set_bit(PG_writeback,                     \
                                &(page)->flags))                        \
-                       inc_page_state(nr_writeback);                   \
+                       inc_zone_page_state(page, NR_WRITEBACK);        \
        } while (0)
 #define TestSetPageWriteback(page)                                     \
        ({                                                              \
                ret = test_and_set_bit(PG_writeback,                    \
                                        &(page)->flags);                \
                if (!ret)                                               \
-                       inc_page_state(nr_writeback);                   \
+                       inc_zone_page_state(page, NR_WRITEBACK);        \
                ret;                                                    \
        })
 #define ClearPageWriteback(page)                                       \
        do {                                                            \
                if (test_and_clear_bit(PG_writeback,                    \
                                &(page)->flags))                        \
-                       dec_page_state(nr_writeback);                   \
+                       dec_zone_page_state(page, NR_WRITEBACK);        \
        } while (0)
 #define TestClearPageWriteback(page)                                   \
        ({                                                              \
                ret = test_and_clear_bit(PG_writeback,                  \
                                &(page)->flags);                        \
                if (ret)                                                \
-                       dec_page_state(nr_writeback);                   \
+                       dec_zone_page_state(page, NR_WRITEBACK);        \
                ret;                                                    \
        })
 
index b323ea2..60c2e03 100644 (file)
@@ -22,7 +22,6 @@
  * commented here.
  */
 struct page_state {
-       unsigned long nr_writeback;     /* Pages under writeback */
        unsigned long nr_unstable;      /* NFS unstable pages */
 #define GET_PAGE_STATE_LAST nr_unstable
 
index da85478..3cfdff4 100644 (file)
@@ -113,7 +113,7 @@ static void get_writeback_state(struct writeback_state *wbs)
        wbs->nr_unstable = read_page_state(nr_unstable);
        wbs->nr_mapped = global_page_state(NR_FILE_MAPPED) +
                                global_page_state(NR_ANON_PAGES);
-       wbs->nr_writeback = read_page_state(nr_writeback);
+       wbs->nr_writeback = global_page_state(NR_WRITEBACK);
 }
 
 /*
index c2b9aa4..a12e894 100644 (file)
@@ -1315,7 +1315,7 @@ void show_free_areas(void)
                active,
                inactive,
                global_page_state(NR_FILE_DIRTY),
-               ps.nr_writeback,
+               global_page_state(NR_WRITEBACK),
                ps.nr_unstable,
                nr_free_pages(),
                global_page_state(NR_SLAB),
index 1982fb5..e84c7e5 100644 (file)
@@ -401,9 +401,9 @@ static char *vmstat_text[] = {
        "nr_slab",
        "nr_page_table_pages",
        "nr_dirty",
+       "nr_writeback",
 
        /* Page state */
-       "nr_writeback",
        "nr_unstable",
 
        "pgpgin",