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 Myklebust <trond.myklebust@fys.uio.no>

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/fs/nfs/write.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff -puN fs/nfs/write.c~nfs-writepage-fix fs/nfs/write.c
--- 25/fs/nfs/write.c~nfs-writepage-fix	2004-06-13 18:42:02.157795024 -0700
+++ 25-akpm/fs/nfs/write.c	2004-06-13 18:42:02.161794416 -0700
@@ -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; 
_