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, 31 Dec 2022 12:14:13 +0000 (13:14 +0100)
commit9a96aff53c2165a3017531bfd6b1930a4591a6a0
treefaa5977436f3a09a003ba45c46f15ce562a1bf76
parentc6aca4c7ba8f6d40a0cfeeb09160dd8efdf97c64
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