Neal Cardwell 4c90d3b303 tcp: fix false reordering signal in tcp_shifted_skb
When tcp_shifted_skb() shifts bytes from the skb that is currently
pointed to by 'highest_sack' then the increment of
TCP_SKB_CB(skb)->seq implicitly advances tcp_highest_sack_seq(). This
implicit advancement, combined with the recent fix to pass the correct
SACKed range into tcp_sacktag_one(), caused tcp_sacktag_one() to think
that the newly SACKed range was before the tcp_highest_sack_seq(),
leading to a call to tcp_update_reordering() with a degree of
reordering matching the size of the newly SACKed range (typically just
1 packet, which is a NOP, but potentially larger).

This commit fixes this by simply calling tcp_sacktag_one() before the
TCP_SKB_CB(skb)->seq advancement that can advance our notion of the
highest SACKed sequence.

Correspondingly, we can simplify the code a little now that
tcp_shifted_skb() should update the lost_cnt_hint in all cases where
skb == tp->lost_skb_hint.

Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-02-28 15:06:46 -05:00
..
2011-12-12 19:04:11 -05:00
2011-11-12 18:13:32 -05:00
2011-10-13 16:05:07 -04:00
2011-10-19 03:10:46 -04:00
2012-02-24 17:41:11 -05:00
2011-12-11 18:25:16 -05:00
2012-01-17 10:31:12 -05:00
2011-12-12 19:04:10 -05:00
2012-01-20 14:17:26 -05:00
2012-01-20 14:17:26 -05:00
2012-02-01 14:41:50 -05:00
2011-12-11 18:25:16 -05:00
2012-01-17 10:31:12 -05:00
2011-12-09 14:14:08 -05:00