mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 22:52:19 +02:00
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: Jeff Layton <jlayton@kernel.org> Reviewed-by: NeilBrown <neil@brown.name> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
f4126823c1
commit
81381d1a90
|
|
@ -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);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user