]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/nfs/file.c
[PATCH] NFS: Fix race in nfs_release_page()
[linux-2.6-omap-h63xx.git] / fs / nfs / file.c
index 0dd6be346aa740051f9730785053c5f6d41b229b..fab20d06d936c4d537712b1d22b5e1f33c676629 100644 (file)
@@ -315,14 +315,13 @@ static void nfs_invalidate_page(struct page *page, unsigned long offset)
 
 static int nfs_release_page(struct page *page, gfp_t gfp)
 {
-       /*
-        * Avoid deadlock on nfs_wait_on_request().
-        */
-       if (!(gfp & __GFP_FS))
-               return 0;
-       /* Hack... Force nfs_wb_page() to write out the page */
-       SetPageDirty(page);
-       return !nfs_wb_page(page->mapping->host, page);
+       /* If PagePrivate() is set, then the page is not freeable */
+       return 0;
+}
+
+static int nfs_launder_page(struct page *page)
+{
+       return nfs_wb_page(page->mapping->host, page);
 }
 
 const struct address_space_operations nfs_file_aops = {
@@ -338,6 +337,7 @@ const struct address_space_operations nfs_file_aops = {
 #ifdef CONFIG_NFS_DIRECTIO
        .direct_IO = nfs_direct_IO,
 #endif
+       .launder_page = nfs_launder_page,
 };
 
 static ssize_t nfs_file_write(struct kiocb *iocb, const struct iovec *iov,