linux/net/sunrpc/xprtrdma
Chuck Lever d3dba53410 svcrdma: Implement multi-stage Read completion again
Having an nfsd thread waiting for an RDMA Read completion is
problematic if the Read responder (ie, the client) stops responding.
We need to go back to handling RDMA Reads by getting the svc scheduler
to call svc_rdma_recvfrom() a second time to finish building an RPC
message after a Read completion.

This is the final patch, and makes several changes that have to
happen concurrently:

1. svc_rdma_process_read_list no longer waits for a completion, but
   simply builds and posts the Read WRs.

2. svc_rdma_read_done() now queues a completed Read on
   sc_read_complete_q for later processing rather than calling
   complete().

3. The completed RPC message is no longer built in the
   svc_rdma_process_read_list() path. Finishing the message is now
   done in svc_rdma_recvfrom() when it notices work on the
   sc_read_complete_q. The "finish building this RPC message" code
   is removed from the svc_rdma_process_read_list() path.

This arrangement avoids the need for an nfsd thread to wait for an
RDMA Read non-interruptibly without a timeout. It's basically the
same code structure that Tom Tucker used for Read chunks along with
some clean-up and modernization.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
2024-01-07 17:54:33 -05:00
..
backchannel.c SUNRPC: change the back-channel queue to lwq 2023-10-16 12:44:08 -04:00
frwr_ops.c xprtrdma: Fix uninitialized variable 2022-10-05 15:47:17 -04:00
Makefile svcrdma: Add a "parsed chunk list" data structure 2020-11-30 13:00:22 -05:00
module.c SUNRPC: xprt_load_transport() needs to support the netid "rdma6" 2020-12-02 14:05:52 -05:00
rpc_rdma.c xprtrdma: treat all calls not a bcall when bc_serv is NULL 2022-05-31 17:09:30 -04:00
svc_rdma_backchannel.c svcrdma: Eliminate allocation of recv_ctxt objects in backchannel 2024-01-07 17:54:26 -05:00
svc_rdma_pcl.c svcrdma: Add a "parsed chunk list" data structure 2020-11-30 13:00:22 -05:00
svc_rdma_recvfrom.c svcrdma: Implement multi-stage Read completion again 2024-01-07 17:54:33 -05:00
svc_rdma_rw.c svcrdma: Implement multi-stage Read completion again 2024-01-07 17:54:33 -05:00
svc_rdma_sendto.c svcrdma: Optimize svc_rdma_cc_init() 2024-01-07 17:54:32 -05:00
svc_rdma_transport.c svcrdma: Add back svcxprt_rdma::sc_read_complete_q 2024-01-07 17:54:32 -05:00
svc_rdma.c svcrdma: Add a utility workqueue to svcrdma 2024-01-07 17:54:26 -05:00
transport.c sunrpc: simplify one-level sysctl registration for xr_tunables_table 2023-04-11 12:44:49 -04:00
verbs.c rpcrdma: Introduce a simple cid tracepoint class 2024-01-07 17:54:27 -05:00
xprt_rdma.h xprtrdma: Remove unused function declaration rpcrdma_bc_post_recv() 2023-08-23 15:58:47 -04:00