|
@@ -659,11 +659,13 @@ static int svc_alloc_arg(struct svc_rqst *rqstp)
|
|
int i;
|
|
int i;
|
|
|
|
|
|
/* now allocate needed pages. If we get a failure, sleep briefly */
|
|
/* 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 */
|
|
/* use as many pages as possible */
|
|
- pages = RPCSVC_MAXPAGES - 1;
|
|
|
|
|
|
+ pages = RPCSVC_MAXPAGES;
|
|
|
|
+ }
|
|
for (i = 0; i < pages ; i++)
|
|
for (i = 0; i < pages ; i++)
|
|
while (rqstp->rq_pages[i] == NULL) {
|
|
while (rqstp->rq_pages[i] == NULL) {
|
|
struct page *p = alloc_page(GFP_KERNEL);
|
|
struct page *p = alloc_page(GFP_KERNEL);
|