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 <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Trond Myklebust 2019-04-07 13:59:03 -04:00 committed by Greg Kroah-Hartman
parent c1a4390ec8
commit fecb9d534d

View File

@ -598,9 +598,8 @@ release_request:
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);
}