Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3913c78c authored by Trond Myklebust's avatar Trond Myklebust
Browse files

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: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 4dda9c8a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1826,6 +1826,7 @@ call_connect_status(struct rpc_task *task)
	case -ECONNABORTED:
	case -ENETUNREACH:
	case -EHOSTUNREACH:
	case -EADDRINUSE:
	case -ENOBUFS:
	case -EPIPE:
		if (RPC_IS_SOFTCONN(task))
@@ -1934,6 +1935,7 @@ call_transmit_status(struct rpc_task *task)
		}
	case -ECONNRESET:
	case -ECONNABORTED:
	case -EADDRINUSE:
	case -ENOTCONN:
	case -ENOBUFS:
	case -EPIPE:
@@ -2053,6 +2055,7 @@ call_status(struct rpc_task *task)
	case -ECONNRESET:
	case -ECONNABORTED:
		rpc_force_rebind(clnt);
	case -EADDRINUSE:
	case -ENOBUFS:
		rpc_delay(task, 3*HZ);
	case -EPIPE:
+2 −0
Original line number Diff line number Diff line
@@ -721,6 +721,7 @@ static int xs_tcp_send_request(struct rpc_task *task)
		xs_tcp_shutdown(xprt);
	case -ECONNREFUSED:
	case -ENOTCONN:
	case -EADDRINUSE:
	case -EPIPE:
		clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
	}
@@ -2299,6 +2300,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)
	case -ECONNREFUSED:
	case -ECONNRESET:
	case -ENETUNREACH:
	case -EADDRINUSE:
	case -ENOBUFS:
		/* retry with existing socket, after a delay */
		goto out;