mbox series

[RFC,0/2] NFSD: expand the implementation of OFFLOAD_STATUS

Message ID 20240430200519.6253-1-cel@kernel.org (mailing list archive)
Headers show
Series NFSD: expand the implementation of OFFLOAD_STATUS | expand

Message

Chuck Lever April 30, 2024, 8:05 p.m. UTC
From: Chuck Lever <chuck.lever@oracle.com>

I'm looking at RFC 7862 to try to understand what the various
OFFLOAD_STATUS responses mean.

> 15.9.3.  DESCRIPTION
> 
>   OFFLOAD_STATUS can be used by the client to query the progress of an
>   asynchronous operation, which is identified by both CURRENT_FH and
>   the osa_stateid.  If this operation is successful, the number of
>   bytes processed is returned to the client in the osr_count field.

NFSD returns only the byte count today.

>   If the optional osr_complete field is present, the asynchronous
>   operation has completed.  In this case, the status value indicates
>   the result of the asynchronous operation.

NFSD currently never returns the status code -- NFSD's response XDR
encoder always stuffs "zero" in the array count for the osr_complete
array. IMO, zero is OK, but only for the “COPY is still running”
case.

Once the async COPY has completed, a subsequent OFFLOAD_STATUS
should show that the COPY succeeded (or failed), until the server
receives the client’s CB_OFFLOAD reply, or until the client’s lease
expires.

For the "COPY has completed successfully" case, the above text
suggests that OFFLOAD_STATUS returns NFS4_OK, and needs to return a
proper status code in the osr_complete array: Probably NFS4_OK.

A "COPY has completed but failed" status can be reported by
OFFLOAD_STATUS returning NFS4_OK and setting the osr_complete field
to the failing COPY status code.

The two patches here change NFSD in that direction.

Chuck Lever (2):
  NFSD: Record status of async copy operation in struct nfsd4_copy
  NFSD: Add COPY status code to OFFLOAD_STATUS response

 fs/nfsd/nfs4proc.c | 31 ++++++++++++++++++-------------
 fs/nfsd/nfs4xdr.c  |  7 ++++++-
 fs/nfsd/xdr4.h     |  5 ++++-
 3 files changed, 28 insertions(+), 15 deletions(-)


base-commit: 06cd86b25b980a58e5584e9cd38c080467b24c25