From 2176ac4653b5d28ae81a746c67affd242f1e031a Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Tue, 1 Jan 2008 18:42:12 -0500 Subject: [PATCH] --- yaml --- r: 79581 b: refs/heads/master c: 663b8858dddbc8e634476960cc1c5f69dadba9b0 h: refs/heads/master i: 79579: 4fb7396c4d1ffd63c53658ec8c4489ba9940f2af v: v3 --- [refs] | 2 +- trunk/net/sunrpc/xprtsock.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 7b4f8749abf7..2d64080cd039 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 62da3b24880bccd4ffc32cf8d9a7e23fab475bdd +refs/heads/master: 663b8858dddbc8e634476960cc1c5f69dadba9b0 diff --git a/trunk/net/sunrpc/xprtsock.c b/trunk/net/sunrpc/xprtsock.c index 741ab8ad1f3a..a4cfdc5b2648 100644 --- a/trunk/net/sunrpc/xprtsock.c +++ b/trunk/net/sunrpc/xprtsock.c @@ -1130,13 +1130,13 @@ static void xs_tcp_state_change(struct sock *sk) transport->tcp_flags = TCP_RCV_COPY_FRAGHDR | TCP_RCV_COPY_XID; - xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; xprt_wake_pending_tasks(xprt, 0); } spin_unlock_bh(&xprt->transport_lock); break; case TCP_FIN_WAIT1: /* The client initiated a shutdown of the socket */ + xprt->reestablish_timeout = 0; set_bit(XPRT_CLOSING, &xprt->state); smp_mb__before_clear_bit(); clear_bit(XPRT_CONNECTED, &xprt->state); @@ -1147,6 +1147,14 @@ static void xs_tcp_state_change(struct sock *sk) /* The server initiated a shutdown of the socket */ set_bit(XPRT_CLOSING, &xprt->state); xprt_force_disconnect(xprt); + case TCP_SYN_SENT: + case TCP_CLOSING: + /* + * If the server closed down the connection, make sure that + * we back off before reconnecting + */ + if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) + xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; break; case TCP_LAST_ACK: smp_mb__before_clear_bit();