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