From c14c8e69e67f5ec68b80652e5405bb75c5370313 Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Tue, 8 Apr 2008 15:40:07 -0400 Subject: [PATCH] --- yaml --- r: 92847 b: refs/heads/master c: 06e02d66fa0055230efc2443c43ee4f3ab5eb0b6 h: refs/heads/master i: 92845: 4808c0ab5b5f68c876de03d4b5f33d21c02826f4 92843: 200f2e58448f95b4808782c024dfb03959209669 92839: 04365aa2a7638dab895899a4298ead3e3ccea9bf 92831: 06cd3bf20b6239b68dde6baad9adffffad07573f v: v3 --- [refs] | 2 +- trunk/fs/nfs/callback.c | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 4eb0bb0b4a2c..6c3bc467a3b5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9078dc08143e23b18ea72e70265f0df920cf2998 +refs/heads/master: 06e02d66fa0055230efc2443c43ee4f3ab5eb0b6 diff --git a/trunk/fs/nfs/callback.c b/trunk/fs/nfs/callback.c index a9f153867554..5606ae3d72d3 100644 --- a/trunk/fs/nfs/callback.c +++ b/trunk/fs/nfs/callback.c @@ -59,7 +59,7 @@ module_param_call(callback_tcpport, param_set_port, param_get_int, static int nfs_callback_svc(void *vrqstp) { - int err; + int err, preverr = 0; struct svc_rqst *rqstp = vrqstp; set_freezable(); @@ -74,14 +74,20 @@ nfs_callback_svc(void *vrqstp) * Listen for a request on the socket */ err = svc_recv(rqstp, MAX_SCHEDULE_TIMEOUT); - if (err == -EAGAIN || err == -EINTR) + if (err == -EAGAIN || err == -EINTR) { + preverr = err; continue; + } if (err < 0) { - printk(KERN_WARNING - "%s: terminating on error %d\n", - __FUNCTION__, -err); - break; + if (err != preverr) { + printk(KERN_WARNING "%s: unexpected error " + "from svc_recv (%d)\n", __func__, err); + preverr = err; + } + schedule_timeout_uninterruptible(HZ); + continue; } + preverr = err; svc_process(rqstp); } unlock_kernel();