NFSv4: Fix a deadlock between nfs4_open_recover_helper() and delegreturn
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 4 Nov 2022 17:20:01 +0000 (13:20 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 7 Jan 2023 11:07:18 +0000 (12:07 +0100)
commit5cc6b7acf5228e8ee3fd17dcf535bed2212d5ae9
tree644a9a20cb3aa338bb531eed80be18ea927c7c4a
parent6f384464b9a37795f2cbfd99d2f6ffebe01b6ead
NFSv4: Fix a deadlock between nfs4_open_recover_helper() and delegreturn

[ Upstream commit 51069e4aef6257b0454057359faed0ab0c9af083 ]

If we're asked to recover open state while a delegation return is
outstanding, then the state manager thread cannot use a cached open, so
if the server returns a delegation, we can end up deadlocked behind the
pending delegreturn.
To avoid this problem, let's just ask the server not to give us a
delegation unless we're explicitly reclaiming one.

Fixes: be36e185bd26 ("NFSv4: nfs4_open_recover_helper() must set share access")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/nfs4proc.c