mbox series

[RFC,0/8] For discussion of bug 198053

Message ID 20200129155516.3024.56575.stgit@bazille.1015granger.net (mailing list archive)
Headers show
Series For discussion of bug 198053 | expand

Message

Chuck Lever Jan. 29, 2020, 4:09 p.m. UTC
Hi Bruce-

These are a proof-of-concept, not for merge.

This set of patches addresses the NFS/RDMA bug reported here:

https://bugzilla.kernel.org/show_bug.cgi?id=198053

However, applying them results in a regression of support for NFSv4
COMPOUNDs with multiple READ operations on TCP.

I think a different approach might be needed? I could introduce a
new transport method that would be called for READ/READLINK that
would enable the transport to determine how it wants to convey
the Reply payload. The TCP method would behave exactly as it does
today. The RDMA method would utilize a Write chunk if one is
available, otherwise, it would also behave as it does today.

If I can get that approach to work, it would both address 198053
and enable support for multiple READ operations in a COMPOUND for
both TCP and RDMA. Thoughts?

Sidebar: while working on this patch set, it occurred to me it
would be a good clean up if svc_alloc_arg could always set up a
page for rq_res->tail. Then there wouldn't have to be all the
duplicate logic for checking whether a tail exists, or if it's
large enough, etc. etc. Can you think of an easy way to grab
one of the rpc_rqst's rq_pages for this purpose?


---

Chuck Lever (8):
      nfsd: Fix NFSv4 READ on RDMA when using readv
      SUNRPC: Add XDR infrastructure for automatically padding xdr_buf::pages
      SUNRPC: TCP transport support for automated padding of xdr_buf::pages
      svcrdma: RDMA transport support for automated padding of xdr_buf::pages
      NFSD: NFSv2 support for automated padding of xdr_buf::pages
      NFSD: NFSv3 support for automated padding of xdr_buf::pages
      sunrpc: Add new contractual constraint on xdr_buf API
      SUNRPC: GSS support for automated padding of xdr_buf::pages


 fs/nfsd/nfs3xdr.c                     |   19 +-------
 fs/nfsd/nfs4xdr.c                     |   70 ++++++++-----------------------
 fs/nfsd/nfsxdr.c                      |   20 ++-------
 include/linux/sunrpc/xdr.h            |   74 +++++++++++++++++++++++++--------
 net/sunrpc/auth_gss/gss_krb5_crypto.c |   13 +++---
 net/sunrpc/auth_gss/gss_krb5_wrap.c   |   11 +++--
 net/sunrpc/auth_gss/svcauth_gss.c     |   51 +++++++++++++----------
 net/sunrpc/svc.c                      |    2 -
 net/sunrpc/svc_xprt.c                 |   14 ++++--
 net/sunrpc/svcsock.c                  |   39 +++++++++++------
 net/sunrpc/xdr.c                      |   15 ++++---
 net/sunrpc/xprtrdma/svc_rdma_rw.c     |   13 ++++++
 net/sunrpc/xprtrdma/svc_rdma_sendto.c |   27 ++++++++----
 13 files changed, 200 insertions(+), 168 deletions(-)

--
Chuck Lever