]> git.ipfire.org Git - thirdparty/linux.git/commit
NFSD: Revert 6c41d9a9bd0298002805758216a9c44e38a8500d
authorChuck Lever <chuck.lever@oracle.com>
Sat, 16 Dec 2023 16:57:43 +0000 (11:57 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 18 Dec 2023 16:22:16 +0000 (11:22 -0500)
commit862bee84d77fa01cc8929656ae77781abf917863
treed7d05caae5c9b58be90ccb1e5ba7877203bf8b78
parent1bd773b4f0c90123af19a853244be61518ae0556
NFSD: Revert 6c41d9a9bd0298002805758216a9c44e38a8500d

For some reason, the wait_on_bit() in nfsd4_deleg_getattr_conflict()
is waiting forever, preventing a clean server shutdown. The
requesting client might also hang waiting for a reply to the
conflicting GETATTR.

Invoking wait_on_bit() in an nfsd thread context is a hazard. The
correct fix is to replace this wait_on_bit() call site with a
mechanism that defers the conflicting GETATTR until the CB_GETATTR
completes or is known to have failed.

That will require some surgery and extended testing and it's late
in the v6.7-rc cycle, so I'm reverting now in favor of trying again
in a subsequent kernel release.

This is my fault: I should have recognized the ramifications of
calling wait_on_bit() in here before accepting this patch.

Thanks to Dai Ngo <dai.ngo@oracle.com> for diagnosing the issue.

Reported-by: Wolfgang Walter <linux-nfs@stwm.de>
Closes: https://lore.kernel.org/linux-nfs/e3d43ecdad554fbdcaa7181833834f78@stwm.de/
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4state.c
fs/nfsd/nfs4xdr.c
fs/nfsd/state.h