From owner-svn-src-projects@FreeBSD.ORG  Tue Oct  7 13:18:29 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by hub.freebsd.org (Postfix) with ESMTPS id 09108E93;
 Tue,  7 Oct 2014 13:18:29 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id E9829D98;
 Tue,  7 Oct 2014 13:18:28 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s97DISVZ081943;
 Tue, 7 Oct 2014 13:18:28 GMT (envelope-from glebius@FreeBSD.org)
Received: (from glebius@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s97DISu9081942;
 Tue, 7 Oct 2014 13:18:28 GMT (envelope-from glebius@FreeBSD.org)
Message-Id: <201410071318.s97DISu9081942@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: glebius set sender to
 glebius@FreeBSD.org using -f
From: Gleb Smirnoff <glebius@FreeBSD.org>
Date: Tue, 7 Oct 2014 13:18:28 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r272687 - projects/sendfile/sys/netinet
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 07 Oct 2014 13:18:29 -0000

Author: glebius
Date: Tue Oct  7 13:18:28 2014
New Revision: 272687
URL: https://svnweb.freebsd.org/changeset/base/272687

Log:
  Fix three critical bugs when sbavail() was used in place of sbused(),
  and one non-critical. The critical ones led to FIN bit sent before
  remainer of data.
  
  Sponsored by:	Netflix
  Sponsored by:	Nginx, Inc.

Modified:
  projects/sendfile/sys/netinet/tcp_output.c

Modified: projects/sendfile/sys/netinet/tcp_output.c
==============================================================================
--- projects/sendfile/sys/netinet/tcp_output.c	Tue Oct  7 13:08:52 2014	(r272686)
+++ projects/sendfile/sys/netinet/tcp_output.c	Tue Oct  7 13:18:28 2014	(r272687)
@@ -322,7 +322,7 @@ after_sack_rexmit:
 			 * to send then the probe will be the FIN
 			 * itself.
 			 */
-			if (off < sbavail(&so->so_snd))
+			if (off < sbused(&so->so_snd))
 				flags &= ~TH_FIN;
 			sendwin = 1;
 		} else {
@@ -503,11 +503,11 @@ after_sack_rexmit:
 		tso = 1;
 
 	if (sack_rxmit) {
-		if (SEQ_LT(p->rxmit + len, tp->snd_una + sbavail(&so->so_snd)))
+		if (SEQ_LT(p->rxmit + len, tp->snd_una + sbused(&so->so_snd)))
 			flags &= ~TH_FIN;
 	} else {
 		if (SEQ_LT(tp->snd_nxt + len, tp->snd_una +
-		    sbavail(&so->so_snd)))
+		    sbused(&so->so_snd)))
 			flags &= ~TH_FIN;
 	}
 
@@ -979,7 +979,7 @@ send:
 		 * give data to the user when a buffer fills or
 		 * a PUSH comes in.)
 		 */
-		if (off + len == sbavail(&so->so_snd))
+		if (off + len == sbused(&so->so_snd))
 			flags |= TH_PUSH;
 		SOCKBUF_UNLOCK(&so->so_snd);
 	} else {