tcp: Refactor pingpong code
Instead of using pingpong as a single bit information, we refactor the code to treat it as a counter. When interactive session is detected, we set pingpong count to TCP_PINGPONG_THRESH. And when pingpong count is >= TCP_PINGPONG_THRESH, we consider the session in pingpong mode. This patch is a pure refactor and sets foundation for the next patch. This patch itself does not change any pingpong logic. Signed-off-by: Wei Wang <weiwan@google.com> Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
fb1b699991
commit
31954cd8bb
@@ -221,7 +221,7 @@ void tcp_enter_quickack_mode(struct sock *sk, unsigned int max_quickacks)
|
||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
|
||||
tcp_incr_quickack(sk, max_quickacks);
|
||||
icsk->icsk_ack.pingpong = 0;
|
||||
inet_csk_exit_pingpong_mode(sk);
|
||||
icsk->icsk_ack.ato = TCP_ATO_MIN;
|
||||
}
|
||||
EXPORT_SYMBOL(tcp_enter_quickack_mode);
|
||||
@@ -236,7 +236,7 @@ static bool tcp_in_quickack_mode(struct sock *sk)
|
||||
const struct dst_entry *dst = __sk_dst_get(sk);
|
||||
|
||||
return (dst && dst_metric(dst, RTAX_QUICKACK)) ||
|
||||
(icsk->icsk_ack.quick && !icsk->icsk_ack.pingpong);
|
||||
(icsk->icsk_ack.quick && !inet_csk_in_pingpong_mode(sk));
|
||||
}
|
||||
|
||||
static void tcp_ecn_queue_cwr(struct tcp_sock *tp)
|
||||
@@ -4094,7 +4094,7 @@ void tcp_fin(struct sock *sk)
|
||||
case TCP_ESTABLISHED:
|
||||
/* Move to CLOSE_WAIT */
|
||||
tcp_set_state(sk, TCP_CLOSE_WAIT);
|
||||
inet_csk(sk)->icsk_ack.pingpong = 1;
|
||||
inet_csk_enter_pingpong_mode(sk);
|
||||
break;
|
||||
|
||||
case TCP_CLOSE_WAIT:
|
||||
@@ -5889,7 +5889,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
|
||||
return -1;
|
||||
if (sk->sk_write_pending ||
|
||||
icsk->icsk_accept_queue.rskq_defer_accept ||
|
||||
icsk->icsk_ack.pingpong) {
|
||||
inet_csk_in_pingpong_mode(sk)) {
|
||||
/* Save one ACK. Data will be ready after
|
||||
* several ticks, if write_pending is set.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user