Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Jun 2020 18:16:46 +0000 (UTC)
From:      Randall Stewart <rrs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r362234 - head/sys/netinet/tcp_stacks
Message-ID:  <202006161816.05GIGkAm072315@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rrs
Date: Tue Jun 16 18:16:45 2020
New Revision: 362234
URL: https://svnweb.freebsd.org/changeset/base/362234

Log:
  iSo in doing final checks on OCA firmware with all the latest tweaks the dup-ack checking
  packet drill script was failing with a number of unexpected acks. So it turns
  out if you have the default recvwin set up to 1Meg (like OCA's do) and you
  have no window scaling (like the dupack checking code) then we have another
  case where we are always trying to update the rwnd and sending an
  ack when we should not.
  
  Sponsored by:	Netflix Inc.
  Differential Revision:	https://reviews.freebsd.org/D25298

Modified:
  head/sys/netinet/tcp_stacks/bbr.c
  head/sys/netinet/tcp_stacks/rack.c

Modified: head/sys/netinet/tcp_stacks/bbr.c
==============================================================================
--- head/sys/netinet/tcp_stacks/bbr.c	Tue Jun 16 17:45:23 2020	(r362233)
+++ head/sys/netinet/tcp_stacks/bbr.c	Tue Jun 16 18:16:45 2020	(r362234)
@@ -12157,8 +12157,8 @@ bbr_output_wtime(struct tcpcb *tp, const struct timeva
 			 * have gotten more data into the socket buffer to
 			 * send.
 			 */
-			recwin = min(max(sbspace(&so->so_rcv), 0),
-			    TCP_MAXWIN << tp->rcv_scale);
+			recwin = lmin(lmax(sbspace(&so->so_rcv), 0),
+				      (long)TCP_MAXWIN << tp->rcv_scale);
 			if ((bbr_window_update_needed(tp, so, recwin, maxseg) == 0) &&
 			    ((tcp_outflags[tp->t_state] & TH_RST) == 0) &&
 			    ((sbavail(sb) + ((tcp_outflags[tp->t_state] & TH_FIN) ? 1 : 0)) <=
@@ -12839,8 +12839,8 @@ recheck_resend:
 	    ipoptlen == 0)
 		tso = 1;
 
-	recwin = min(max(sbspace(&so->so_rcv), 0),
-	    TCP_MAXWIN << tp->rcv_scale);
+	recwin = lmin(lmax(sbspace(&so->so_rcv), 0),
+	    (long)TCP_MAXWIN << tp->rcv_scale);
 	/*
 	 * Sender silly window avoidance.   We transmit under the following
 	 * conditions when len is non-zero:

Modified: head/sys/netinet/tcp_stacks/rack.c
==============================================================================
--- head/sys/netinet/tcp_stacks/rack.c	Tue Jun 16 17:45:23 2020	(r362233)
+++ head/sys/netinet/tcp_stacks/rack.c	Tue Jun 16 18:16:45 2020	(r362234)
@@ -12750,7 +12750,8 @@ again:
 				flags &= ~TH_FIN;
 		}
 	}
-	recwin = sbspace(&so->so_rcv);
+	recwin = lmin(lmax(sbspace(&so->so_rcv), 0),
+	    (long)TCP_MAXWIN << tp->rcv_scale);
 
 	/*
 	 * Sender silly window avoidance.   We transmit under the following
@@ -13656,8 +13657,6 @@ send:
 		if (SEQ_GT(tp->rcv_adv, tp->rcv_nxt) &&
 		    recwin < (long)(tp->rcv_adv - tp->rcv_nxt))
 			recwin = (long)(tp->rcv_adv - tp->rcv_nxt);
-		if (recwin > (long)TCP_MAXWIN << tp->rcv_scale)
-			recwin = (long)TCP_MAXWIN << tp->rcv_scale;
 	}
 
 	/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202006161816.05GIGkAm072315>