From: Greg Kroah-Hartman Date: Tue, 4 Feb 2025 11:36:03 +0000 (+0100) Subject: 5.10-stable patches X-Git-Tag: v6.6.76~48 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=637c537e68d6b5827c7d87ec9100a9fcadf640e7;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: nfsd-reset-cb_seq_status-after-nfs4err_delay.patch --- diff --git a/queue-5.10/nfsd-reset-cb_seq_status-after-nfs4err_delay.patch b/queue-5.10/nfsd-reset-cb_seq_status-after-nfs4err_delay.patch new file mode 100644 index 0000000000..2b251a67ed --- /dev/null +++ b/queue-5.10/nfsd-reset-cb_seq_status-after-nfs4err_delay.patch @@ -0,0 +1,41 @@ +From 961b4b5e86bf56a2e4b567f81682defa5cba957e Mon Sep 17 00:00:00 2001 +From: Chuck Lever +Date: Fri, 26 Jan 2024 12:45:17 -0500 +Subject: NFSD: Reset cb_seq_status after NFS4ERR_DELAY + +From: Chuck Lever + +commit 961b4b5e86bf56a2e4b567f81682defa5cba957e upstream. + +I noticed that once an NFSv4.1 callback operation gets a +NFS4ERR_DELAY status on CB_SEQUENCE and then the connection is lost, +the callback client loops, resending it indefinitely. + +The switch arm in nfsd4_cb_sequence_done() that handles +NFS4ERR_DELAY uses rpc_restart_call() to rearm the RPC state machine +for the retransmit, but that path does not call the rpc_prepare_call +callback again. Thus cb_seq_status is set to -10008 by the first +NFS4ERR_DELAY result, but is never set back to 1 for the retransmits. + +nfsd4_cb_sequence_done() thinks it's getting nothing but a +long series of CB_SEQUENCE NFS4ERR_DELAY replies. + +Fixes: 7ba6cad6c88f ("nfsd: New helper nfsd4_cb_sequence_done() for processing more cb errors") +Reviewed-by: Jeff Layton +Reviewed-by: Benjamin Coddington +Signed-off-by: Chuck Lever +Signed-off-by: Greg Kroah-Hartman +--- + fs/nfsd/nfs4callback.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/fs/nfsd/nfs4callback.c ++++ b/fs/nfsd/nfs4callback.c +@@ -1202,6 +1202,7 @@ static bool nfsd4_cb_sequence_done(struc + ret = false; + break; + case -NFS4ERR_DELAY: ++ cb->cb_seq_status = 1; + if (!rpc_restart_call(task)) + goto out; + diff --git a/queue-5.10/series b/queue-5.10/series index 9cd77659e8..7d93e88014 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -125,3 +125,4 @@ genksyms-fix-memory-leak-when-the-same-symbol-is-add.patch genksyms-fix-memory-leak-when-the-same-symbol-is-rea.patch hexagon-fix-using-plain-integer-as-null-pointer-warn.patch hexagon-fix-unbalanced-spinlock-in-die.patch +nfsd-reset-cb_seq_status-after-nfs4err_delay.patch