tcp: don't over-send F-RTO probes
After sending the new data packets to probe (step 2), F-RTO may incorrectly send more probes if the next ACK advances SND_UNA and does not sack new packet. However F-RTO RFC 5682 probes at most once. This bug may cause sender to always send new data instead of repairing holes, inducing longer HoL blocking on the receiver for the application. Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
da34ac7626
Коммит
b7b0ed910c
|
@ -2710,9 +2710,9 @@ static void tcp_process_loss(struct sock *sk, int flag, bool is_dupack)
|
|||
tcp_try_undo_loss(sk, true))
|
||||
return;
|
||||
|
||||
if (after(tp->snd_nxt, tp->high_seq) &&
|
||||
(flag & FLAG_DATA_SACKED || is_dupack)) {
|
||||
tp->frto = 0; /* Loss was real: 2nd part of step 3.a */
|
||||
if (after(tp->snd_nxt, tp->high_seq)) {
|
||||
if (flag & FLAG_DATA_SACKED || is_dupack)
|
||||
tp->frto = 0; /* Step 3.a. loss was real */
|
||||
} else if (flag & FLAG_SND_UNA_ADVANCED && !recovered) {
|
||||
tp->high_seq = tp->snd_nxt;
|
||||
__tcp_push_pending_frames(sk, tcp_current_mss(sk),
|
||||
|
|
Загрузка…
Ссылка в новой задаче