aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/clnt.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2014-03-17 12:51:44 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2014-03-17 15:14:18 -0400
commit485f2251782f7c44299c491d4676a8a01428d191 (patch)
tree560c2aab7afbb9401f7831936d4cace7fa257df0 /net/sunrpc/clnt.c
parentf7be728468263fcbaa1e9dcae83fb97a88b4127c (diff)
SUNRPC: Ensure that call_connect times out correctly
When the server is unavailable due to a networking error, etc, we want the RPC client to respect the timeout delays when attempting to reconnect. Reported-by: Neil Brown <neilb@suse.de> Fixes: 561ec1603171 (SUNRPC: call_connect_status should recheck bind..) Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r--net/sunrpc/clnt.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 0edada973434..5a1b8fa9ca13 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -1798,10 +1798,6 @@ call_connect_status(struct rpc_task *task)
1798 trace_rpc_connect_status(task, status); 1798 trace_rpc_connect_status(task, status);
1799 task->tk_status = 0; 1799 task->tk_status = 0;
1800 switch (status) { 1800 switch (status) {
1801 /* if soft mounted, test if we've timed out */
1802 case -ETIMEDOUT:
1803 task->tk_action = call_timeout;
1804 return;
1805 case -ECONNREFUSED: 1801 case -ECONNREFUSED:
1806 case -ECONNRESET: 1802 case -ECONNRESET:
1807 case -ECONNABORTED: 1803 case -ECONNABORTED:
@@ -1812,7 +1808,9 @@ call_connect_status(struct rpc_task *task)
1812 if (RPC_IS_SOFTCONN(task)) 1808 if (RPC_IS_SOFTCONN(task))
1813 break; 1809 break;
1814 case -EAGAIN: 1810 case -EAGAIN:
1815 task->tk_action = call_bind; 1811 /* Check for timeouts before looping back to call_bind */
1812 case -ETIMEDOUT:
1813 task->tk_action = call_timeout;
1816 return; 1814 return;
1817 case 0: 1815 case 0:
1818 clnt->cl_stats->netreconn++; 1816 clnt->cl_stats->netreconn++;