* [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
@ 2025-06-25 8:00 Chen Hanxiao
2025-06-25 13:58 ` Jeff Layton
2025-06-25 17:20 ` Mkrtchyan, Tigran
0 siblings, 2 replies; 6+ messages in thread
From: Chen Hanxiao @ 2025-06-25 8:00 UTC (permalink / raw)
To: calum.mackay; +Cc: linux-nfs
Increased the default value of ca_maxrequests from 8 to 16 to address a
RuntimeError encountered in DELEG8.
This change resolves the issue where
DELEG8 st_delegation.testDelegRevocation
fails with a RuntimeError: "Out of slots".
Signed-off-by: Chen Hanxiao <chenhx.fnst@fujitsu.com>
---
nfs4.1/nfs4client.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
index f4fabcc..fa31b34 100644
--- a/nfs4.1/nfs4client.py
+++ b/nfs4.1/nfs4client.py
@@ -390,7 +390,7 @@ class ClientRecord(object):
fore_attrs=None, back_attrs=None, sec=None,
prog=None,
max_retries=1, delay_time=1):
- chan_attrs = channel_attrs4(0,8192,8192,8192,128,8,[])
+ chan_attrs = channel_attrs4(0,8192,8192,8192,128,16,[])
if fore_attrs is None:
fore_attrs = chan_attrs
if back_attrs is None:
--
2.39.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
2025-06-25 8:00 [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16 Chen Hanxiao
@ 2025-06-25 13:58 ` Jeff Layton
2025-06-25 18:26 ` Mkrtchyan, Tigran
2025-06-25 17:20 ` Mkrtchyan, Tigran
1 sibling, 1 reply; 6+ messages in thread
From: Jeff Layton @ 2025-06-25 13:58 UTC (permalink / raw)
To: Chen Hanxiao, calum.mackay; +Cc: linux-nfs
On Wed, 2025-06-25 at 16:00 +0800, Chen Hanxiao wrote:
> Increased the default value of ca_maxrequests from 8 to 16 to address a
> RuntimeError encountered in DELEG8.
>
> This change resolves the issue where
> DELEG8 st_delegation.testDelegRevocation
> fails with a RuntimeError: "Out of slots".
>
> Signed-off-by: Chen Hanxiao <chenhx.fnst@fujitsu.com>
> ---
> nfs4.1/nfs4client.py | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
> index f4fabcc..fa31b34 100644
> --- a/nfs4.1/nfs4client.py
> +++ b/nfs4.1/nfs4client.py
> @@ -390,7 +390,7 @@ class ClientRecord(object):
> fore_attrs=None, back_attrs=None, sec=None,
> prog=None,
> max_retries=1, delay_time=1):
> - chan_attrs = channel_attrs4(0,8192,8192,8192,128,8,[])
> + chan_attrs = channel_attrs4(0,8192,8192,8192,128,16,[])
> if fore_attrs is None:
> fore_attrs = chan_attrs
> if back_attrs is None:
Increasing the size should be harmless, but it doesn't look like DELEG8
does a lot of concurrent RPCs. How is this running out of slots?
--
Jeff Layton <jlayton@kernel.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
2025-06-25 8:00 [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16 Chen Hanxiao
2025-06-25 13:58 ` Jeff Layton
@ 2025-06-25 17:20 ` Mkrtchyan, Tigran
2025-06-25 18:17 ` Calum Mackay
1 sibling, 1 reply; 6+ messages in thread
From: Mkrtchyan, Tigran @ 2025-06-25 17:20 UTC (permalink / raw)
To: Chen Hanxiao; +Cc: Calum Mackay, linux-nfs
[-- Attachment #1: Type: text/plain, Size: 1439 bytes --]
I had a different attempt to address that:
https://lore.kernel.org/all/20250415114814.285400-1-tigran.mkrtchyan@desy.de/\
Tigran.
----- Original Message -----
> From: "Chen Hanxiao" <chenhx.fnst@fujitsu.com>
> To: "Calum Mackay" <calum.mackay@oracle.com>
> Cc: "linux-nfs" <linux-nfs@vger.kernel.org>
> Sent: Wednesday, 25 June, 2025 10:00:59
> Subject: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
> Increased the default value of ca_maxrequests from 8 to 16 to address a
> RuntimeError encountered in DELEG8.
>
> This change resolves the issue where
> DELEG8 st_delegation.testDelegRevocation
> fails with a RuntimeError: "Out of slots".
>
> Signed-off-by: Chen Hanxiao <chenhx.fnst@fujitsu.com>
> ---
> nfs4.1/nfs4client.py | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
> index f4fabcc..fa31b34 100644
> --- a/nfs4.1/nfs4client.py
> +++ b/nfs4.1/nfs4client.py
> @@ -390,7 +390,7 @@ class ClientRecord(object):
> fore_attrs=None, back_attrs=None, sec=None,
> prog=None,
> max_retries=1, delay_time=1):
> - chan_attrs = channel_attrs4(0,8192,8192,8192,128,8,[])
> + chan_attrs = channel_attrs4(0,8192,8192,8192,128,16,[])
> if fore_attrs is None:
> fore_attrs = chan_attrs
> if back_attrs is None:
> --
> 2.39.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 2826 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
2025-06-25 17:20 ` Mkrtchyan, Tigran
@ 2025-06-25 18:17 ` Calum Mackay
0 siblings, 0 replies; 6+ messages in thread
From: Calum Mackay @ 2025-06-25 18:17 UTC (permalink / raw)
To: Mkrtchyan, Tigran, Chen Hanxiao; +Cc: Calum Mackay, linux-nfs
Yes, apologies, I have a wee backlog of pynfs fixes to apply, which I
shall get to later this week, or early next.
On 25/06/2025 6:20 pm, Mkrtchyan, Tigran wrote:
>
> I had a different attempt to address that:
>
> https://lore.kernel.org/all/20250415114814.285400-1-tigran.mkrtchyan@desy.de/\
>
> Tigran.
>
> ----- Original Message -----
>> From: "Chen Hanxiao" <chenhx.fnst@fujitsu.com>
>> To: "Calum Mackay" <calum.mackay@oracle.com>
>> Cc: "linux-nfs" <linux-nfs@vger.kernel.org>
>> Sent: Wednesday, 25 June, 2025 10:00:59
>> Subject: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
>
>> Increased the default value of ca_maxrequests from 8 to 16 to address a
>> RuntimeError encountered in DELEG8.
>>
>> This change resolves the issue where
>> DELEG8 st_delegation.testDelegRevocation
>> fails with a RuntimeError: "Out of slots".
>>
>> Signed-off-by: Chen Hanxiao <chenhx.fnst@fujitsu.com>
>> ---
>> nfs4.1/nfs4client.py | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
>> index f4fabcc..fa31b34 100644
>> --- a/nfs4.1/nfs4client.py
>> +++ b/nfs4.1/nfs4client.py
>> @@ -390,7 +390,7 @@ class ClientRecord(object):
>> fore_attrs=None, back_attrs=None, sec=None,
>> prog=None,
>> max_retries=1, delay_time=1):
>> - chan_attrs = channel_attrs4(0,8192,8192,8192,128,8,[])
>> + chan_attrs = channel_attrs4(0,8192,8192,8192,128,16,[])
>> if fore_attrs is None:
>> fore_attrs = chan_attrs
>> if back_attrs is None:
>> --
>> 2.39.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
2025-06-25 13:58 ` Jeff Layton
@ 2025-06-25 18:26 ` Mkrtchyan, Tigran
2025-06-26 2:52 ` 回复: " Hanxiao Chen (Fujitsu)
0 siblings, 1 reply; 6+ messages in thread
From: Mkrtchyan, Tigran @ 2025-06-25 18:26 UTC (permalink / raw)
To: Jeff Layton; +Cc: Chen Hanxiao, Calum Mackay, linux-nfs
[-- Attachment #1: Type: text/plain, Size: 3238 bytes --]
I guess this is the same issue that I tried to address with
https://lore.kernel.org/all/20250415114814.285400-1-tigran.mkrtchyan@desy.de/
DELEG 8 goes into a retry loop if the server responds NFS4ERR_DELAY when the server tries to recall the delegation and responds with NFS4ERR_DELAY to the client. The handling of a compound call will retry and re-use the slot.
The handling of DELEG8 will retry, too, but use a new slot. AFAIKS, slots are never freed:
```
$ git grep slot.inuse -- nfs4.1/nfs4client.py
nfs4.1/nfs4client.py: if not slot.inuse:
nfs4.1/nfs4client.py: slot.inuse = True
```
So fails...
```
def choose_slot(self):
self.lock.acquire()
try:
for slot in self.slots:
if not slot.inuse:
slot.inuse = True
return slot
raise RuntimeError("Out of slots")
finally:
self.lock.release()
```
It looks like all the tests up to now have issued less than ca_maxrequests:)
The proper fix probably should be someting like:
diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
index f4fabcc..fe404cd 100644
--- a/nfs4.1/nfs4client.py
+++ b/nfs4.1/nfs4client.py
@@ -551,6 +551,7 @@ class SessionRecord(object):
# operation itself receives NFS4ERR_DELAY
slot, seq_op = self._prepare_compound(saved_kwargs)
time.sleep(delay_time)
+ slot.inuse = False
res = self.remove_seq_op(res)
return res
Tigran.
----- Original Message -----
> From: "Jeff Layton" <jlayton@kernel.org>
> To: "Chen Hanxiao" <chenhx.fnst@fujitsu.com>, "Calum Mackay" <calum.mackay@oracle.com>
> Cc: "linux-nfs" <linux-nfs@vger.kernel.org>
> Sent: Wednesday, 25 June, 2025 15:58:51
> Subject: Re: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
> On Wed, 2025-06-25 at 16:00 +0800, Chen Hanxiao wrote:
>> Increased the default value of ca_maxrequests from 8 to 16 to address a
>> RuntimeError encountered in DELEG8.
>>
>> This change resolves the issue where
>> DELEG8 st_delegation.testDelegRevocation
>> fails with a RuntimeError: "Out of slots".
>>
>> Signed-off-by: Chen Hanxiao <chenhx.fnst@fujitsu.com>
>> ---
>> nfs4.1/nfs4client.py | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
>> index f4fabcc..fa31b34 100644
>> --- a/nfs4.1/nfs4client.py
>> +++ b/nfs4.1/nfs4client.py
>> @@ -390,7 +390,7 @@ class ClientRecord(object):
>> fore_attrs=None, back_attrs=None, sec=None,
>> prog=None,
>> max_retries=1, delay_time=1):
>> - chan_attrs = channel_attrs4(0,8192,8192,8192,128,8,[])
>> + chan_attrs = channel_attrs4(0,8192,8192,8192,128,16,[])
>> if fore_attrs is None:
>> fore_attrs = chan_attrs
>> if back_attrs is None:
>
> Increasing the size should be harmless, but it doesn't look like DELEG8
> does a lot of concurrent RPCs. How is this running out of slots?
>
> --
> Jeff Layton <jlayton@kernel.org>
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 2826 bytes --]
^ permalink raw reply related [flat|nested] 6+ messages in thread
* 回复: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16
2025-06-25 18:26 ` Mkrtchyan, Tigran
@ 2025-06-26 2:52 ` Hanxiao Chen (Fujitsu)
0 siblings, 0 replies; 6+ messages in thread
From: Hanxiao Chen (Fujitsu) @ 2025-06-26 2:52 UTC (permalink / raw)
To: Mkrtchyan, Tigran, Jeff Layton; +Cc: Calum Mackay, linux-nfs
> -----邮件原件-----
> 发件人: Mkrtchyan, Tigran <tigran.mkrtchyan@desy.de>
> 发送时间: 2025年6月26日 2:27
> 收件人: Jeff Layton <jlayton@kernel.org>
> 抄送: Chen, Hanxiao <chenhx.fnst@fujitsu.com>; Calum Mackay
> <calum.mackay@oracle.com>; linux-nfs <linux-nfs@vger.kernel.org>
> 主题: Re: [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests
> from 8 to 16
>
>
> I guess this is the same issue that I tried to address with
>
> https://lore.kernel.org/all/20250415114814.285400-1-tigran.mkrtchyan@desy.
> de/
>
This one fixes " Out of slots" issue, but DELEG8 failed on CentOS 9 with a 6.15 kernel :
**************************************************
DELEG8 st_delegation.testDelegRevocation : FAILURE
Read with a revoked delegation should return
NFS4ERR_DELEG_REVOKED, instead got NFS4_OK
**************************************************
Command line asked for 1 of 264 tests
Of those: 0 Skipped, 1 Failed, 0 Warned, 0 Passed
> DELEG 8 goes into a retry loop if the server responds NFS4ERR_DELAY when the
> server tries to recall the delegation and responds with NFS4ERR_DELAY to the
> client. The handling of a compound call will retry and re-use the slot.
> The handling of DELEG8 will retry, too, but use a new slot. AFAIKS, slots are
> never freed:
>
...
> It looks like all the tests up to now have issued less than ca_maxrequests:)
>
> The proper fix probably should be someting like:
>
> diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
> index f4fabcc..fe404cd 100644
> --- a/nfs4.1/nfs4client.py
> +++ b/nfs4.1/nfs4client.py
> @@ -551,6 +551,7 @@ class SessionRecord(object):
> # operation itself receives NFS4ERR_DELAY
> slot, seq_op = self._prepare_compound(saved_kwargs)
> time.sleep(delay_time)
> + slot.inuse = False
> res = self.remove_seq_op(res)
> return res
>
>
>
This one is great for me:
**************************************************
DELEG8 st_delegation.testDelegRevocation : PASS
**************************************************
Command line asked for 1 of 264 tests
Of those: 0 Skipped, 0 Failed, 0 Warned, 1 Passed
Tested-by: Chen Hanxiao <chenhx.fnst@fujitsu.com>
Regards,
- Chen
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-06-26 2:53 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-25 8:00 [PATCH] pynfs: Fix RuntimeError by increasing default ca_maxrequests from 8 to 16 Chen Hanxiao
2025-06-25 13:58 ` Jeff Layton
2025-06-25 18:26 ` Mkrtchyan, Tigran
2025-06-26 2:52 ` 回复: " Hanxiao Chen (Fujitsu)
2025-06-25 17:20 ` Mkrtchyan, Tigran
2025-06-25 18:17 ` Calum Mackay
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox