From: Trond Myklebust Date: Sun, 7 Apr 2019 17:59:03 +0000 (-0400) Subject: NFS: Don't call generic_error_remove_page() while holding locks X-Git-Tag: v4.14.329~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13ab9909f388ab7bfd373350a7f84e47def14216;p=thirdparty%2Fkernel%2Fstable.git NFS: Don't call generic_error_remove_page() while holding locks [ Upstream commit 22876f540bdf19af9e4fca893ce02ba7ee65ebcc ] The NFS read code can trigger writeback while holding the page lock. If an error then triggers a call to nfs_write_error_remove_page(), we can deadlock. Signed-off-by: Trond Myklebust Signed-off-by: Anna Schumaker Signed-off-by: Sasha Levin --- diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 010733c8bdcd3..1b5791d5537a3 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -587,9 +587,8 @@ try_again: static void nfs_write_error_remove_page(struct nfs_page *req) { + SetPageError(req->wb_page); nfs_end_page_writeback(req); - generic_error_remove_page(page_file_mapping(req->wb_page), - req->wb_page); nfs_release_request(req); }