svcrdma: advertise the correct max payload
Subsystems (4)
PATCH v3 1/1 svcrdma: advertise the correct max payload
Svcrdma currently advertises 1MB, which is too large. The correct value is the minimum of RPCSVC_MAXPAYLOAD and the max scatter-gather allowed in an NFSRDMA IO chunk * the host page size. This bug is usually benign because the Linux X64 NFSRDMA client correctly limits the payload size to the correct value (64*4096 = 256KB). But if the Linux client is PPC64 with a 64KB page size, then the client will indeed use a payload size that will overflow the server.
---
net/sunrpc/xprtrdma/svc_rdma_transport.c | 2 +- net/sunrpc/xprtrdma/xprt_rdma.h | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletions(-)
net/sunrpc/xprtrdma/svc_rdma_transport.c +1 -1
@@ -91,7 +91,7 @@ struct svc_xprt_class svc_rdma_class = { .xcl_name = "rdma", .xcl_owner = THIS_MODULE, .xcl_ops = &svc_rdma_ops, - .xcl_max_payload = RPCSVC_MAXPAYLOAD_TCP, + .xcl_max_payload = RPCSVC_MAXPAYLOAD_RDMA, .xcl_ident = XPRT_TRANSPORT_RDMA, };
net/sunrpc/xprtrdma/xprt_rdma.h +7 -0
@@ -51,6 +51,7 @@#include <linux/sunrpc/clnt.h> /* rpc_xprt */ #include <linux/sunrpc/rpc_rdma.h> /* RPC/RDMA protocol */ #include <linux/sunrpc/xprtrdma.h> /* xprt parameters */ +#include <linux/sunrpc/svc.h> /* RPCSVC_MAXPAYLOAD */ #define RDMA_RESOLVE_TIMEOUT (5000)/* 5 seconds */ #define RDMA_CONNECT_RETRY_MAX (2)/* retries if no listener backlog */
@@ -392,4 +393,10 @@ extern struct kmem_cache *svc_rdma_ctxt_cachep;/* Workqueue created in svc_rdma.c */ extern struct workqueue_struct *svc_rdma_wq; +#if RPCSVC_MAXPAYLOAD < (RPCRDMA_MAX_DATA_SEGS <<PAGE_SHIFT ) +#define RPCSVC_MAXPAYLOAD_RDMA RPCSVC_MAXPAYLOAD +#else +#define RPCSVC_MAXPAYLOAD_RDMA (RPCRDMA_MAX_DATA_SEGS << PAGE_SHIFT) +#endif +#endif /* _LINUX_SUNRPC_XPRT_RDMA_H */
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 8 lines · Steve Wise
Svcrdma currently advertises 1MB, which is too large. The correct value is the minimum of
RPCSVC_MAXPAYLOADand the max scatter-gather allowed in an NFSRDMA IO chunk * the host page size. This bug is usually benign because the Linux X64 NFSRDMA client correctly limits the payload size to the correct value (64*4096 = 256KB). But if the Linux client is PPC64 with a 64KB page size, then the client will indeed use a payload size that will overflow the server.
Maybe I'm a bit late with this, but can you explain why SG table is limited to 64 (fastreg MR and page_list probably bound it). Where is it coming from? Naturally it needs to be bound by some figure, but why 64?
Sorry if I'm nit-picking on this pretty straight-forward bug fix...
Sagi.
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 10 lines · Sagi Grimberg
Quoted 8 lines · Steve Wise
Svcrdma currently advertises 1MB, which is too large. The correct value is the minimum of
RPCSVC_MAXPAYLOADand the max scatter-gather allowed in an NFSRDMA IO chunk * the host page size. This bug is usually benign because the Linux X64 NFSRDMA client correctly limits the payload size to the correct value (64*4096 = 256KB). But if the Linux client is PPC64 with a 64KB page size, then the client will indeed use a payload size that will overflow the server.
Quoted 3 lines
Maybe I'm a bit late with this, but can you explain why SG table is limited to 64 (fastreg MR and
page_listprobably bound it). Where is it coming from? Naturally it needs to be bound by some figure, but why 64?
It’s arbitrary, AFAIK. It has been used to allocate some data structures on the stack, for example, so it can’t be too large.
It’s something we need to look at.
--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Hey Bruce, is this version acceptable for 3.18?
Thanks,
Steve.
Quoted 2 lines · Steve Wise
Hey Bruce, is this version acceptable for 3.18?
Yes, applying, thanks for the reminder.--b.
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html