]> git.neil.brown.name Git - history.git/commitdiff
Back out some congestion control changes that were causing trouble,
authorTrond Myklebust <trond.myklebust@fys.uio.no>
Thu, 21 Aug 2003 11:29:14 +0000 (04:29 -0700)
committerTrond Myklebust <trond.myklebust@fys.uio.no>
Thu, 21 Aug 2003 11:29:14 +0000 (04:29 -0700)
among other things, for the "soft" mount option.

include/linux/sunrpc/timer.h
net/sunrpc/clnt.c
net/sunrpc/timer.c
net/sunrpc/xprt.c

index ff6bc599eeec521f5da7319b258f6f4aa23beebe..f2f2ffc4f2cd93d9d2b40b0c3392fe5d86fc9375 100644 (file)
@@ -15,7 +15,6 @@ struct rpc_rtt {
        unsigned long timeo;    /* default timeout value */
        unsigned long srtt[5];  /* smoothed round trip time << 3 */
        unsigned long sdrtt[5]; /* smoothed medium deviation of RTT */
-       atomic_t  ntimeouts;    /* Global count of the number of timeouts */
 };
 
 
@@ -23,19 +22,4 @@ extern void rpc_init_rtt(struct rpc_rtt *rt, unsigned long timeo);
 extern void rpc_update_rtt(struct rpc_rtt *rt, unsigned timer, long m);
 extern unsigned long rpc_calc_rto(struct rpc_rtt *rt, unsigned timer);
 
-static inline void rpc_inc_timeo(struct rpc_rtt *rt)
-{
-       atomic_inc(&rt->ntimeouts);
-}
-
-static inline void rpc_clear_timeo(struct rpc_rtt *rt)
-{
-       atomic_set(&rt->ntimeouts, 0);
-}
-
-static inline int rpc_ntimeo(struct rpc_rtt *rt)
-{
-       return atomic_read(&rt->ntimeouts);
-}
-
 #endif /* _LINUX_SUNRPC_TIMER_H */
index 83d8d6e2c77595db86b1902f03acbd1ac6a114b9..36c1f394b0070f28e501674e5a6b5ffc0fc2ad8f 100644 (file)
@@ -744,14 +744,14 @@ call_timeout(struct rpc_task *task)
 
        dprintk("RPC: %4d call_timeout (major)\n", task->tk_pid);
        if (clnt->cl_softrtry) {
-               if (clnt->cl_chatty && !task->tk_exit)
+               if (clnt->cl_chatty)
                        printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
                                clnt->cl_protname, clnt->cl_server);
                rpc_exit(task, -EIO);
                return;
        }
 
-       if (clnt->cl_chatty && !(task->tk_flags & RPC_CALL_MAJORSEEN) && rpc_ntimeo(&clnt->cl_rtt) > 7) {
+       if (clnt->cl_chatty && !(task->tk_flags & RPC_CALL_MAJORSEEN)) {
                task->tk_flags |= RPC_CALL_MAJORSEEN;
                printk(KERN_NOTICE "%s: server %s not responding, still trying\n",
                        clnt->cl_protname, clnt->cl_server);
index 6cd6f8a9a8db67907ee4c6f95d27ab72f299e3f4..bf32f588ecd804291c9e2c60a05abcf744d4da91 100644 (file)
@@ -41,8 +41,6 @@ rpc_init_rtt(struct rpc_rtt *rt, unsigned long timeo)
                rt->srtt[i] = init;
                rt->sdrtt[i] = RPC_RTO_INIT;
        }
-
-       atomic_set(&rt->ntimeouts, 0);
 }
 
 /*
index e572a821d7937361740de4672cf437f08d15fa3c..7c8678157d09befb92ba89f53be1630d3fbec0ec 100644 (file)
@@ -585,7 +585,6 @@ xprt_complete_rqst(struct rpc_xprt *xprt, struct rpc_rqst *req, int copied)
                                rpc_update_rtt(&clnt->cl_rtt, timer,
                                                (long)jiffies - req->rq_xtime);
                }
-               rpc_clear_timeo(&clnt->cl_rtt);
        }
 
 #ifdef RPC_PROFILE
@@ -1051,21 +1050,6 @@ out:
        read_unlock(&sk->sk_callback_lock);
 }
 
-/*
- * Exponential backoff for UDP retries
- */
-static inline int
-xprt_expbackoff(struct rpc_task *task, struct rpc_rqst *req)
-{
-       int backoff;
-
-       req->rq_ntimeo++;
-       backoff = min(rpc_ntimeo(&task->tk_client->cl_rtt), XPRT_MAX_BACKOFF);
-       if (req->rq_ntimeo < (1 << backoff))
-               return 1;
-       return 0;
-}
-
 /*
  * RPC receive timeout handler.
  */
@@ -1079,14 +1063,7 @@ xprt_timer(struct rpc_task *task)
        if (req->rq_received)
                goto out;
 
-       if (!xprt->nocong) {
-               if (xprt_expbackoff(task, req)) {
-                       rpc_add_timer(task, xprt_timer);
-                       goto out_unlock;
-               }
-               rpc_inc_timeo(&task->tk_client->cl_rtt);
-               xprt_adjust_cwnd(req->rq_xprt, -ETIMEDOUT);
-       }
+       xprt_adjust_cwnd(req->rq_xprt, -ETIMEDOUT);
        req->rq_nresend++;
 
        dprintk("RPC: %4d xprt_timer (%s request)\n",
@@ -1096,7 +1073,6 @@ xprt_timer(struct rpc_task *task)
 out:
        task->tk_timeout = 0;
        rpc_wake_up_task(task);
-out_unlock:
        spin_unlock(&xprt->sock_lock);
 }
 
@@ -1246,7 +1222,8 @@ xprt_transmit(struct rpc_task *task)
        if (!xprt->nocong) {
                task->tk_timeout = rpc_calc_rto(&clnt->cl_rtt,
                                task->tk_msg.rpc_proc->p_timer);
-               req->rq_ntimeo = 0;
+               task->tk_timeout <<= clnt->cl_timeout.to_retries
+                       - req->rq_timeout.to_retries;
                if (task->tk_timeout > req->rq_timeout.to_maxval)
                        task->tk_timeout = req->rq_timeout.to_maxval;
        } else