Ensure that the re-establishment delay does not grow exponentially
on each good reconnect. This probably should have been part of
commit 
675dd90ad093 ("xprtrdma: Modernize ops->connect").
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
        struct rpc_rqst *rqst = rep->rr_rqst;
        int status;
 
-       xprt->reestablish_timeout = 0;
-
        switch (rep->rr_proc) {
        case rdma_msg:
                status = rpcrdma_decode_msg(r_xprt, rep, rqst);
        u32 credits;
        __be32 *p;
 
+       /* Any data means we had a useful conversation, so
+        * then we don't need to delay the next reconnect.
+        */
+       if (xprt->reestablish_timeout)
+               xprt->reestablish_timeout = 0;
+
        /* Fixed transport header fields */
        xdr_init_decode(&rep->rr_stream, &rep->rr_hdrbuf,
                        rep->rr_hdrbuf.head[0].iov_base, NULL);
 
 
        if (ep->rep_connected == -ENODEV)
                return;
-       if (ep->rep_connected > 0)
-               xprt->reestablish_timeout = 0;
        rpcrdma_ep_disconnect(ep, ia);
 
        /* Prepare @xprt for the next connection by reinitializing
        xprt->cwnd = RPC_CWNDSHIFT;
 
 out:
+       xprt->reestablish_timeout = 0;
        ++xprt->connect_cookie;
        xprt_disconnect_done(xprt);
 }
 
        if (rc)
                goto out;
 
+       if (xprt->reestablish_timeout < RPCRDMA_INIT_REEST_TO)
+               xprt->reestablish_timeout = RPCRDMA_INIT_REEST_TO;
        wait_event_interruptible(ep->rep_connect_wait, ep->rep_connected != 0);
        if (ep->rep_connected <= 0) {
                if (ep->rep_connected == -EAGAIN)