From: bryan@schmersal.org
To: calum.mackay@oracle.com
Cc: linux-nfs@vger.kernel.org, Bryan Schmersal <bryan@schmersal.org>
Subject: [PATCH pynfs] Actually reuse the slot only when the sequence op gets an NFS4ERR_DELAY status. Before this patch, any NFS4ERR_DELAY would consume a new slot even when the sequence op was not the culprit.
Date: Thu, 10 Apr 2025 14:17:20 -0700 [thread overview]
Message-ID: <20250410211720.480587-1-bryan@schmersal.org> (raw)
From: Bryan Schmersal <bryan@schmersal.org>
Signed-off-by: Bryan Schmersal <bryan@schmersal.org>
---
nfs4.1/nfs4client.py | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
index f4fabcc..a180872 100644
--- a/nfs4.1/nfs4client.py
+++ b/nfs4.1/nfs4client.py
@@ -539,17 +539,21 @@ class SessionRecord(object):
delay_time = 1
handle_state_errors = kwargs.pop("handle_state_errors", True)
saved_kwargs = kwargs
- slot, seq_op = self._prepare_compound(kwargs)
+ do_prepare = True
for item in range(max_retries):
+ if do_prepare:
+ slot, seq_op = self._prepare_compound(saved_kwargs)
res = self.c.compound([seq_op] + ops, **kwargs)
res = self.update_seq_state(res, slot)
if res.status != NFS4ERR_DELAY or not handle_state_errors:
break
- if res.resarray[0].sr_status != NFS4ERR_DELAY:
+ if res.resarray[0].sr_status == NFS4ERR_DELAY:
# As per errata ID 2006 for RFC 5661 section 15.1.1.3
# don't update the slot and sequence ID if the sequence
# operation itself receives NFS4ERR_DELAY
- slot, seq_op = self._prepare_compound(saved_kwargs)
+ do_prepare = False
+ else:
+ do_prepare = True
time.sleep(delay_time)
res = self.remove_seq_op(res)
return res
--
2.34.1
reply other threads:[~2025-04-10 21:17 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20250410211720.480587-1-bryan@schmersal.org \
--to=bryan@schmersal.org \
--cc=calum.mackay@oracle.com \
--cc=linux-nfs@vger.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