diff options
author | Christoph Lameter <clameter@sgi.com> | 2006-06-30 04:55:39 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-30 14:25:35 -0400 |
commit | b1e7a8fd854d2f895730e82137400012b509650e (patch) | |
tree | 9fba87ff6b0146ebd4ee5bc7d5f0c8b037dbb3ad /fs/nfs | |
parent | df849a1529c106f7460e51479ca78fe07b07dc8c (diff) |
[PATCH] zoned vm counters: conversion of nr_dirty to per zone counter
This makes nr_dirty a per zone counter. Looping over all processors is
avoided during writeback state determination.
The counter aggregation for nr_dirty had to be undone in the NFS layer since
we summed up the page counts from multiple zones. Someone more familiar with
NFS should probably review what I have done.
[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 'fs/nfs')
-rw-r--r-- | fs/nfs/pagelist.c | 1 | ||||
-rw-r--r-- | fs/nfs/write.c | 3 |
2 files changed, 2 insertions, 2 deletions
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c index d89f6fb3b3a3..26b1fe909377 100644 --- a/fs/nfs/pagelist.c +++ b/fs/nfs/pagelist.c | |||
@@ -315,6 +315,7 @@ nfs_scan_lock_dirty(struct nfs_inode *nfsi, struct list_head *dst, | |||
315 | req->wb_index, NFS_PAGE_TAG_DIRTY); | 315 | req->wb_index, NFS_PAGE_TAG_DIRTY); |
316 | nfs_list_remove_request(req); | 316 | nfs_list_remove_request(req); |
317 | nfs_list_add_request(req, dst); | 317 | nfs_list_add_request(req, dst); |
318 | dec_zone_page_state(req->wb_page, NR_FILE_DIRTY); | ||
318 | res++; | 319 | res++; |
319 | } | 320 | } |
320 | } | 321 | } |
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 8fccb9cb173b..a6d1ca513dde 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -497,7 +497,7 @@ nfs_mark_request_dirty(struct nfs_page *req) | |||
497 | nfs_list_add_request(req, &nfsi->dirty); | 497 | nfs_list_add_request(req, &nfsi->dirty); |
498 | nfsi->ndirty++; | 498 | nfsi->ndirty++; |
499 | spin_unlock(&nfsi->req_lock); | 499 | spin_unlock(&nfsi->req_lock); |
500 | inc_page_state(nr_dirty); | 500 | inc_zone_page_state(req->wb_page, NR_FILE_DIRTY); |
501 | mark_inode_dirty(inode); | 501 | mark_inode_dirty(inode); |
502 | } | 502 | } |
503 | 503 | ||
@@ -609,7 +609,6 @@ nfs_scan_dirty(struct inode *inode, struct list_head *dst, unsigned long idx_sta | |||
609 | if (nfsi->ndirty != 0) { | 609 | if (nfsi->ndirty != 0) { |
610 | res = nfs_scan_lock_dirty(nfsi, dst, idx_start, npages); | 610 | res = nfs_scan_lock_dirty(nfsi, dst, idx_start, npages); |
611 | nfsi->ndirty -= res; | 611 | nfsi->ndirty -= res; |
612 | sub_page_state(nr_dirty,res); | ||
613 | if ((nfsi->ndirty == 0) != list_empty(&nfsi->dirty)) | 612 | if ((nfsi->ndirty == 0) != list_empty(&nfsi->dirty)) |
614 | printk(KERN_ERR "NFS: desynchronized value of nfs_i.ndirty.\n"); | 613 | printk(KERN_ERR "NFS: desynchronized value of nfs_i.ndirty.\n"); |
615 | } | 614 | } |