[PATCH 00/20] NFSD support for multiple RPC/RDMA chunks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This series implements support for multiple RPC/RDMA chunks per RPC
transaction. This is one of the few remaining generalities that the
Linux NFS/RDMA server implementation lacks.

There is currently one known NFS/RDMA client implementation that can
send multiple chunks per RPC, and that is Solaris. Multiple chunks
are rare enough that the Linux NFS/RDMA implementation has been
successful without this support for many years.

Along with multiple chunk support, this series adds the following
benefits:

- More robust input sanitization of RPC/RDMA headers
- An internal representation of chunks that is agnostic to their
  wire format

The cost is a little additional complexity and some extra memory
allocations when handling non-empty chunk lists. Most of these
allocations can be optimized away if we find they are a problem.

---

Chuck Lever (20):
      SUNRPC: Adjust synopsis of xdr_buf_subsegment()
      svcrdma: Const-ify the xdr_buf arguments
      svcrdma: Refactor the RDMA Write path
      SUNRPC: Rename svc_encode_read_payload()
      NFSD: Invoke svc_encode_result_payload() in "read" NFSD encoders
      svcrdma: Post RDMA Writes while XDR encoding replies
      svcrdma: Clean up svc_rdma_encode_reply_chunk()
      svcrdma: Add a "parsed chunk list" data structure
      svcrdma: Use parsed chunk lists to derive the inv_rkey
      svcrdma: Use parsed chunk lists to detect reverse direction replies
      svcrdma: Use parsed chunk lists to construct RDMA Writes
      svcrdma: Use parsed chunk lists to encode Reply transport headers
      svcrdma: Support multiple write chunks when pulling up
      svcrdma: Support multiple Write chunks in svc_rdma_map_reply_msg()
      svcrdma: Support multiple Write chunks in svc_rdma_send_reply_chunk
      svcrdma: Remove chunk list pointers
      svcrdma: Clean up chunk tracepoints
      svcrdma: Rename info::ri_chunklen
      svcrdma: Use the new parsed chunk list when pulling Read chunks
      svcrdma: support multiple Read chunks per RPC


 fs/nfsd/nfs3xdr.c                          |   4 +
 fs/nfsd/nfs4xdr.c                          |   5 +-
 fs/nfsd/nfsxdr.c                           |   4 +
 include/linux/sunrpc/svc.h                 |   6 +-
 include/linux/sunrpc/svc_rdma.h            |  36 +-
 include/linux/sunrpc/svc_rdma_pcl.h        | 128 +++++
 include/linux/sunrpc/svc_xprt.h            |   4 +-
 include/trace/events/rpcrdma.h             | 143 +++--
 net/sunrpc/svc.c                           |  11 +-
 net/sunrpc/svcsock.c                       |   8 +-
 net/sunrpc/xprtrdma/Makefile               |   2 +-
 net/sunrpc/xprtrdma/svc_rdma_backchannel.c |  14 +-
 net/sunrpc/xprtrdma/svc_rdma_pcl.c         | 306 +++++++++++
 net/sunrpc/xprtrdma/svc_rdma_recvfrom.c    | 314 ++++++-----
 net/sunrpc/xprtrdma/svc_rdma_rw.c          | 598 +++++++++++++++------
 net/sunrpc/xprtrdma/svc_rdma_sendto.c      | 561 ++++++++++---------
 net/sunrpc/xprtrdma/svc_rdma_transport.c   |   2 +-
 17 files changed, 1488 insertions(+), 658 deletions(-)
 create mode 100644 include/linux/sunrpc/svc_rdma_pcl.h
 create mode 100644 net/sunrpc/xprtrdma/svc_rdma_pcl.c

--
Chuck Lever




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux