diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index d8fe25db79f2..191b2f78b19d 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -376,8 +376,9 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info) | |||
376 | struct sock *sk; | 376 | struct sock *sk; |
377 | struct sk_buff *skb; | 377 | struct sk_buff *skb; |
378 | struct request_sock *fastopen; | 378 | struct request_sock *fastopen; |
379 | __u32 seq, snd_una; | 379 | u32 seq, snd_una; |
380 | __u32 remaining; | 380 | s32 remaining; |
381 | u32 delta_us; | ||
381 | int err; | 382 | int err; |
382 | struct net *net = dev_net(icmp_skb->dev); | 383 | struct net *net = dev_net(icmp_skb->dev); |
383 | 384 | ||
@@ -483,12 +484,12 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info) | |||
483 | skb = tcp_write_queue_head(sk); | 484 | skb = tcp_write_queue_head(sk); |
484 | BUG_ON(!skb); | 485 | BUG_ON(!skb); |
485 | 486 | ||
486 | skb_mstamp_get(&tp->tcp_mstamp); | 487 | tcp_mstamp_refresh(tp); |
488 | delta_us = (u32)(tp->tcp_mstamp - skb->skb_mstamp); | ||
487 | remaining = icsk->icsk_rto - | 489 | remaining = icsk->icsk_rto - |
488 | min(icsk->icsk_rto, | 490 | usecs_to_jiffies(delta_us); |
489 | tcp_time_stamp - tcp_skb_timestamp(skb)); | ||
490 | 491 | ||
491 | if (remaining) { | 492 | if (remaining > 0) { |
492 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, | 493 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, |
493 | remaining, TCP_RTO_MAX); | 494 | remaining, TCP_RTO_MAX); |
494 | } else { | 495 | } else { |
@@ -812,7 +813,7 @@ static void tcp_v4_timewait_ack(struct sock *sk, struct sk_buff *skb) | |||
812 | tcp_v4_send_ack(sk, skb, | 813 | tcp_v4_send_ack(sk, skb, |
813 | tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt, | 814 | tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt, |
814 | tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale, | 815 | tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale, |
815 | tcp_time_stamp + tcptw->tw_ts_offset, | 816 | tcp_time_stamp_raw() + tcptw->tw_ts_offset, |
816 | tcptw->tw_ts_recent, | 817 | tcptw->tw_ts_recent, |
817 | tw->tw_bound_dev_if, | 818 | tw->tw_bound_dev_if, |
818 | tcp_twsk_md5_key(tcptw), | 819 | tcp_twsk_md5_key(tcptw), |
@@ -840,7 +841,7 @@ static void tcp_v4_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb, | |||
840 | tcp_v4_send_ack(sk, skb, seq, | 841 | tcp_v4_send_ack(sk, skb, seq, |
841 | tcp_rsk(req)->rcv_nxt, | 842 | tcp_rsk(req)->rcv_nxt, |
842 | req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale, | 843 | req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale, |
843 | tcp_time_stamp + tcp_rsk(req)->ts_off, | 844 | tcp_time_stamp_raw() + tcp_rsk(req)->ts_off, |
844 | req->ts_recent, | 845 | req->ts_recent, |
845 | 0, | 846 | 0, |
846 | tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&ip_hdr(skb)->daddr, | 847 | tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&ip_hdr(skb)->daddr, |