diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
| -rw-r--r-- | net/ipv4/tcp_ipv4.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index efc6fef692ff..ec3cea9d6828 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
| @@ -536,12 +536,15 @@ int tcp_v4_err(struct sk_buff *icmp_skb, u32 info) | |||
| 536 | if (sock_owned_by_user(sk)) | 536 | if (sock_owned_by_user(sk)) |
| 537 | break; | 537 | break; |
| 538 | 538 | ||
| 539 | skb = tcp_rtx_queue_head(sk); | ||
| 540 | if (WARN_ON_ONCE(!skb)) | ||
| 541 | break; | ||
| 542 | |||
| 539 | icsk->icsk_backoff--; | 543 | icsk->icsk_backoff--; |
| 540 | icsk->icsk_rto = tp->srtt_us ? __tcp_set_rto(tp) : | 544 | icsk->icsk_rto = tp->srtt_us ? __tcp_set_rto(tp) : |
| 541 | TCP_TIMEOUT_INIT; | 545 | TCP_TIMEOUT_INIT; |
| 542 | icsk->icsk_rto = inet_csk_rto_backoff(icsk, TCP_RTO_MAX); | 546 | icsk->icsk_rto = inet_csk_rto_backoff(icsk, TCP_RTO_MAX); |
| 543 | 547 | ||
| 544 | skb = tcp_rtx_queue_head(sk); | ||
| 545 | 548 | ||
| 546 | tcp_mstamp_refresh(tp); | 549 | tcp_mstamp_refresh(tp); |
| 547 | delta_us = (u32)(tp->tcp_mstamp - tcp_skb_timestamp_us(skb)); | 550 | delta_us = (u32)(tp->tcp_mstamp - tcp_skb_timestamp_us(skb)); |
