]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/sunrpc/xprt.c
Merge branch 'upstream' into upstream-jgarzik
[mv-sheeva.git] / net / sunrpc / xprt.c
index cf59f7d315d0d5261deb4500d9277a46e541798f..ee6ffa01dfb18f0bc2e78ea8e8b86d7470c7b8bb 100644 (file)
@@ -410,7 +410,7 @@ void xprt_set_retrans_timeout_def(struct rpc_task *task)
 /*
  * xprt_set_retrans_timeout_rtt - set a request's retransmit timeout
  * @task: task whose timeout is to be set
- * 
+ *
  * Set a request's retransmit timeout using the RTT estimator.
  */
 void xprt_set_retrans_timeout_rtt(struct rpc_task *task)
@@ -735,6 +735,16 @@ void xprt_transmit(struct rpc_task *task)
                        xprt_reset_majortimeo(req);
                        /* Turn off autodisconnect */
                        del_singleshot_timer_sync(&xprt->timer);
+               } else {
+                       /* If all request bytes have been sent,
+                        * then we must be retransmitting this one */
+                       if (!req->rq_bytes_sent) {
+                               if (task->tk_client->cl_discrtry) {
+                                       xprt_disconnect(xprt);
+                                       task->tk_status = -ENOTCONN;
+                                       return;
+                               }
+                       }
                }
        } else if (!req->rq_bytes_sent)
                return;
@@ -878,7 +888,7 @@ void xprt_release(struct rpc_task *task)
  */
 void xprt_set_timeout(struct rpc_timeout *to, unsigned int retr, unsigned long incr)
 {
-       to->to_initval   = 
+       to->to_initval   =
        to->to_increment = incr;
        to->to_maxval    = to->to_initval + (incr * retr);
        to->to_retries   = retr;