Re: [PATCH] nfsd: allow SC_STATUS_FREEABLE when searching via nfs4_lookup_stateid()
From: Benjamin Coddington
Date: Thu Apr 17 2025 - 08:49:44 EST
On 12 Feb 2025, at 11:29, Jeff Layton wrote:
> When a delegation is revoked, it's initially marked with
> SC_STATUS_REVOKED, or SC_STATUS_ADMIN_REVOKED and later, it's marked
> with the SC_STATUS_FREEABLE flag, which denotes that it is waiting for
> s FREE_STATEID call.
>
> nfs4_lookup_stateid() accepts a statusmask that includes the status
> flags that a found stateid is allowed to have. Currently, that mask
> never includes SC_STATUS_FREEABLE, which means that revoked delegations
> are (almost) never found.
>
> Add SC_STATUS_FREEABLE to the always-allowed status flags.
>
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> ---
> This fixes the pynfs DELEG8 test.
I want to follow-up this patch with the report that this will fix quite
severe TEST_STATEID/FREE_STATEID storms from NFS clients that can never
satisfy the server's setting SEQ4_STATUS_*_STATE_REVOKED status bits.
Correct accounting on the server's cl_revoked counter is pretty important, I
do wish the protocol had something like a per-client global window of valid
state.
Thanks Jeff (and thanks Olga for the original fix!),
Ben