From owner-svn-src-stable-7@FreeBSD.ORG  Fri Jun 10 18:51:33 2011
Return-Path: <owner-svn-src-stable-7@FreeBSD.ORG>
Delivered-To: svn-src-stable-7@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id D532F1065670;
	Fri, 10 Jun 2011 18:51:33 +0000 (UTC) (envelope-from jhb@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id C48A58FC13;
	Fri, 10 Jun 2011 18:51:33 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5AIpXxX038555;
	Fri, 10 Jun 2011 18:51:33 GMT (envelope-from jhb@svn.freebsd.org)
Received: (from jhb@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5AIpXmx038553;
	Fri, 10 Jun 2011 18:51:33 GMT (envelope-from jhb@svn.freebsd.org)
Message-Id: <201106101851.p5AIpXmx038553@svn.freebsd.org>
From: John Baldwin <jhb@FreeBSD.org>
Date: Fri, 10 Jun 2011 18:51:33 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-all@freebsd.org,
	svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
X-SVN-Group: stable-7
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r222937 - stable/7/sys/netinet
X-BeenThere: svn-src-stable-7@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: SVN commit messages for only the 7-stable src tree
	<svn-src-stable-7.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-stable-7>, 
	<mailto:svn-src-stable-7-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-stable-7>
List-Post: <mailto:svn-src-stable-7@freebsd.org>
List-Help: <mailto:svn-src-stable-7-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-stable-7>, 
	<mailto:svn-src-stable-7-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 10 Jun 2011 18:51:33 -0000

Author: jhb
Date: Fri Jun 10 18:51:33 2011
New Revision: 222937
URL: http://svn.freebsd.org/changeset/base/222937

Log:
  MFC 220794:
  When checking to see if a window update should be sent to the remote peer,
  don't force a window update if the window would not actually grow due to
  window scaling.  Specifically, if the window scaling factor is larger than
  2 * MSS, then after the local reader has drained 2 * MSS bytes from the
  socket, a window update can end up advertising the same window.  If this
  happens, the supposed window update actually ends up being a duplicate ACK.
  This can result in an excessive number of duplicate ACKs when using a
  higher maximum socket buffer size.

Modified:
  stable/7/sys/netinet/tcp_output.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/netinet/tcp_output.c
==============================================================================
--- stable/7/sys/netinet/tcp_output.c	Fri Jun 10 18:51:22 2011	(r222936)
+++ stable/7/sys/netinet/tcp_output.c	Fri Jun 10 18:51:33 2011	(r222937)
@@ -560,11 +560,19 @@ after_sack_rexmit:
 		long adv = min(recwin, (long)TCP_MAXWIN << tp->rcv_scale) -
 			(tp->rcv_adv - tp->rcv_nxt);
 
+		/* 
+		 * If the new window size ends up being the same as the old
+		 * size when it is scaled, then don't force a window update.
+		 */
+		if ((tp->rcv_adv - tp->rcv_nxt) >> tp->rcv_scale ==
+		    (adv + tp->rcv_adv - tp->rcv_nxt) >> tp->rcv_scale)
+			goto dontupdate;
 		if (adv >= (long) (2 * tp->t_maxseg))
 			goto send;
 		if (2 * adv >= (long) so->so_rcv.sb_hiwat)
 			goto send;
 	}
+dontupdate:
 
 	/*
 	 * Send if we owe the peer an ACK, RST, SYN, or urgent data.  ACKNOW