diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2023-05-15 15:47:36 +0200 |
---|---|---|
committer | Chuck Lever <chuck.lever@oracle.com> | 2023-06-05 15:01:44 +0200 |
commit | 88e4d41a264d00fbfd344eb2485c1c59096197f4 (patch) | |
tree | cc668611849f0664bd4e9c03ae57f9a7d4796016 /net/sunrpc/svc.c | |
parent | SUNRPC: Resupply rq_pages from node-local memory (diff) | |
download | linux-88e4d41a264d00fbfd344eb2485c1c59096197f4.tar.xz linux-88e4d41a264d00fbfd344eb2485c1c59096197f4.zip |
SUNRPC: Use __alloc_bulk_pages() in svc_init_buffer()
Clean up: Use the bulk page allocator when filling a server thread's
buffer page array.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Diffstat (limited to 'net/sunrpc/svc.c')
-rw-r--r-- | net/sunrpc/svc.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 79967b6925bd..e6d4cec61e47 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -597,34 +597,25 @@ svc_destroy(struct kref *ref) } EXPORT_SYMBOL_GPL(svc_destroy); -/* - * Allocate an RPC server's buffer space. - * We allocate pages and place them in rq_pages. - */ -static int +static bool svc_init_buffer(struct svc_rqst *rqstp, unsigned int size, int node) { - unsigned int pages, arghi; + unsigned long pages, ret; /* bc_xprt uses fore channel allocated buffers */ if (svc_is_backchannel(rqstp)) - return 1; + return true; pages = size / PAGE_SIZE + 1; /* extra page as we hold both request and reply. * We assume one is at most one page */ - arghi = 0; WARN_ON_ONCE(pages > RPCSVC_MAXPAGES); if (pages > RPCSVC_MAXPAGES) pages = RPCSVC_MAXPAGES; - while (pages) { - struct page *p = alloc_pages_node(node, GFP_KERNEL, 0); - if (!p) - break; - rqstp->rq_pages[arghi++] = p; - pages--; - } - return pages == 0; + + ret = alloc_pages_bulk_array_node(GFP_KERNEL, node, pages, + rqstp->rq_pages); + return ret == pages; } /* |