aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorChristoph Lameter <clameter@sgi.com>2006-06-30 04:55:35 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-30 14:25:34 -0400
commit347ce434d57da80fd5809c0c836f206a50999c26 (patch)
treef730d151be77977f594e5cc083a93bbeb4c602cc /mm
parent65ba55f500a37272985d071c9bbb35256a2f7c14 (diff)
[PATCH] zoned vm counters: conversion of nr_pagecache to per zone counter
Currently a single atomic variable is used to establish the size of the page cache in the whole machine. The zoned VM counters have the same method of implementation as the nr_pagecache code but also allow the determination of the pagecache size per zone. Remove the special implementation for nr_pagecache and make it a zoned counter named NR_FILE_PAGES. Updates of the page cache counters are always performed with interrupts off. We can therefore use the __ variant here. 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>
Diffstat (limited to 'mm')
-rw-r--r--mm/filemap.c4
-rw-r--r--mm/mmap.c2
-rw-r--r--mm/nommu.c2
-rw-r--r--mm/page_alloc.c5
-rw-r--r--mm/swap_state.c4
-rw-r--r--mm/vmstat.c7
6 files changed, 7 insertions, 17 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index 648f2c0c8e18..87d62c44c3f0 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -120,7 +120,7 @@ void __remove_from_page_cache(struct page *page)
120 radix_tree_delete(&mapping->page_tree, page->index); 120 radix_tree_delete(&mapping->page_tree, page->index);
121 page->mapping = NULL; 121 page->mapping = NULL;
122 mapping->nrpages--; 122 mapping->nrpages--;
123 pagecache_acct(-1); 123 __dec_zone_page_state(page, NR_FILE_PAGES);
124} 124}
125 125
126void remove_from_page_cache(struct page *page) 126void remove_from_page_cache(struct page *page)
@@ -449,7 +449,7 @@ int add_to_page_cache(struct page *page, struct address_space *mapping,
449 page->mapping = mapping; 449 page->mapping = mapping;
450 page->index = offset; 450 page->index = offset;
451 mapping->nrpages++; 451 mapping->nrpages++;
452 pagecache_acct(1); 452 __inc_zone_page_state(page, NR_FILE_PAGES);
453 } 453 }
454 write_unlock_irq(&mapping->tree_lock); 454 write_unlock_irq(&mapping->tree_lock);
455 radix_tree_preload_end(); 455 radix_tree_preload_end();
diff --git a/mm/mmap.c b/mm/mmap.c
index 6446c6134b04..c1868ecdbc5f 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -96,7 +96,7 @@ int __vm_enough_memory(long pages, int cap_sys_admin)
96 if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) { 96 if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) {
97 unsigned long n; 97 unsigned long n;
98 98
99 free = get_page_cache_size(); 99 free = global_page_state(NR_FILE_PAGES);
100 free += nr_swap_pages; 100 free += nr_swap_pages;
101 101
102 /* 102 /*
diff --git a/mm/nommu.c b/mm/nommu.c
index 029fadac0fb5..5151c44a8257 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -1122,7 +1122,7 @@ int __vm_enough_memory(long pages, int cap_sys_admin)
1122 if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) { 1122 if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) {
1123 unsigned long n; 1123 unsigned long n;
1124 1124
1125 free = get_page_cache_size(); 1125 free = global_page_state(NR_FILE_PAGES);
1126 free += nr_swap_pages; 1126 free += nr_swap_pages;
1127 1127
1128 /* 1128 /*
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 04dd2b01b2b7..8350720f98a8 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2124,16 +2124,11 @@ static int page_alloc_cpu_notify(struct notifier_block *self,
2124 unsigned long action, void *hcpu) 2124 unsigned long action, void *hcpu)
2125{ 2125{
2126 int cpu = (unsigned long)hcpu; 2126 int cpu = (unsigned long)hcpu;
2127 long *count;
2128 unsigned long *src, *dest; 2127 unsigned long *src, *dest;
2129 2128
2130 if (action == CPU_DEAD) { 2129 if (action == CPU_DEAD) {
2131 int i; 2130 int i;
2132 2131
2133 /* Drain local pagecache count. */
2134 count = &per_cpu(nr_pagecache_local, cpu);
2135 atomic_add(*count, &nr_pagecache);
2136 *count = 0;
2137 local_irq_disable(); 2132 local_irq_disable();
2138 __drain_pages(cpu); 2133 __drain_pages(cpu);
2139 2134
diff --git a/mm/swap_state.c b/mm/swap_state.c
index 7535211bb495..fccbd9bba77b 100644
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -87,7 +87,7 @@ static int __add_to_swap_cache(struct page *page, swp_entry_t entry,
87 SetPageSwapCache(page); 87 SetPageSwapCache(page);
88 set_page_private(page, entry.val); 88 set_page_private(page, entry.val);
89 total_swapcache_pages++; 89 total_swapcache_pages++;
90 pagecache_acct(1); 90 __inc_zone_page_state(page, NR_FILE_PAGES);
91 } 91 }
92 write_unlock_irq(&swapper_space.tree_lock); 92 write_unlock_irq(&swapper_space.tree_lock);
93 radix_tree_preload_end(); 93 radix_tree_preload_end();
@@ -132,7 +132,7 @@ void __delete_from_swap_cache(struct page *page)
132 set_page_private(page, 0); 132 set_page_private(page, 0);
133 ClearPageSwapCache(page); 133 ClearPageSwapCache(page);
134 total_swapcache_pages--; 134 total_swapcache_pages--;
135 pagecache_acct(-1); 135 __dec_zone_page_state(page, NR_FILE_PAGES);
136 INC_CACHE_INFO(del_total); 136 INC_CACHE_INFO(del_total);
137} 137}
138 138
diff --git a/mm/vmstat.c b/mm/vmstat.c
index 4800091c129a..f16b33eb6d5c 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -20,12 +20,6 @@
20 */ 20 */
21DEFINE_PER_CPU(struct page_state, page_states) = {0}; 21DEFINE_PER_CPU(struct page_state, page_states) = {0};
22 22
23atomic_t nr_pagecache = ATOMIC_INIT(0);
24EXPORT_SYMBOL(nr_pagecache);
25#ifdef CONFIG_SMP
26DEFINE_PER_CPU(long, nr_pagecache_local) = 0;
27#endif
28
29static void __get_page_state(struct page_state *ret, int nr, cpumask_t *cpumask) 23static void __get_page_state(struct page_state *ret, int nr, cpumask_t *cpumask)
30{ 24{
31 unsigned cpu; 25 unsigned cpu;
@@ -402,6 +396,7 @@ struct seq_operations fragmentation_op = {
402static char *vmstat_text[] = { 396static char *vmstat_text[] = {
403 /* Zoned VM counters */ 397 /* Zoned VM counters */
404 "nr_mapped", 398 "nr_mapped",
399 "nr_file_pages",
405 400
406 /* Page state */ 401 /* Page state */
407 "nr_dirty", 402 "nr_dirty",