diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index c5b8d61846c2..fb0d7ed84b94 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -1593,6 +1593,8 @@ static struct sk_buff *tcp_sacktag_walk(struct sk_buff *skb, struct sock *sk, | |||
1593 | tcp_skb_pcount(skb), | 1593 | tcp_skb_pcount(skb), |
1594 | skb->skb_mstamp); | 1594 | skb->skb_mstamp); |
1595 | tcp_rate_skb_delivered(sk, skb, state->rate); | 1595 | tcp_rate_skb_delivered(sk, skb, state->rate); |
1596 | if (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED) | ||
1597 | list_del_init(&skb->tcp_tsorted_anchor); | ||
1596 | 1598 | ||
1597 | if (!before(TCP_SKB_CB(skb)->seq, | 1599 | if (!before(TCP_SKB_CB(skb)->seq, |
1598 | tcp_highest_sack_seq(tp))) | 1600 | tcp_highest_sack_seq(tp))) |
@@ -3054,8 +3056,11 @@ static void tcp_ack_tstamp(struct sock *sk, struct sk_buff *skb, | |||
3054 | 3056 | ||
3055 | shinfo = skb_shinfo(skb); | 3057 | shinfo = skb_shinfo(skb); |
3056 | if (!before(shinfo->tskey, prior_snd_una) && | 3058 | if (!before(shinfo->tskey, prior_snd_una) && |
3057 | before(shinfo->tskey, tcp_sk(sk)->snd_una)) | 3059 | before(shinfo->tskey, tcp_sk(sk)->snd_una)) { |
3058 | __skb_tstamp_tx(skb, NULL, sk, SCM_TSTAMP_ACK); | 3060 | tcp_skb_tsorted_save(skb) { |
3061 | __skb_tstamp_tx(skb, NULL, sk, SCM_TSTAMP_ACK); | ||
3062 | } tcp_skb_tsorted_restore(skb); | ||
3063 | } | ||
3059 | } | 3064 | } |
3060 | 3065 | ||
3061 | /* Remove acknowledged frames from the retransmission queue. If our packet | 3066 | /* Remove acknowledged frames from the retransmission queue. If our packet |