]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
NFS: Don't call generic_error_remove_page() while holding locks
authorTrond Myklebust <trondmy@gmail.com>
Sun, 7 Apr 2019 17:59:03 +0000 (13:59 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 25 Apr 2019 18:18:14 +0000 (14:18 -0400)
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 <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/write.c

index 9198a23bb58b1c514a61785830486fb646e33d0b..64cf6a340ba6e3afc08e65bf5255248952fb387b 100644 (file)
@@ -584,9 +584,8 @@ nfs_lock_and_join_requests(struct page *page)
 
 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);
 }