Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0ec96822d5c0df77107c03b8d9a81a436ab707fc
Commit:     0ec96822d5c0df77107c03b8d9a81a436ab707fc
Parent:     ec9c948546a84d0dcee851be1009a8066958e69d
Author:     Ilpo Järvinen <[EMAIL PROTECTED]>
AuthorDate: Thu May 3 03:30:34 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Thu May 3 03:30:34 2007 -0700

    [TCP]: Use S+L catcher only with SACK for now
    
    TCP has a transitional state when SACK is not in use during
    which this invariant is temporarily broken. Without SACK,
    tcp_clean_rtx_queue does not decrement sacked_out. Therefore
    calls to tcp_sync_left_out before sacked_out is again
    corrected by tcp_fastretrans_alert can trigger this trap as
    sacked_out still has couple of segments that are already out
    of window.
    
    Signed-off-by: Ilpo Järvinen <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 include/net/tcp.h |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/include/net/tcp.h b/include/net/tcp.h
index ef8f9d4..e22b4f0 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -736,7 +736,8 @@ static inline __u32 tcp_current_ssthresh(const struct sock 
*sk)
 
 static inline void tcp_sync_left_out(struct tcp_sock *tp)
 {
-       BUG_ON(tp->sacked_out + tp->lost_out > tp->packets_out);
+       BUG_ON(tp->rx_opt.sack_ok &&
+              (tp->sacked_out + tp->lost_out > tp->packets_out));
        tp->left_out = tp->sacked_out + tp->lost_out;
 }
 
-
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