aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
authorWei Wang <weiwan@google.com>2019-01-25 13:53:19 -0500
committerDavid S. Miller <davem@davemloft.net>2019-01-27 16:29:43 -0500
commit31954cd8bb667030b1c0d3d77f28fe71f06999f9 (patch)
treef00b43f2669ac70db625d8babe06e89cd0a731e2 /net/ipv4/tcp_input.c
parentfb1b69999130e9800c4e341a2b0f0991cdd8fcfc (diff)
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>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 76858b14ebe9..7a027dec649b 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -221,7 +221,7 @@ void tcp_enter_quickack_mode(struct sock *sk, unsigned int max_quickacks)
221 struct inet_connection_sock *icsk = inet_csk(sk); 221 struct inet_connection_sock *icsk = inet_csk(sk);
222 222
223 tcp_incr_quickack(sk, max_quickacks); 223 tcp_incr_quickack(sk, max_quickacks);
224 icsk->icsk_ack.pingpong = 0; 224 inet_csk_exit_pingpong_mode(sk);
225 icsk->icsk_ack.ato = TCP_ATO_MIN; 225 icsk->icsk_ack.ato = TCP_ATO_MIN;
226} 226}
227EXPORT_SYMBOL(tcp_enter_quickack_mode); 227EXPORT_SYMBOL(tcp_enter_quickack_mode);
@@ -236,7 +236,7 @@ static bool tcp_in_quickack_mode(struct sock *sk)
236 const struct dst_entry *dst = __sk_dst_get(sk); 236 const struct dst_entry *dst = __sk_dst_get(sk);
237 237
238 return (dst && dst_metric(dst, RTAX_QUICKACK)) || 238 return (dst && dst_metric(dst, RTAX_QUICKACK)) ||
239 (icsk->icsk_ack.quick && !icsk->icsk_ack.pingpong); 239 (icsk->icsk_ack.quick && !inet_csk_in_pingpong_mode(sk));
240} 240}
241 241
242static void tcp_ecn_queue_cwr(struct tcp_sock *tp) 242static void tcp_ecn_queue_cwr(struct tcp_sock *tp)
@@ -4094,7 +4094,7 @@ void tcp_fin(struct sock *sk)
4094 case TCP_ESTABLISHED: 4094 case TCP_ESTABLISHED:
4095 /* Move to CLOSE_WAIT */ 4095 /* Move to CLOSE_WAIT */
4096 tcp_set_state(sk, TCP_CLOSE_WAIT); 4096 tcp_set_state(sk, TCP_CLOSE_WAIT);
4097 inet_csk(sk)->icsk_ack.pingpong = 1; 4097 inet_csk_enter_pingpong_mode(sk);
4098 break; 4098 break;
4099 4099
4100 case TCP_CLOSE_WAIT: 4100 case TCP_CLOSE_WAIT:
@@ -5889,7 +5889,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
5889 return -1; 5889 return -1;
5890 if (sk->sk_write_pending || 5890 if (sk->sk_write_pending ||
5891 icsk->icsk_accept_queue.rskq_defer_accept || 5891 icsk->icsk_accept_queue.rskq_defer_accept ||
5892 icsk->icsk_ack.pingpong) { 5892 inet_csk_in_pingpong_mode(sk)) {
5893 /* Save one ACK. Data will be ready after 5893 /* Save one ACK. Data will be ready after
5894 * several ticks, if write_pending is set. 5894 * several ticks, if write_pending is set.
5895 * 5895 *