]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
NFSv4: Fix a deadlock when recovering state on a sillyrenamed file
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Sat, 1 Feb 2025 20:00:09 +0000 (15:00 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Mar 2025 17:25:27 +0000 (18:25 +0100)
commit4fe4ae6c2e01d028856b73b6328b12b8945df871
tree8ecc848e42c58721a7760acc3c5bf9b1142b0f13
parenta3ae6a60baf7cce449306a33d46ecdbd40211b37
NFSv4: Fix a deadlock when recovering state on a sillyrenamed file

[ Upstream commit 8f8df955f078e1a023ee55161935000a67651f38 ]

If the file is sillyrenamed, and slated for delete on close, it is
possible for a server reboot to triggeer an open reclaim, with can again
race with the application call to close(). When that happens, the call
to put_nfs_open_context() can trigger a synchronous delegreturn call
which deadlocks because it is not marked as privileged.

Instead, ensure that the call to nfs4_inode_return_delegation_on_close()
catches the delegreturn, and schedules it asynchronously.

Reported-by: Li Lingfeng <lilingfeng3@huawei.com>
Fixes: adb4b42d19ae ("Return the delegation when deleting sillyrenamed files")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/delegation.c
fs/nfs/delegation.h
fs/nfs/nfs4proc.c