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