tcp: do not call tcp_cleanup_rbuf() if we have a backlog
Under pressure, tcp recvmsg() has logic to process the socket backlog, but calls tcp_cleanup_rbuf() right before. Avoiding sending ACK right before processing new segments makes a lot of sense, as this decrease the number of ACK packets, with no impact on effective ACK clocking. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8bd172b787
commit
29fbc26e6d
@ -2436,12 +2436,11 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
|
||||
}
|
||||
}
|
||||
|
||||
tcp_cleanup_rbuf(sk, copied);
|
||||
|
||||
if (copied >= target) {
|
||||
/* Do not sleep, just process backlog. */
|
||||
__sk_flush_backlog(sk);
|
||||
} else {
|
||||
tcp_cleanup_rbuf(sk, copied);
|
||||
sk_defer_free_flush(sk);
|
||||
sk_wait_data(sk, &timeo, last);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user