summaryrefslogtreecommitdiff
path: root/net/sunrpc/clnt.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2009-12-03 23:58:56 +0300
committerTrond Myklebust <Trond.Myklebust@netapp.com>2009-12-03 23:58:56 +0300
commit3a28becc35e5c8f1fabb707bcd8a473712653de6 (patch)
tree2cdbbbea50d8a6ed8c9a3f9a84b29b424154b6e4 /net/sunrpc/clnt.c
parentcaabea8a565fb4e16f8e58e16bb9d535e591b709 (diff)
downloadlinux-3a28becc35e5c8f1fabb707bcd8a473712653de6.tar.xz
SUNRPC: soft connect semantics for UDP
Introduce soft connect behavior for UDP transports. In this case, a major timeout returns ETIMEDOUT instead of EIO. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r--net/sunrpc/clnt.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 97931d9f8579..154034b675bd 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -1380,6 +1380,10 @@ call_timeout(struct rpc_task *task)
dprintk("RPC: %5u call_timeout (major)\n", task->tk_pid);
task->tk_timeouts++;
+ if (RPC_IS_SOFTCONN(task)) {
+ rpc_exit(task, -ETIMEDOUT);
+ return;
+ }
if (RPC_IS_SOFT(task)) {
if (clnt->cl_chatty)
printk(KERN_NOTICE "%s: server %s not responding, timed out\n",