OSDN Git Service

tcp: create a helper to model exponential backoff
authorYuchung Cheng <ycheng@google.com>
Wed, 16 Jan 2019 23:05:32 +0000 (15:05 -0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 17 Jan 2019 23:12:26 +0000 (15:12 -0800)
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>
net/ipv4/tcp_timer.c

index 074de38..bcc2f57 100644 (file)
@@ -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);
 }
 
-
+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
  *  @sk:       The current socket
@@ -177,23 +190,15 @@ static bool retransmits_timed_out(struct sock *sk,
                                  unsigned int boundary,
                                  unsigned int timeout)
 {
-       const unsigned int rto_base = TCP_RTO_MIN;
-       unsigned int linear_backoff_thresh, start_ts;
+       unsigned int start_ts;
 
        if (!inet_csk(sk)->icsk_retransmits)
                return false;
 
        start_ts = tcp_sk(sk)->retrans_stamp;
-       if (likely(timeout == 0)) {
-               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;
-               timeout = jiffies_to_msecs(timeout);
-       }
+       if (likely(timeout == 0))
+               timeout = tcp_model_timeout(sk, boundary, TCP_RTO_MIN);
+
        return (s32)(tcp_time_stamp(tcp_sk(sk)) - start_ts - timeout) >= 0;
 }