

Maintaining the `nr_reverse_maps' provides makes a small but
measurable decrease in page_add_rmap() overhead.

I don't think it's a very useful metric, and it can be sort-of inferred from
slabinfo.



 fs/proc/proc_misc.c        |    6 ++----
 include/linux/page-flags.h |    1 -
 mm/page_alloc.c            |    1 -
 mm/rmap.c                  |    7 -------
 4 files changed, 2 insertions(+), 13 deletions(-)

diff -puN mm/rmap.c~remove-nr_reverse_maps mm/rmap.c
--- 25/mm/rmap.c~remove-nr_reverse_maps	2003-04-07 17:37:19.000000000 -0700
+++ 25-akpm/mm/rmap.c	2003-04-08 03:16:20.000000000 -0700
@@ -209,8 +209,6 @@ page_add_rmap(struct page *page, pte_t *
 		goto out;
 	}
 
-	BUG_ON(!cur_pte_chain->ptes[NRPTE-1]);
-
 	for (i = NRPTE-2; i >= 0; i--) {
 		if (!cur_pte_chain->ptes[i]) {
 			cur_pte_chain->ptes[i] = pte_paddr;
@@ -220,7 +218,6 @@ page_add_rmap(struct page *page, pte_t *
 	BUG();
 out:
 	pte_chain_unlock(page);
-	inc_page_state(nr_reverse_maps);
 	return pte_chain;
 }
 
@@ -251,7 +248,6 @@ void page_remove_rmap(struct page * page
 	if (PageDirect(page)) {
 		if (page->pte.direct == pte_paddr) {
 			page->pte.direct = 0;
-			dec_page_state(nr_reverse_maps);
 			ClearPageDirect(page);
 			goto out;
 		}
@@ -274,7 +270,6 @@ void page_remove_rmap(struct page * page
 				if (pa != pte_paddr)
 					continue;
 				pc->ptes[i] = start->ptes[victim_i];
-				dec_page_state(nr_reverse_maps);
 				start->ptes[victim_i] = 0;
 				if (victim_i == NRPTE-1) {
 					/* Emptied a pte_chain */
@@ -435,7 +430,6 @@ int try_to_unmap(struct page * page)
 		ret = try_to_unmap_one(page, page->pte.direct);
 		if (ret == SWAP_SUCCESS) {
 			page->pte.direct = 0;
-			dec_page_state(nr_reverse_maps);
 			ClearPageDirect(page);
 		}
 		goto out;
@@ -466,7 +460,6 @@ int try_to_unmap(struct page * page)
 				 */
 				pc->ptes[i] = start->ptes[victim_i];
 				start->ptes[victim_i] = 0;
-				dec_page_state(nr_reverse_maps);
 				victim_i++;
 				if (victim_i == NRPTE) {
 					page->pte.chain = start->next;
diff -puN include/linux/page-flags.h~remove-nr_reverse_maps include/linux/page-flags.h
--- 25/include/linux/page-flags.h~remove-nr_reverse_maps	2003-04-07 17:37:19.000000000 -0700
+++ 25-akpm/include/linux/page-flags.h	2003-04-07 21:16:51.000000000 -0700
@@ -83,7 +83,6 @@ struct page_state {
 	unsigned long nr_dirty;		/* Dirty writeable pages */
 	unsigned long nr_writeback;	/* Pages under writeback */
 	unsigned long nr_page_table_pages;/* Pages used for pagetables */
-	unsigned long nr_reverse_maps;	/* includes PageDirect */
 	unsigned long nr_mapped;	/* mapped into pagetables */
 	unsigned long nr_slab;		/* In slab */
 #define GET_PAGE_STATE_LAST nr_slab
diff -puN mm/page_alloc.c~remove-nr_reverse_maps mm/page_alloc.c
--- 25/mm/page_alloc.c~remove-nr_reverse_maps	2003-04-07 17:37:19.000000000 -0700
+++ 25-akpm/mm/page_alloc.c	2003-04-07 21:16:51.000000000 -0700
@@ -1437,7 +1437,6 @@ static char *vmstat_text[] = {
 	"nr_dirty",
 	"nr_writeback",
 	"nr_page_table_pages",
-	"nr_reverse_maps",
 	"nr_mapped",
 	"nr_slab",
 
diff -puN fs/proc/proc_misc.c~remove-nr_reverse_maps fs/proc/proc_misc.c
--- 25/fs/proc/proc_misc.c~remove-nr_reverse_maps	2003-04-07 17:37:19.000000000 -0700
+++ 25-akpm/fs/proc/proc_misc.c	2003-04-07 17:37:19.000000000 -0700
@@ -177,8 +177,7 @@ static int meminfo_read_proc(char *page,
 		"Mapped:       %8lu kB\n"
 		"Slab:         %8lu kB\n"
 		"Committed_AS: %8u kB\n"
-		"PageTables:   %8lu kB\n"
-		"ReverseMaps:  %8lu\n",
+		"PageTables:   %8lu kB\n",
 		K(i.totalram),
 		K(i.freeram),
 		K(i.bufferram),
@@ -197,8 +196,7 @@ static int meminfo_read_proc(char *page,
 		K(ps.nr_mapped),
 		K(ps.nr_slab),
 		K(committed),
-		K(ps.nr_page_table_pages),
-		ps.nr_reverse_maps
+		K(ps.nr_page_table_pages)
 		);
 
 		len += hugetlb_report_meminfo(page + len);

_
