diff options
Diffstat (limited to 'net/ipv4/tcp_timer.c')
-rw-r--r-- | net/ipv4/tcp_timer.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c index b78aac30c498..ecd61d54147f 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c | |||
@@ -342,10 +342,6 @@ void tcp_retransmit_timer(struct sock *sk) | |||
342 | struct tcp_sock *tp = tcp_sk(sk); | 342 | struct tcp_sock *tp = tcp_sk(sk); |
343 | struct inet_connection_sock *icsk = inet_csk(sk); | 343 | struct inet_connection_sock *icsk = inet_csk(sk); |
344 | 344 | ||
345 | if (tp->early_retrans_delayed) { | ||
346 | tcp_resume_early_retransmit(sk); | ||
347 | return; | ||
348 | } | ||
349 | if (tp->fastopen_rsk) { | 345 | if (tp->fastopen_rsk) { |
350 | WARN_ON_ONCE(sk->sk_state != TCP_SYN_RECV && | 346 | WARN_ON_ONCE(sk->sk_state != TCP_SYN_RECV && |
351 | sk->sk_state != TCP_FIN_WAIT1); | 347 | sk->sk_state != TCP_FIN_WAIT1); |
@@ -495,13 +491,20 @@ void tcp_write_timer_handler(struct sock *sk) | |||
495 | } | 491 | } |
496 | 492 | ||
497 | event = icsk->icsk_pending; | 493 | event = icsk->icsk_pending; |
498 | icsk->icsk_pending = 0; | ||
499 | 494 | ||
500 | switch (event) { | 495 | switch (event) { |
496 | case ICSK_TIME_EARLY_RETRANS: | ||
497 | tcp_resume_early_retransmit(sk); | ||
498 | break; | ||
499 | case ICSK_TIME_LOSS_PROBE: | ||
500 | tcp_send_loss_probe(sk); | ||
501 | break; | ||
501 | case ICSK_TIME_RETRANS: | 502 | case ICSK_TIME_RETRANS: |
503 | icsk->icsk_pending = 0; | ||
502 | tcp_retransmit_timer(sk); | 504 | tcp_retransmit_timer(sk); |
503 | break; | 505 | break; |
504 | case ICSK_TIME_PROBE0: | 506 | case ICSK_TIME_PROBE0: |
507 | icsk->icsk_pending = 0; | ||
505 | tcp_probe_timer(sk); | 508 | tcp_probe_timer(sk); |
506 | break; | 509 | break; |
507 | } | 510 | } |