diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 0014c11d9daa..ed5f28490852 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -483,6 +483,7 @@ cc_post_recovery(struct tcpcb *tp, struct tcphdr *th) /* XXXLAS: EXIT_RECOVERY ? */ tp->t_bytes_acked = 0; tp->sackhint.delivered_data = 0; + tp->sackhint.prr_delivered = 0; tp->sackhint.prr_out = 0; } diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c index 8d863ffcf432..1ff6f5bee39a 100644 --- a/sys/netinet/tcp_output.c +++ b/sys/netinet/tcp_output.c @@ -1663,6 +1663,8 @@ tcp_default_output(struct tcpcb *tp) if (flags & TH_FIN) tp->snd_nxt--; } + if (IN_RECOVERY(tp->t_flags)) + tp->sackhint.prr_out -= len; } SOCKBUF_UNLOCK_ASSERT(&so->so_snd); /* Check gotos. */ switch (error) {