tcp: create a helper to model exponential backoff
Create a helper to model TCP exponential backoff for the next patch. This is pure refactor w no behavior change. Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Neal Cardwell <ncardwell@google.com> Reviewed-by: Soheil Hassas Yeganeh <soheil@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c7d13c8faa
commit
01a523b071
|
@ -159,7 +159,20 @@ static void tcp_mtu_probing(struct inet_connection_sock *icsk, struct sock *sk)
|
||||||
tcp_sync_mss(sk, icsk->icsk_pmtu_cookie);
|
tcp_sync_mss(sk, icsk->icsk_pmtu_cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int tcp_model_timeout(struct sock *sk,
|
||||||
|
unsigned int boundary,
|
||||||
|
unsigned int rto_base)
|
||||||
|
{
|
||||||
|
unsigned int linear_backoff_thresh, timeout;
|
||||||
|
|
||||||
|
linear_backoff_thresh = ilog2(TCP_RTO_MAX / rto_base);
|
||||||
|
if (boundary <= linear_backoff_thresh)
|
||||||
|
timeout = ((2 << boundary) - 1) * rto_base;
|
||||||
|
else
|
||||||
|
timeout = ((2 << linear_backoff_thresh) - 1) * rto_base +
|
||||||
|
(boundary - linear_backoff_thresh) * TCP_RTO_MAX;
|
||||||
|
return jiffies_to_msecs(timeout);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* retransmits_timed_out() - returns true if this connection has timed out
|
* retransmits_timed_out() - returns true if this connection has timed out
|
||||||
* @sk: The current socket
|
* @sk: The current socket
|
||||||
|
@ -177,23 +190,15 @@ static bool retransmits_timed_out(struct sock *sk,
|
||||||
unsigned int boundary,
|
unsigned int boundary,
|
||||||
unsigned int timeout)
|
unsigned int timeout)
|
||||||
{
|
{
|
||||||
const unsigned int rto_base = TCP_RTO_MIN;
|
unsigned int start_ts;
|
||||||
unsigned int linear_backoff_thresh, start_ts;
|
|
||||||
|
|
||||||
if (!inet_csk(sk)->icsk_retransmits)
|
if (!inet_csk(sk)->icsk_retransmits)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
start_ts = tcp_sk(sk)->retrans_stamp;
|
start_ts = tcp_sk(sk)->retrans_stamp;
|
||||||
if (likely(timeout == 0)) {
|
if (likely(timeout == 0))
|
||||||
linear_backoff_thresh = ilog2(TCP_RTO_MAX/rto_base);
|
timeout = tcp_model_timeout(sk, boundary, TCP_RTO_MIN);
|
||||||
|
|
||||||
if (boundary <= linear_backoff_thresh)
|
|
||||||
timeout = ((2 << boundary) - 1) * rto_base;
|
|
||||||
else
|
|
||||||
timeout = ((2 << linear_backoff_thresh) - 1) * rto_base +
|
|
||||||
(boundary - linear_backoff_thresh) * TCP_RTO_MAX;
|
|
||||||
timeout = jiffies_to_msecs(timeout);
|
|
||||||
}
|
|
||||||
return (s32)(tcp_time_stamp(tcp_sk(sk)) - start_ts - timeout) >= 0;
|
return (s32)(tcp_time_stamp(tcp_sk(sk)) - start_ts - timeout) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue