From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-rs1-vallila2.fe.helsinki.fi ([128.214.173.75]:38242 "EHLO smtp-rs1-vallila2.fe.helsinki.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751077AbeCIOKp (ORCPT ); Fri, 9 Mar 2018 09:10:45 -0500 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: netdev@vger.kernel.org Cc: Yuchung Cheng , Neal Cardwell , Eric Dumazet Subject: [PATCH v2 net 3/5] tcp: move false FR condition into tcp_false_fast_retrans_possible() Date: Fri, 9 Mar 2018 16:10:30 +0200 Message-Id: <1520604632-21185-4-git-send-email-ilpo.jarvinen@helsinki.fi> In-Reply-To: <1520604632-21185-1-git-send-email-ilpo.jarvinen@helsinki.fi> References: <1520604632-21185-1-git-send-email-ilpo.jarvinen@helsinki.fi> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org List-ID: No functional changes. This change simplifies the next change slightly. Signed-off-by: Ilpo Järvinen --- net/ipv4/tcp_input.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 1277afb..4ccba94 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -2211,6 +2211,17 @@ static void tcp_update_scoreboard(struct sock *sk, int fast_rexmit) } } +/* False fast retransmits may occur when SACK is not in use under certain + * conditions (RFC6582). The sender MUST hold old state until something + * *above* high_seq is ACKed to prevent triggering such false fast + * retransmits. SACK TCP is safe. + */ +static bool tcp_false_fast_retrans_possible(const struct tcp_sock *tp, + const u32 snd_una) +{ + return tcp_is_reno(tp) && (snd_una == tp->high_seq); +} + static bool tcp_tsopt_ecr_before(const struct tcp_sock *tp, u32 when) { return tp->rx_opt.saw_tstamp && tp->rx_opt.rcv_tsecr && @@ -2350,10 +2361,10 @@ static bool tcp_try_undo_recovery(struct sock *sk) } else if (tp->rack.reo_wnd_persist) { tp->rack.reo_wnd_persist--; } - if (tp->snd_una == tp->high_seq && tcp_is_reno(tp)) { - /* Hold old state until something *above* high_seq - * is ACKed. For Reno it is MUST to prevent false - * fast retransmits (RFC2582). SACK TCP is safe. */ + if (tcp_false_fast_retrans_possible(tp, tp->snd_una)) { + /* Hold old state until something *above* high_seq is ACKed + * if false fast retransmit is possible. + */ if (!tcp_any_retrans_done(sk)) tp->retrans_stamp = 0; return true; -- 2.7.4