2.6.35-longterm review patch. If anyone has any objections, please let me know.
------------------ From: Trond Myklebust <trond.mykleb...@netapp.com> commit fe19a96b10032035a35779f42ad59e35d6dd8ffd upstream. The TCP connection state code depends on the state_change() callback being called when the SYN_SENT state is set. However the networking layer doesn't actually call us back in that case. Signed-off-by: Trond Myklebust <trond.mykleb...@netapp.com> Signed-off-by: Greg Kroah-Hartman <gre...@suse.de> Signed-off-by: Andi Kleen <a...@linux.intel.com> --- net/sunrpc/xprtsock.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) Index: linux-2.6.35.y/net/sunrpc/xprtsock.c =================================================================== --- linux-2.6.35.y.orig/net/sunrpc/xprtsock.c +++ linux-2.6.35.y/net/sunrpc/xprtsock.c @@ -1345,7 +1345,6 @@ static void xs_tcp_state_change(struct s case TCP_CLOSE_WAIT: /* The server initiated a shutdown of the socket */ xprt_force_disconnect(xprt); - case TCP_SYN_SENT: xprt->connect_cookie++; case TCP_CLOSING: /* @@ -1807,6 +1806,7 @@ static void xs_tcp_reuse_connection(stru static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) { struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); + int ret = -ENOTCONN; if (!transport->inet) { struct sock *sk = sock->sk; @@ -1838,12 +1838,22 @@ static int xs_tcp_finish_connecting(stru } if (!xprt_bound(xprt)) - return -ENOTCONN; + goto out; /* Tell the socket layer to start connecting... */ xprt->stat.connect_count++; xprt->stat.connect_start = jiffies; - return kernel_connect(sock, xs_addr(xprt), xprt->addrlen, O_NONBLOCK); + ret = kernel_connect(sock, xs_addr(xprt), xprt->addrlen, O_NONBLOCK); + switch (ret) { + case 0: + case -EINPROGRESS: + /* SYN_SENT! */ + xprt->connect_cookie++; + if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) + xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; + } +out: + return ret; } /** _______________________________________________ stable mailing list stable@linux.kernel.org http://linux.kernel.org/mailman/listinfo/stable