get_page_state(&ps);
        printk(KERN_INFO "%lu pages dirty\n", ps.nr_dirty);
        printk(KERN_INFO "%lu pages writeback\n", ps.nr_writeback);
-       printk(KERN_INFO "%lu pages mapped\n", ps.nr_mapped);
+       printk(KERN_INFO "%lu pages mapped\n", global_page_state(NR_FILE_MAPPED));
        printk(KERN_INFO "%lu pages slab\n", ps.nr_slab);
        printk(KERN_INFO "%lu pages pagetables\n", ps.nr_page_table_pages);
 }
 
                ps.nr_dirty = 0;
        if ((long)ps.nr_writeback < 0)
                ps.nr_writeback = 0;
-       if ((long)ps.nr_mapped < 0)
-               ps.nr_mapped = 0;
        if ((long)ps.nr_slab < 0)
                ps.nr_slab = 0;
 
                       nid, K(i.freeram - i.freehigh),
                       nid, K(ps.nr_dirty),
                       nid, K(ps.nr_writeback),
-                      nid, K(ps.nr_mapped),
+                      nid, K(node_page_state(nid, NR_FILE_MAPPED)),
                       nid, K(ps.nr_slab));
        n += hugetlb_report_node_meminfo(nid, buf + n);
        return n;
 
                K(i.freeswap),
                K(ps.nr_dirty),
                K(ps.nr_writeback),
-               K(ps.nr_mapped),
+               K(global_page_state(NR_FILE_MAPPED)),
                K(ps.nr_slab),
                K(allowed),
                K(committed),
 
 #endif
 
 enum zone_stat_item {
+       NR_FILE_MAPPED, /* mapped into pagetables.
+                          only modified from process context */
+
        NR_VM_ZONE_STAT_ITEMS };
 
 struct per_cpu_pages {
 
        unsigned long nr_writeback;     /* Pages under writeback */
        unsigned long nr_unstable;      /* NFS unstable pages */
        unsigned long nr_page_table_pages;/* Pages used for pagetables */
-       unsigned long nr_mapped;        /* mapped into pagetables.
-                                        * only modified from process context */
        unsigned long nr_slab;          /* In slab */
 #define GET_PAGE_STATE_LAST nr_slab
 
 
 {
        wbs->nr_dirty = read_page_state(nr_dirty);
        wbs->nr_unstable = read_page_state(nr_unstable);
-       wbs->nr_mapped = read_page_state(nr_mapped);
+       wbs->nr_mapped = global_page_state(NR_FILE_MAPPED);
        wbs->nr_writeback = read_page_state(nr_writeback);
 }
 
 
                ps.nr_unstable,
                nr_free_pages(),
                ps.nr_slab,
-               ps.nr_mapped,
+               global_page_state(NR_FILE_MAPPED),
                ps.nr_page_table_pages);
 
        for_each_zone(zone) {
 
         * nr_mapped state can be updated without turning off
         * interrupts because it is not modified via interrupt.
         */
-       __inc_page_state(nr_mapped);
+       __inc_zone_page_state(page, NR_FILE_MAPPED);
 }
 
 /**
 void page_add_file_rmap(struct page *page)
 {
        if (atomic_inc_and_test(&page->_mapcount))
-               __inc_page_state(nr_mapped);
+               __inc_zone_page_state(page, NR_FILE_MAPPED);
 }
 
 /**
                 */
                if (page_test_and_clear_dirty(page))
                        set_page_dirty(page);
-               __dec_page_state(nr_mapped);
+               __dec_zone_page_state(page, NR_FILE_MAPPED);
        }
 }
 
 
        }
 
        for (priority = DEF_PRIORITY; priority >= 0; priority--) {
-               sc.nr_mapped = read_page_state(nr_mapped);
+               sc.nr_mapped = global_page_state(NR_FILE_MAPPED);
                sc.nr_scanned = 0;
                if (!priority)
                        disable_swap_token();
        total_scanned = 0;
        nr_reclaimed = 0;
        sc.may_writepage = !laptop_mode;
-       sc.nr_mapped = read_page_state(nr_mapped);
+       sc.nr_mapped = global_page_state(NR_FILE_MAPPED);
 
        inc_page_state(pageoutrun);
 
                for (prio = DEF_PRIORITY; prio >= 0; prio--) {
                        unsigned long nr_to_scan = nr_pages - ret;
 
-                       sc.nr_mapped = read_page_state(nr_mapped);
+                       sc.nr_mapped = global_page_state(NR_FILE_MAPPED);
                        sc.nr_scanned = 0;
 
                        ret += shrink_all_zones(nr_to_scan, prio, pass, &sc);
        struct scan_control sc = {
                .may_writepage = !!(zone_reclaim_mode & RECLAIM_WRITE),
                .may_swap = !!(zone_reclaim_mode & RECLAIM_SWAP),
-               .nr_mapped = read_page_state(nr_mapped),
+               .nr_mapped = global_page_state(NR_FILE_MAPPED),
                .swap_cluster_max = max_t(unsigned long, nr_pages,
                                        SWAP_CLUSTER_MAX),
                .gfp_mask = gfp_mask,
 
 
 static char *vmstat_text[] = {
        /* Zoned VM counters */
+       "nr_mapped",
 
        /* Page state */
        "nr_dirty",
        "nr_writeback",
        "nr_unstable",
        "nr_page_table_pages",
-       "nr_mapped",
        "nr_slab",
 
        "pgpgin",