]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] Fix nfs writepage behaviour
authorAndrew Morton <akpm@osdl.org>
Mon, 14 Jun 2004 06:16:27 +0000 (23:16 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Mon, 14 Jun 2004 06:16:27 +0000 (23:16 -0700)
From: Nick Piggin <nickpiggin@yahoo.com.au>

nfs_writepage() refuses to write back mapped pages at all on the page
reclaim path, causing systems to get locked up when there's a lot of dirty
mmapped data around.  The patch changes NFS so that it will start I/O
against these pages.

The code as it stands is designed to defer writeout to pdflush which can do
larger, more efficient I/Os.  But there shouldn't be much traffic by this
path, and going slow is better than not going at all.

Patch originally from Trond.

Signed-off-by: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/nfs/write.c

index 483e8311b28ddb5c59dec03c554657b1fb8fdd3c..a01a2fa0a598dcc8f99efb27da75fd60a728d833 100644 (file)
@@ -314,7 +314,7 @@ do_it:
                if (err >= 0) {
                        err = 0;
                        if (wbc->for_reclaim)
-                               err = WRITEPAGE_ACTIVATE;
+                               nfs_flush_inode(inode, 0, 0, FLUSH_STABLE);
                }
        } else {
                err = nfs_writepage_sync(NULL, inode, page, 0,
@@ -327,8 +327,7 @@ do_it:
        }
        unlock_kernel();
 out:
-       if (err != WRITEPAGE_ACTIVATE)
-               unlock_page(page);
+       unlock_page(page);
        if (inode_referenced)
                iput(inode);
        return err;