--- /dev/null
+commit 7e5be28827bf5c1989218c4b7bf64fdbc3d679b5
+Author: Steve Wise <swise@opengridcomputing.com>
+Date: Tue Sep 23 17:11:22 2014 -0500
+
+ 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.
+
+ Signed-off-by: Steve Wise <swise@opengridcomputing.com>
+ Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+
+diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c
+index 374feb4..4e61880 100644
+--- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
++++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
+@@ -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,
+ };
+
+ struct svc_rdma_op_ctxt *svc_rdma_get_context(struct svcxprt_rdma *xprt)
+diff --git a/net/sunrpc/xprtrdma/xprt_rdma.h b/net/sunrpc/xprtrdma/xprt_rdma.h
+index c419498..ac7fc9a 100644
+--- a/net/sunrpc/xprtrdma/xprt_rdma.h
++++ b/net/sunrpc/xprtrdma/xprt_rdma.h
+@@ -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 */