tcp: send ACKs when requested

When doing Limited Transmit send an ACK when needed by the protocol
processing (like sending ACKs with a DSACK block).

PR:			264257
PR:			263445
PR:			260393
Reviewed by:		rscheff@
MFC after:		3 days
Sponsored by:		Netflix, Inc.
Differential Revision:	https://reviews.freebsd.org/D36631
This commit is contained in:
Michael Tuexen 2022-09-22 12:12:11 +02:00
parent 1761afc50a
commit 5ae83e0d87

View File

@ -2739,14 +2739,14 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
maxseg;
/*
* Only call tcp_output when there
* is new data available to be sent.
* Otherwise we would send pure ACKs.
* is new data available to be sent
* or we need to send an ACK.
*/
SOCKBUF_LOCK(&so->so_snd);
avail = sbavail(&so->so_snd) -
(tp->snd_nxt - tp->snd_una);
SOCKBUF_UNLOCK(&so->so_snd);
if (avail > 0)
if (avail > 0 || tp->t_flags & TF_ACKNOW)
(void) tcp_output(tp);
sent = tp->snd_max - oldsndmax;
if (sent > maxseg) {