From: Trond Myklebust Date: Fri, 19 Mar 2010 17:55:17 +0000 (-0400) Subject: NFS: Prevent another deadlock in nfs_release_page() X-Git-Tag: firefly_0821_release~10186^2~1972 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0b4d9d6ac1f1d22fb0342305cd1e9bf67307d194;p=firefly-linux-kernel-4.4.55.git NFS: Prevent another deadlock in nfs_release_page() commit d812e575822a2b7ab1a7cadae2571505ec6ec2bd upstream. We should not attempt to free the page if __GFP_FS is not set. Otherwise we can deadlock as per http://bugzilla.kernel.org/show_bug.cgi?id=15578 Signed-off-by: Trond Myklebust Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 393d40fd7eb9..61b3bf503ee1 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -486,7 +486,8 @@ static int nfs_release_page(struct page *page, gfp_t gfp) { dfprintk(PAGECACHE, "NFS: release_page(%p)\n", page); - if (gfp & __GFP_WAIT) + /* Only do I/O if gfp is a superset of GFP_KERNEL */ + if ((gfp & GFP_KERNEL) == GFP_KERNEL) nfs_wb_page(page->mapping->host, page); /* If PagePrivate() is set, then the page is not freeable */ if (PagePrivate(page))