]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/sunrpc/svc_xprt.c
sunrpc: Allocate up to RPCSVC_MAXPAGES per svc_rqst
[karo-tx-linux.git] / net / sunrpc / svc_xprt.c
index 7bfe1fb42addcd41b00d297b85e2009d711b6f15..d16a8b423c20b613fa2bf8b8fbbd87b5ecb95033 100644 (file)
@@ -659,11 +659,13 @@ static int svc_alloc_arg(struct svc_rqst *rqstp)
        int i;
 
        /* now allocate needed pages.  If we get a failure, sleep briefly */
-       pages = (serv->sv_max_mesg + PAGE_SIZE) / PAGE_SIZE;
-       WARN_ON_ONCE(pages >= RPCSVC_MAXPAGES);
-       if (pages >= RPCSVC_MAXPAGES)
+       pages = (serv->sv_max_mesg + 2 * PAGE_SIZE) >> PAGE_SHIFT;
+       if (pages > RPCSVC_MAXPAGES) {
+               pr_warn_once("svc: warning: pages=%u > RPCSVC_MAXPAGES=%lu\n",
+                            pages, RPCSVC_MAXPAGES);
                /* use as many pages as possible */
-               pages = RPCSVC_MAXPAGES - 1;
+               pages = RPCSVC_MAXPAGES;
+       }
        for (i = 0; i < pages ; i++)
                while (rqstp->rq_pages[i] == NULL) {
                        struct page *p = alloc_page(GFP_KERNEL);