Commit 81381d1a authored by Chuck Lever's avatar Chuck Lever
Browse files

svcrdma: Adjust the number of entries in svc_rdma_recv_ctxt::rc_pages



Allow allocation of more entries in the rc_pages[] array when the
maximum size of an RPC message is increased.

Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Reviewed-by: default avatarNeilBrown <neil@brown.name>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent f4126823
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -202,7 +202,8 @@ struct svc_rdma_recv_ctxt {
	struct svc_rdma_pcl	rc_reply_pcl;

	unsigned int		rc_page_count;
	struct page		*rc_pages[RPCSVC_MAXPAGES];
	unsigned long		rc_maxpages;
	struct page		*rc_pages[] __counted_by(rc_maxpages);
};

/*
+6 −2
Original line number Diff line number Diff line
@@ -120,12 +120,16 @@ svc_rdma_recv_ctxt_alloc(struct svcxprt_rdma *rdma)
{
	int node = ibdev_to_node(rdma->sc_cm_id->device);
	struct svc_rdma_recv_ctxt *ctxt;
	unsigned long pages;
	dma_addr_t addr;
	void *buffer;

	ctxt = kzalloc_node(sizeof(*ctxt), GFP_KERNEL, node);
	pages = svc_serv_maxpages(rdma->sc_xprt.xpt_server);
	ctxt = kzalloc_node(struct_size(ctxt, rc_pages, pages),
			    GFP_KERNEL, node);
	if (!ctxt)
		goto fail0;
	ctxt->rc_maxpages = pages;
	buffer = kmalloc_node(rdma->sc_max_req_size, GFP_KERNEL, node);
	if (!buffer)
		goto fail1;
@@ -497,7 +501,7 @@ static bool xdr_check_write_chunk(struct svc_rdma_recv_ctxt *rctxt)
	 * a computation, perform a simple range check. This is an
	 * arbitrary but sensible limit (ie, not architectural).
	 */
	if (unlikely(segcount > RPCSVC_MAXPAGES))
	if (unlikely(segcount > rctxt->rc_maxpages))
		return false;

	p = xdr_inline_decode(&rctxt->rc_stream,