forked from luck/tmp_suning_uos_patched
[TCP]: Correct DSACK check placing
Previously one of the in-block skip branches was missing it. Also, drop it from tail-fully-processed case because the next iteration will do exactly the same thing, i.e., process the SACK block that contains the DSACK information. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f7ab97f78a
commit
20de20beba
@ -1554,20 +1554,15 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Rest of the block already fully processed? */
|
/* Rest of the block already fully processed? */
|
||||||
if (!after(end_seq, cache->end_seq)) {
|
if (!after(end_seq, cache->end_seq))
|
||||||
skb = tcp_maybe_skipping_dsack(skb, sk, next_dup, cache->end_seq,
|
|
||||||
&fack_count, &reord, &flag);
|
|
||||||
goto advance_sp;
|
goto advance_sp;
|
||||||
}
|
|
||||||
|
skb = tcp_maybe_skipping_dsack(skb, sk, next_dup, cache->end_seq,
|
||||||
|
&fack_count, &reord, &flag);
|
||||||
|
|
||||||
/* ...tail remains todo... */
|
/* ...tail remains todo... */
|
||||||
if (TCP_SKB_CB(tp->highest_sack)->end_seq == cache->end_seq) {
|
if (TCP_SKB_CB(tp->highest_sack)->end_seq == cache->end_seq) {
|
||||||
/* ...but better entrypoint exists! Check that DSACKs are
|
/* ...but better entrypoint exists! */
|
||||||
* properly accounted while skipping here
|
|
||||||
*/
|
|
||||||
tcp_maybe_skipping_dsack(skb, sk, next_dup, cache->end_seq,
|
|
||||||
&fack_count, &reord, &flag);
|
|
||||||
|
|
||||||
skb = tcp_write_queue_next(sk, tp->highest_sack);
|
skb = tcp_write_queue_next(sk, tp->highest_sack);
|
||||||
fack_count = tp->fackets_out;
|
fack_count = tp->fackets_out;
|
||||||
cache++;
|
cache++;
|
||||||
|
Loading…
Reference in New Issue
Block a user