mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-12 08:09:56 +00:00
[TCP]: Reordered ACK's (old) SACKs not included to discarded MIB
In case of ACK reordering, the SACK block might be valid in it's time but is already obsoleted since we've received another kind of confirmation about arrival of the segments through snd_una advancement of an earlier packet. I didn't bother to build distinguishing of valid and invalid SACK blocks but simply made reordered SACK blocks that are too old always not counted regardless of their "real" validity which could be determined by using the ack field of the reordered packet (won't be significant IMHO). DSACKs can very well be considered useful even in this situation, so won't do any of this for them. 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
a6963a6b3d
commit
93e6802029
@ -1247,8 +1247,13 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
|
||||
NET_INC_STATS_BH(LINUX_MIB_TCPDSACKIGNOREDNOUNDO);
|
||||
else
|
||||
NET_INC_STATS_BH(LINUX_MIB_TCPDSACKIGNOREDOLD);
|
||||
} else
|
||||
} else {
|
||||
/* Don't count olds caused by ACK reordering */
|
||||
if ((TCP_SKB_CB(ack_skb)->ack_seq != tp->snd_una) &&
|
||||
!after(end_seq, tp->snd_una))
|
||||
continue;
|
||||
NET_INC_STATS_BH(LINUX_MIB_TCPSACKDISCARD);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user