Commit 1ef9696c909060ccdae3ade245ca88692b49285b
Committed by
David S. Miller
1 parent
4eb327b517
Exists in
master
and in
4 other branches
[TCP]: Send ACKs each 2nd received segment.
It does not affect either mss-sized connections (obviously) or connections controlled by Nagle (because there is only one small segment in flight). The idea is to record the fact that a small segment arrives on a connection, where one small segment has already been received and still not-ACKed. In this case ACK is forced after tcp_recvmsg() drains receive buffer. In other words, it is a "soft" each-2nd-segment ACK, which is enough to preserve ACK clock even when ABC is enabled. Signed-off-by: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 3 changed files with 9 additions and 3 deletions Side-by-side Diff
include/net/inet_connection_sock.h
net/ipv4/tcp.c
| ... | ... | @@ -955,8 +955,11 @@ |
| 955 | 955 | * receive buffer and there was a small segment |
| 956 | 956 | * in queue. |
| 957 | 957 | */ |
| 958 | - (copied > 0 && (icsk->icsk_ack.pending & ICSK_ACK_PUSHED) && | |
| 959 | - !icsk->icsk_ack.pingpong && !atomic_read(&sk->sk_rmem_alloc))) | |
| 958 | + (copied > 0 && | |
| 959 | + ((icsk->icsk_ack.pending & ICSK_ACK_PUSHED2) || | |
| 960 | + ((icsk->icsk_ack.pending & ICSK_ACK_PUSHED) && | |
| 961 | + !icsk->icsk_ack.pingpong)) && | |
| 962 | + !atomic_read(&sk->sk_rmem_alloc))) | |
| 960 | 963 | time_to_ack = 1; |
| 961 | 964 | } |
| 962 | 965 |