From 681f3c1a2fa1587956d1c4bc4fc50bb1ce552bb2 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Wed, 23 Sep 2009 14:36:37 -0400 Subject: [PATCH] --- yaml --- r: 165549 b: refs/heads/master c: 61d0a8e6a8049cea246ee7ec19b042d4ff1f6ef6 h: refs/heads/master i: 165547: 9bec4a94e2ca80c459faef7cdd1bdb9428427e3d v: v3 --- [refs] | 2 +- trunk/net/sunrpc/xprtsock.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index a242007eaa8e..3bd2fff2e3a2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8a6e5deb8a8caa810fef2c525f5dbea2cfe04a47 +refs/heads/master: 61d0a8e6a8049cea246ee7ec19b042d4ff1f6ef6 diff --git a/trunk/net/sunrpc/xprtsock.c b/trunk/net/sunrpc/xprtsock.c index bee415465754..37c5475ba258 100644 --- a/trunk/net/sunrpc/xprtsock.c +++ b/trunk/net/sunrpc/xprtsock.c @@ -773,6 +773,7 @@ static void xs_close(struct rpc_xprt *xprt) dprintk("RPC: xs_close xprt %p\n", xprt); xs_reset_transport(transport); + xprt->reestablish_timeout = 0; smp_mb__before_clear_bit(); clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); @@ -1264,6 +1265,12 @@ static void xs_tcp_data_ready(struct sock *sk, int bytes) if (xprt->shutdown) goto out; + /* Any data means we had a useful conversation, so + * the we don't need to delay the next reconnect + */ + if (xprt->reestablish_timeout) + xprt->reestablish_timeout = 0; + /* We use rd_desc to pass struct xprt to xs_tcp_data_recv */ rd_desc.arg.data = xprt; do { @@ -2034,6 +2041,8 @@ static void xs_connect(struct rpc_task *task) &transport->connect_worker, xprt->reestablish_timeout); xprt->reestablish_timeout <<= 1; + if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) + xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; if (xprt->reestablish_timeout > XS_TCP_MAX_REEST_TO) xprt->reestablish_timeout = XS_TCP_MAX_REEST_TO; } else {