diff options
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r-- | net/sunrpc/xprtsock.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index bee415465754..37c5475ba258 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -773,6 +773,7 @@ static void xs_close(struct rpc_xprt *xprt) | |||
773 | dprintk("RPC: xs_close xprt %p\n", xprt); | 773 | dprintk("RPC: xs_close xprt %p\n", xprt); |
774 | 774 | ||
775 | xs_reset_transport(transport); | 775 | xs_reset_transport(transport); |
776 | xprt->reestablish_timeout = 0; | ||
776 | 777 | ||
777 | smp_mb__before_clear_bit(); | 778 | smp_mb__before_clear_bit(); |
778 | clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); | 779 | clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); |
@@ -1264,6 +1265,12 @@ static void xs_tcp_data_ready(struct sock *sk, int bytes) | |||
1264 | if (xprt->shutdown) | 1265 | if (xprt->shutdown) |
1265 | goto out; | 1266 | goto out; |
1266 | 1267 | ||
1268 | /* Any data means we had a useful conversation, so | ||
1269 | * the we don't need to delay the next reconnect | ||
1270 | */ | ||
1271 | if (xprt->reestablish_timeout) | ||
1272 | xprt->reestablish_timeout = 0; | ||
1273 | |||
1267 | /* We use rd_desc to pass struct xprt to xs_tcp_data_recv */ | 1274 | /* We use rd_desc to pass struct xprt to xs_tcp_data_recv */ |
1268 | rd_desc.arg.data = xprt; | 1275 | rd_desc.arg.data = xprt; |
1269 | do { | 1276 | do { |
@@ -2034,6 +2041,8 @@ static void xs_connect(struct rpc_task *task) | |||
2034 | &transport->connect_worker, | 2041 | &transport->connect_worker, |
2035 | xprt->reestablish_timeout); | 2042 | xprt->reestablish_timeout); |
2036 | xprt->reestablish_timeout <<= 1; | 2043 | xprt->reestablish_timeout <<= 1; |
2044 | if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) | ||
2045 | xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; | ||
2037 | if (xprt->reestablish_timeout > XS_TCP_MAX_REEST_TO) | 2046 | if (xprt->reestablish_timeout > XS_TCP_MAX_REEST_TO) |
2038 | xprt->reestablish_timeout = XS_TCP_MAX_REEST_TO; | 2047 | xprt->reestablish_timeout = XS_TCP_MAX_REEST_TO; |
2039 | } else { | 2048 | } else { |