Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=93e680202929802558f783fbd96c41697ae65472
Commit:     93e680202929802558f783fbd96c41697ae65472
Parent:     a6963a6b3d2d3921b60f45e0cf18be26495d5ad1
Author:     Ilpo Järvinen <[EMAIL PROTECTED]>
AuthorDate: Tue Sep 25 22:46:50 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:52:38 2007 -0700

    [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 <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/ipv4/tcp_input.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 4c10d9c..4866e75 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -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;
                }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to