diff options
author | Christoph Lameter <clameter@sgi.com> | 2006-06-30 04:55:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-30 14:25:34 -0400 |
commit | 65ba55f500a37272985d071c9bbb35256a2f7c14 (patch) | |
tree | e7735326ef2d2dca9d00a6c5ae47e9eb03c7834f /mm/rmap.c | |
parent | 2244b95a7bcf8d24196f8a3a44187ba5dfff754c (diff) |
[PATCH] zoned vm counters: convert nr_mapped to per zone counter
nr_mapped is important because it allows a determination of how many pages of
a zone are not mapped, which would allow a more efficient means of determining
when we need to reclaim memory in a zone.
We take the nr_mapped field out of the page state structure and define a new
per zone counter named NR_FILE_MAPPED (the anonymous pages will be split off
from NR_MAPPED in the next patch).
We replace the use of nr_mapped in various kernel locations. This avoids the
looping over all processors in try_to_free_pages(), writeback, reclaim (swap +
zone reclaim).
[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>
Diffstat (limited to 'mm/rmap.c')
-rw-r--r-- | mm/rmap.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -455,7 +455,7 @@ static void __page_set_anon_rmap(struct page *page, | |||
455 | * nr_mapped state can be updated without turning off | 455 | * nr_mapped state can be updated without turning off |
456 | * interrupts because it is not modified via interrupt. | 456 | * interrupts because it is not modified via interrupt. |
457 | */ | 457 | */ |
458 | __inc_page_state(nr_mapped); | 458 | __inc_zone_page_state(page, NR_FILE_MAPPED); |
459 | } | 459 | } |
460 | 460 | ||
461 | /** | 461 | /** |
@@ -499,7 +499,7 @@ void page_add_new_anon_rmap(struct page *page, | |||
499 | void page_add_file_rmap(struct page *page) | 499 | void page_add_file_rmap(struct page *page) |
500 | { | 500 | { |
501 | if (atomic_inc_and_test(&page->_mapcount)) | 501 | if (atomic_inc_and_test(&page->_mapcount)) |
502 | __inc_page_state(nr_mapped); | 502 | __inc_zone_page_state(page, NR_FILE_MAPPED); |
503 | } | 503 | } |
504 | 504 | ||
505 | /** | 505 | /** |
@@ -531,7 +531,7 @@ void page_remove_rmap(struct page *page) | |||
531 | */ | 531 | */ |
532 | if (page_test_and_clear_dirty(page)) | 532 | if (page_test_and_clear_dirty(page)) |
533 | set_page_dirty(page); | 533 | set_page_dirty(page); |
534 | __dec_page_state(nr_mapped); | 534 | __dec_zone_page_state(page, NR_FILE_MAPPED); |
535 | } | 535 | } |
536 | } | 536 | } |
537 | 537 | ||