Unverified Commit 4ffd72b5 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!1883 SUNRPC: don't pause on incomplete allocation

parents f34bebe2 6981b468
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -643,7 +643,7 @@ static int svc_alloc_arg(struct svc_rqst *rqstp)
{
{
	struct svc_serv *serv = rqstp->rq_server;
	struct svc_serv *serv = rqstp->rq_server;
	struct xdr_buf *arg = &rqstp->rq_arg;
	struct xdr_buf *arg = &rqstp->rq_arg;
	unsigned long pages, filled;
	unsigned long pages, filled, ret;


	pages = (serv->sv_max_mesg + 2 * PAGE_SIZE) >> PAGE_SHIFT;
	pages = (serv->sv_max_mesg + 2 * PAGE_SIZE) >> PAGE_SHIFT;
	if (pages > RPCSVC_MAXPAGES) {
	if (pages > RPCSVC_MAXPAGES) {
@@ -653,11 +653,12 @@ static int svc_alloc_arg(struct svc_rqst *rqstp)
		pages = RPCSVC_MAXPAGES;
		pages = RPCSVC_MAXPAGES;
	}
	}


	for (;;) {
	for (filled = 0; filled < pages; filled = ret) {
		filled = alloc_pages_bulk_array(GFP_KERNEL, pages,
		ret = alloc_pages_bulk_array(GFP_KERNEL, pages,
					     rqstp->rq_pages);
					     rqstp->rq_pages);
		if (filled == pages)
		if (ret > filled)
			break;
			/* Made progress, don't sleep yet */
			continue;


		set_current_state(TASK_INTERRUPTIBLE);
		set_current_state(TASK_INTERRUPTIBLE);
		if (signalled() || kthread_should_stop()) {
		if (signalled() || kthread_should_stop()) {