Re: [PATCH 0/4] NFSD: CB_RECALL_ANY fixes and a meaningful keep count

Jeff Layton <[email protected]>
Newsgroups gmane.linux.nfs
Message-ID <[email protected]>
On Tue, 2026-08-11 at 15:52 -0400, Chuck Lever wrote:
> NFSD sends every CB_RECALL_ANY with craa_objects_to_keep set to
> zero. RFC 8881 Section 20.6.3 reads that as a request to retain no
> delegation at all, whether or not the delegation backs a file an
> application still has open.
> 
> NFSD meant the callback as a signal to return unused delegations.
> Only the Linux client has been tested against it, and that client
> ignores craa_objects_to_keep and returns every unused delegation of
> the named types, so the fixed zero never produced visible
> misbehavior.
> 
> The NFSv4.0 recipient bug is fixed on its own so it can be
> backported to LTS ahead of the rest. An NFSv4.0 callback service
> rejects CB_RECALL_ANY, and nothing brings the callback channel back
> up afterward (patch 1).
> 
> The keep count comes from a new per-client delegation count rather
> than a walk of cl_delegations (patch 2). deleg_reaper() runs under
> nn->client_lock, and cl_delegations is serialized by nn->deleg_lock,
> which nests outside it, so the reaper cannot count the list. It
> reads the counter without the lock and may not depend on the value.
> 
> Each callback asks a client to give up one delegation. A larger
> request reaches delegations that applications still have open, and
> both reaper callers re-arm while their condition lasts. A client
> holding a single delegation is skipped rather than sent the old
> zero. That strands one delegation per client, which this
> best-effort design accepts for now.
> 
> NFSD sets no recall target and remembers nothing across callbacks.
> RFC 8881 Section 20.6.4 prescribes CB_RECALL against specific
> delegations once a client fails to return any. NFSD does not take
> that step yet. CB_RECALL_ANY is asynchronous and reports no
> completion, so NFSD treats it as advisory.
> 
> ---
> Chuck Lever (4):
>       NFSD: Do not send CB_RECALL_ANY to NFSv4.0 clients
>       NFSD: Count the delegations held by each client
>       NFSD: Name directory delegations in the CB_RECALL_ANY type mask
>       NFSD: Send a meaningful CB_RECALL_ANY keep count
> 
>  fs/nfsd/nfs4state.c | 27 +++++++++++++++++++++++----
>  fs/nfsd/state.h     |  2 ++
>  2 files changed, 25 insertions(+), 4 deletions(-)
> ---
> base-commit: 1d479c6b53f684b27da84ec352b7efb97f7f115f
> change-id: 20260810-recall-any-keep-count-f50c2ae1b792
> 
> Best regards,
> --  
> Chuck Lever <[email protected]>

Looks reasonable.

Reviewed-by: Jeff Layton <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.