]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
SUNRPC: Handle EADDRNOTAVAIL on connection failures
authorTrond Myklebust <trond.myklebust@primarydata.com>
Mon, 1 Aug 2016 17:36:08 +0000 (13:36 -0400)
committerCalum Mackay <calum.mackay@oracle.com>
Wed, 28 Jun 2017 14:54:45 +0000 (15:54 +0100)
If the connect attempt immediately fails with an EADDRNOTAVAIL error, then
that means our choice of source port number was bad.
This error is expected when we set the SO_REUSEPORT socket option and we
have 2 sockets sharing the same source and destination address and port
combinations.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Fixes: 402e23b4ed9ed ("SUNRPC: Fix stupid typo in xs_sock_set_reuseport")
Orabug: 26221910
(cherry picked from commit 1f4c17a03ba7f430d63dba8c8e08ff1e2712581d)
Signed-off-by: Calum Mackay <calum.mackay@oracle.com>
Reviewed-by: Manjunath Patil <manjunath.b.patil@oracle.com>
net/sunrpc/xprtsock.c

index dc75bb7ea2dcf04c105fcd500a18bd59100a29e6..389eb3f4f301a9ec0d8d0bb51ae0fb6544e6260a 100644 (file)
@@ -2176,6 +2176,10 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
                /* SYN_SENT! */
                if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO)
                        xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO;
+               break;
+       case -EADDRNOTAVAIL:
+               /* Source port number is unavailable. Try a new one! */
+               transport->srcport = 0;
        }
 out:
        return ret;