aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtsock.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2015-02-08 21:44:04 -0500
committerTrond Myklebust <trond.myklebust@primarydata.com>2015-02-08 21:47:27 -0500
commit3913c78c3ab61500ddf7c2c9617cc4f8e2c583e0 (patch)
tree9b77984e4d37c5a6aa79d3adcd32866604163e3b /net/sunrpc/xprtsock.c
parent4dda9c8a5e34773b290c6b5938ccb36e7fcdf35c (diff)
SUNRPC: Handle EADDRINUSE on connect
Now that we're setting SO_REUSEPORT, we still need to handle the case where a connect() is attempted, but the old socket is still lingering. Essentially, all we want to do here is handle the error by waiting a few seconds and then retrying. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r--net/sunrpc/xprtsock.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 484c5040436a..20f25a837e06 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -721,6 +721,7 @@ static int xs_tcp_send_request(struct rpc_task *task)
721 xs_tcp_shutdown(xprt); 721 xs_tcp_shutdown(xprt);
722 case -ECONNREFUSED: 722 case -ECONNREFUSED:
723 case -ENOTCONN: 723 case -ENOTCONN:
724 case -EADDRINUSE:
724 case -EPIPE: 725 case -EPIPE:
725 clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags); 726 clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
726 } 727 }
@@ -2299,6 +2300,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)
2299 case -ECONNREFUSED: 2300 case -ECONNREFUSED:
2300 case -ECONNRESET: 2301 case -ECONNRESET:
2301 case -ENETUNREACH: 2302 case -ENETUNREACH:
2303 case -EADDRINUSE:
2302 case -ENOBUFS: 2304 case -ENOBUFS:
2303 /* retry with existing socket, after a delay */ 2305 /* retry with existing socket, after a delay */
2304 goto out; 2306 goto out;