From df9e22888f4ad5dc4f06f7e339de0b12e59626d7 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Thu, 21 Aug 2003 04:29:14 -0700 Subject: [PATCH] Back out some congestion control changes that were causing trouble, among other things, for the "soft" mount option. --- include/linux/sunrpc/timer.h | 16 ---------------- net/sunrpc/clnt.c | 4 ++-- net/sunrpc/timer.c | 2 -- net/sunrpc/xprt.c | 29 +++-------------------------- 4 files changed, 5 insertions(+), 46 deletions(-) diff --git a/include/linux/sunrpc/timer.h b/include/linux/sunrpc/timer.h index ff6bc599eeec5..f2f2ffc4f2cd9 100644 --- a/include/linux/sunrpc/timer.h +++ b/include/linux/sunrpc/timer.h @@ -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 */ diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 83d8d6e2c7759..36c1f394b0070 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -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); diff --git a/net/sunrpc/timer.c b/net/sunrpc/timer.c index 6cd6f8a9a8db6..bf32f588ecd80 100644 --- a/net/sunrpc/timer.c +++ b/net/sunrpc/timer.c @@ -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); } /* diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index e572a821d7937..7c8678157d09b 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -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 -- 2.53.0