]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - net/sunrpc/svc_xprt.c
Merge branch 'work.__copy_to_user' of git://git.kernel.org/pub/scm/linux/kernel/git...
[mirror_ubuntu-artful-kernel.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);