From: "J. Bruce Fields" <bfields@fieldses.org>
To: Jeff Layton <jlayton@kernel.org>
Cc: Chuck Lever <chuck.lever@oracle.com>, Neil Brown <neilb@suse.de>,
Olga Kornievskaia <okorniev@redhat.com>,
Dai Ngo <Dai.Ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
Kinglong Mee <kinglongmee@gmail.com>,
Trond Myklebust <trondmy@kernel.org>,
Anna Schumaker <anna@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org
Subject: Re: [PATCH 3/8] nfsd: when CB_SEQUENCE gets NFS4ERR_DELAY, release the slot
Date: Fri, 24 Jan 2025 09:00:48 -0500 [thread overview]
Message-ID: <Z5OdECjsie-MCFel@poldevia.fieldses.org> (raw)
In-Reply-To: <4f89125253d82233b5b14c6e0c4fd7565b1824e0.camel@kernel.org>
On Thu, Jan 23, 2025 at 06:20:08PM -0500, Jeff Layton wrote:
> On Thu, 2025-01-23 at 17:18 -0500, Chuck Lever wrote:
> > On 1/23/25 3:25 PM, Jeff Layton wrote:
> > > RFC8881, 15.1.1.3 says this about NFS4ERR_DELAY:
> > >
> > > "For any of a number of reasons, the replier could not process this
> > > operation in what was deemed a reasonable time. The client should wait
> > > and then try the request with a new slot and sequence value."
> >
> > A little farther down, Section 15.1.1.3 says this:
> >
> > "If NFS4ERR_DELAY is returned on a SEQUENCE operation, the request is
> > retried in full with the SEQUENCE operation containing the same slot
> > and sequence values."
> >
> > And:
> >
> > "If NFS4ERR_DELAY is returned on an operation other than the first in
> > the request, the request when retried MUST contain a SEQUENCE operation
> > that is different than the original one, with either the slot ID or the
> > sequence value different from that in the original request."
> >
> > My impression is that the slot needs to be held and used again only if
> > the server responded with NFS4ERR_DELAY on the SEQUENCE operation. If
> > the NFS4ERR_DELAY was the status of the 2nd or later operation in the
> > COMPOUND, then yes, a different slot, or the same slot with a bumped
> > sequence number, must be used.
> >
> > The current code in nfsd4_cb_sequence_done() appears to be correct in
> > this regard.
> >
>
> Ok! I stand corrected. We should be able to just drop this patch, but
> some of the later patches may need some trivial merge conflicts fixed
> up.
>
> Any idea why SEQUENCE is different in this regard?
Isn't DELAY on SEQUENCE an indication that the operation is still in
progress? The difference between retrying the same slot or not is
whether you're asking the server again for the result of the previous
operation, or whether you're asking it to perform a new one.
If you get DELAY on a later op and then keep retrying with the same
seqid/slot then I'd expect you to get stuck in an infinite loop getting
a DELAY response out of the reply cache.
--b.
> This rule seems a
> bit arbitrary. If the response is NFS4ERR_DELAY, then why would it
> matter which slot you use when retransmitting? The responder is just
> saying "go away and come back later".
>
> What if the responder repeatedly returns NFS4ERR_DELAY (maybe because
> it's under resource pressure), and also shrinks the slot table in the
> meantime? It seems like that might put the requestor in an untenable
> position.
>
> Maybe we should lobby to get this changed in the spec?
>
> >
> > > This is CB_SEQUENCE, but I believe the same rule applies. Release the
> > > slot before submitting the delayed RPC.
> > >
> > > Fixes: 7ba6cad6c88f ("nfsd: New helper nfsd4_cb_sequence_done() for processing more cb errors")
> > > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > > ---
> > > fs/nfsd/nfs4callback.c | 1 +
> > > 1 file changed, 1 insertion(+)
> > >
> > > diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
> > > index bfc9de1fcb67b4f05ed2f7a28038cd8290809c17..c26ccb9485b95499fc908833a384d741e966a8db 100644
> > > --- a/fs/nfsd/nfs4callback.c
> > > +++ b/fs/nfsd/nfs4callback.c
> > > @@ -1392,6 +1392,7 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback
> > > goto need_restart;
> > > case -NFS4ERR_DELAY:
> > > cb->cb_seq_status = 1;
> > > + nfsd41_cb_release_slot(cb);
> > > if (!rpc_restart_call(task))
> > > goto out;
> > >
> > >
> >
> >
>
> --
> Jeff Layton <jlayton@kernel.org>
next prev parent reply other threads:[~2025-01-24 14:07 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-23 20:25 [PATCH 0/8] nfsd: CB_SEQUENCE error handling fixes and cleanups Jeff Layton
2025-01-23 20:25 ` [PATCH 1/8] nfsd: don't restart v4.1+ callback when RPC_SIGNALLED is set Jeff Layton
2025-01-25 16:24 ` Chuck Lever
2025-01-25 22:04 ` Jeff Layton
2025-01-25 23:01 ` NeilBrown
2025-01-26 11:18 ` Jeff Layton
2025-01-26 16:41 ` Chuck Lever
2025-01-27 15:43 ` Jeff Layton
2025-01-27 17:00 ` Chuck Lever
2025-01-23 20:25 ` [PATCH 2/8] nfsd: fix CB_SEQUENCE error handling of NFS4ERR_{BADSLOT,BADSESSION,SEQ_MISORDERED} Jeff Layton
2025-01-24 14:32 ` Chuck Lever
2025-01-24 14:46 ` Jeff Layton
2025-01-24 15:31 ` Chuck Lever
2025-01-24 16:04 ` Jeff Layton
2025-01-24 16:08 ` Jeff Layton
2025-01-23 20:25 ` [PATCH 3/8] nfsd: when CB_SEQUENCE gets NFS4ERR_DELAY, release the slot Jeff Layton
2025-01-23 22:18 ` Chuck Lever
2025-01-23 23:20 ` Jeff Layton
2025-01-24 1:30 ` Tom Talpey
2025-01-24 14:00 ` J. Bruce Fields [this message]
2025-01-24 14:11 ` Jeff Layton
2025-01-24 20:29 ` Tom Talpey
2025-01-24 17:45 ` Olga Kornievskaia
2025-01-24 17:47 ` Olga Kornievskaia
2025-01-23 20:25 ` [PATCH 4/8] nfsd: fix default case in nfsd4_cb_sequence_done() Jeff Layton
2025-01-23 20:25 ` [PATCH 5/8] nfsd: reverse default of "ret" variable " Jeff Layton
2025-01-23 20:25 ` [PATCH 6/8] nfsd: remove unneeded forward declaration of nfsd4_mark_cb_fault() Jeff Layton
2025-01-23 20:25 ` [PATCH 7/8] nfsd: clean up and amend comments around nfsd4_cb_sequence_done() Jeff Layton
2025-01-24 14:43 ` Chuck Lever
2025-01-24 14:50 ` Jeff Layton
2025-01-24 15:05 ` Chuck Lever
2025-01-24 15:31 ` Jeff Layton
2025-01-24 15:42 ` Chuck Lever
2025-01-26 16:50 ` Chuck Lever
2025-01-23 20:25 ` [PATCH 8/8] sunrpc: make rpc_restart_call() and rpc_restart_call_prepare() void return Jeff Layton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z5OdECjsie-MCFel@poldevia.fieldses.org \
--to=bfields@fieldses.org \
--cc=Dai.Ngo@oracle.com \
--cc=anna@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=jlayton@kernel.org \
--cc=kinglongmee@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=netdev@vger.kernel.org \
--cc=okorniev@redhat.com \
--cc=pabeni@redhat.com \
--cc=tom@talpey.com \
--cc=trondmy@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox