After a loss (or ECN) recovery phase, cwnd is updated
to reflect the current pipe. However, with RFC6675
(sack.revised, enabled by default since D28702),
tcp_compute_pipe() uses snd_max - snd_una, while the
previous default calculates (correctly) from snd_max
to cur_ack (th_ack) - and snd_una is not yet updated
from the incoming ACK.
With other words, cwnd is set not only to the current
amount of data in flight, but to include everything which
is to be partially or fully acked.
At small cwnd and no lost retransmissions / RTOs, this
difference is relatively small and easy to miss.
With lost retransmissions, or RTOs - the difference can
become as large as the receive window (not the congestion
window previously), potentially triggering a massive
burst of new packets.
MFC after 1 week to stable/14 and stable/13