diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-02-08 21:44:04 -0500 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-02-08 21:47:27 -0500 |
commit | 3913c78c3ab61500ddf7c2c9617cc4f8e2c583e0 (patch) | |
tree | 9b77984e4d37c5a6aa79d3adcd32866604163e3b /net/sunrpc/xprtsock.c | |
parent | 4dda9c8a5e34773b290c6b5938ccb36e7fcdf35c (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.c | 2 |
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; |