diff options
-rw-r--r-- | net/sunrpc/svc_xprt.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index 2e5d43c39142..d8e8d79a8451 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c | |||
@@ -587,10 +587,12 @@ int svc_recv(struct svc_rqst *rqstp, long timeout) | |||
587 | while (rqstp->rq_pages[i] == NULL) { | 587 | while (rqstp->rq_pages[i] == NULL) { |
588 | struct page *p = alloc_page(GFP_KERNEL); | 588 | struct page *p = alloc_page(GFP_KERNEL); |
589 | if (!p) { | 589 | if (!p) { |
590 | int j = msecs_to_jiffies(500); | 590 | set_current_state(TASK_INTERRUPTIBLE); |
591 | if (kthread_should_stop()) | 591 | if (signalled() || kthread_should_stop()) { |
592 | set_current_state(TASK_RUNNING); | ||
592 | return -EINTR; | 593 | return -EINTR; |
593 | schedule_timeout_uninterruptible(j); | 594 | } |
595 | schedule_timeout(msecs_to_jiffies(500)); | ||
594 | } | 596 | } |
595 | rqstp->rq_pages[i] = p; | 597 | rqstp->rq_pages[i] = p; |
596 | } | 598 | } |