SUNRPC: Handle connect errors ECONNABORTED and EHOSTUNREACH
authorTrond Myklebust <trond.myklebust@primarydata.com>
Tue, 31 Dec 2013 18:11:43 +0000 (13:11 -0500)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Tue, 31 Dec 2013 18:42:22 +0000 (13:42 -0500)
Ensure that call_bind_status, call_connect_status, call_transmit_status and
call_status all are capable of handling ECONNABORTED and EHOSTUNREACH.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
net/sunrpc/clnt.c

index f09b7db..b9276a6 100644 (file)
@@ -1729,6 +1729,7 @@ call_bind_status(struct rpc_task *task)
                return;
        case -ECONNREFUSED:             /* connection problems */
        case -ECONNRESET:
+       case -ECONNABORTED:
        case -ENOTCONN:
        case -EHOSTDOWN:
        case -EHOSTUNREACH:
@@ -1799,7 +1800,9 @@ call_connect_status(struct rpc_task *task)
                return;
        case -ECONNREFUSED:
        case -ECONNRESET:
+       case -ECONNABORTED:
        case -ENETUNREACH:
+       case -EHOSTUNREACH:
                /* retry with existing socket, after a delay */
                rpc_delay(task, 3*HZ);
                if (RPC_IS_SOFTCONN(task))
@@ -1902,6 +1905,7 @@ call_transmit_status(struct rpc_task *task)
                        break;
                }
        case -ECONNRESET:
+       case -ECONNABORTED:
        case -ENOTCONN:
        case -EPIPE:
                rpc_task_force_reencode(task);
@@ -2011,8 +2015,9 @@ call_status(struct rpc_task *task)
                        xprt_conditional_disconnect(req->rq_xprt,
                                        req->rq_connect_cookie);
                break;
-       case -ECONNRESET:
        case -ECONNREFUSED:
+       case -ECONNRESET:
+       case -ECONNABORTED:
                rpc_force_rebind(clnt);
                rpc_delay(task, 3*HZ);
        case -EPIPE: