--- old/usr/src/uts/common/inet/tcp.h	Thu Nov  6 17:28:17 2014
+++ new/usr/src/uts/common/inet/tcp.h	Thu Nov  6 17:28:17 2014
@@ -22,6 +22,7 @@
  * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2011, Joyent, Inc. All rights reserved.
  * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 by Delphix. All rights reserved.
  */
 /* Copyright (c) 1990 Mentat Inc. */
 
@@ -180,7 +181,6 @@
 	uint32_t tcp_suna;		/* Sender unacknowledged */
 	uint32_t tcp_rexmit_nxt;	/* Next rexmit seq num */
 	uint32_t tcp_rexmit_max;	/* Max retran seq num */
-	int32_t	tcp_snd_burst;		/* Send burst factor */
 	uint32_t tcp_cwnd;		/* Congestion window */
 	int32_t tcp_cwnd_cnt;		/* cwnd cnt in congestion avoidance */
 
--- old/usr/src/uts/common/inet/tcp/tcp.c	Thu Nov  6 17:28:18 2014
+++ new/usr/src/uts/common/inet/tcp/tcp.c	Thu Nov  6 17:28:18 2014
@@ -23,7 +23,7 @@
  * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2011, Joyent Inc. All rights reserved.
  * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2013 by Delphix. All rights reserved.
+ * Copyright (c) 2013,2014 by Delphix. All rights reserved.
  * Copyright 2014, OmniTI Computer Consulting, Inc. All rights reserved.
  */
 /* Copyright (c) 1990 Mentat Inc. */
@@ -2416,7 +2416,6 @@
 	tcp->tcp_last_recv_time = ddi_get_lbolt();
 	tcp->tcp_cwnd_max = tcps->tcps_cwnd_max_;
 	tcp->tcp_cwnd_ssthresh = TCP_MAX_LARGEWIN;
-	tcp->tcp_snd_burst = TCP_CWND_INFINITE;
 
 	tcp->tcp_maxpsz_multiplier = tcps->tcps_maxpsz_multiplier;
 
--- old/usr/src/uts/common/inet/tcp/tcp_input.c	Thu Nov  6 17:28:19 2014
+++ new/usr/src/uts/common/inet/tcp/tcp_input.c	Thu Nov  6 17:28:19 2014
@@ -23,6 +23,7 @@
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
  * Copyright (c) 2011 Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014 by Delphix. All rights reserved.
  */
 
 /* This file contains all TCP input processing functions. */
@@ -2644,8 +2645,6 @@
 				tcp->tcp_rexmit = B_FALSE;
 				tcp->tcp_rexmit_nxt = tcp->tcp_snxt;
 				tcp->tcp_rexmit_max = tcp->tcp_snxt;
-				tcp->tcp_snd_burst = tcp->tcp_localnet ?
-				    TCP_CWND_INFINITE : TCP_CWND_NORMAL;
 				tcp->tcp_ms_we_have_waited = 0;
 
 				/*
@@ -3840,8 +3839,6 @@
 			tcp->tcp_rexmit = B_FALSE;
 			tcp->tcp_rexmit_nxt = tcp->tcp_snxt;
 			tcp->tcp_rexmit_max = tcp->tcp_snxt;
-			tcp->tcp_snd_burst = tcp->tcp_localnet ?
-			    TCP_CWND_INFINITE : TCP_CWND_NORMAL;
 			tcp->tcp_ms_we_have_waited = 0;
 			tcp->tcp_cwnd = mss;
 		}
@@ -4010,15 +4007,6 @@
 				}
 
 				/*
-				 * Do not allow bursty traffic during.
-				 * fast recovery.  Refer to Fall and Floyd's
-				 * paper "Simulation-based Comparisons of
-				 * Tahoe, Reno and SACK TCP" (in CCR?)
-				 * This is a best current practise.
-				 */
-				tcp->tcp_snd_burst = TCP_CWND_SS;
-
-				/*
 				 * For SACK:
 				 * Calculate tcp_pipe, which is the
 				 * estimated number of bytes in
@@ -4218,8 +4206,6 @@
 			}
 			tcp->tcp_rexmit_max = seg_ack;
 			tcp->tcp_cwnd_cnt = 0;
-			tcp->tcp_snd_burst = tcp->tcp_localnet ?
-			    TCP_CWND_INFINITE : TCP_CWND_NORMAL;
 
 			/*
 			 * Remove all notsack info to avoid confusion with
@@ -4280,8 +4266,6 @@
 			} else {
 				tcp->tcp_rexmit = B_FALSE;
 				tcp->tcp_rexmit_nxt = tcp->tcp_snxt;
-				tcp->tcp_snd_burst = tcp->tcp_localnet ?
-				    TCP_CWND_INFINITE : TCP_CWND_NORMAL;
 			}
 			tcp->tcp_ms_we_have_waited = 0;
 		}
--- old/usr/src/uts/common/inet/tcp/tcp_output.c	Thu Nov  6 17:28:19 2014
+++ new/usr/src/uts/common/inet/tcp/tcp_output.c	Thu Nov  6 17:28:19 2014
@@ -21,6 +21,7 @@
 
 /*
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014 by Delphix. All rights reserved.
  */
 
 /* This file contains all TCP output processing functions. */
@@ -1761,8 +1762,8 @@
  * tcp_send() is called by tcp_wput_data() and returns one of the following:
  *
  * -1 = failed allocation.
- *  0 = success; burst count reached, or usable send window is too small,
- *      and that we'd rather wait until later before sending again.
+ *  0 = We've either successfully sent data, or our usable send window is too
+ *      small and we'd rather wait until later before sending again.
  */
 static int
 tcp_send(tcp_t *tcp, const int mss, const int total_hdr_len,
@@ -1769,7 +1770,6 @@
     const int tcp_hdr_len, const int num_sack_blk, int *usable,
     uint_t *snxt, int *tail_unsent, mblk_t **xmit_tail, mblk_t *local_time)
 {
-	int		num_burst_seg = tcp->tcp_snd_burst;
 	int		num_lso_seg = 1;
 	uint_t		lso_usable;
 	boolean_t	do_lso_send = B_FALSE;
@@ -1795,25 +1795,16 @@
 		int		len;
 
 		/*
-		 * Burst count reached, return successfully.
-		 */
-		if (num_burst_seg == 0)
-			break;
-
-		/*
 		 * Calculate the maximum payload length we can send at one
 		 * time.
 		 */
 		if (do_lso_send) {
 			/*
-			 * Check whether be able to to do LSO for the current
-			 * available data.
+			 * Determine whether or not it's possible to do LSO,
+			 * and if so, how much data we can send.
 			 */
-			if (num_burst_seg >= 2 && (*usable - 1) / mss >= 1) {
+			if ((*usable - 1) / mss >= 1) {
 				lso_usable = MIN(tcp->tcp_lso_max, *usable);
-				lso_usable = MIN(lso_usable,
-				    num_burst_seg * mss);
-
 				num_lso_seg = lso_usable / mss;
 				if (lso_usable % mss) {
 					num_lso_seg++;
@@ -1830,14 +1821,6 @@
 		}
 
 		ASSERT(num_lso_seg <= IP_MAXPACKET / mss + 1);
-#ifdef DEBUG
-		DTRACE_PROBE2(tcp_send_lso, int, num_lso_seg, boolean_t,
-		    do_lso_send);
-#endif
-		/*
-		 * Adjust num_burst_seg here.
-		 */
-		num_burst_seg -= num_lso_seg;
 
 		len = mss;
 		if (len > *usable) {
@@ -3424,9 +3407,6 @@
 /*
  * tcp_ss_rexmit() is called to do slow start retransmission after a timeout
  * or ICMP errors.
- *
- * To limit the number of duplicate segments, we limit the number of segment
- * to be sent in one time to tcp_snd_burst, the burst variable.
  */
 void
 tcp_ss_rexmit(tcp_t *tcp)
@@ -3436,7 +3416,6 @@
 	int32_t		win;
 	int32_t		mss;
 	int32_t		off;
-	int32_t		burst = tcp->tcp_snd_burst;
 	mblk_t		*snxt_mp;
 	tcp_stack_t	*tcps = tcp->tcp_tcps;
 
@@ -3455,8 +3434,7 @@
 		mss = tcp->tcp_mss;
 		snxt_mp = tcp_get_seg_mp(tcp, snxt, &off);
 
-		while (SEQ_LT(snxt, smax) && (win > 0) &&
-		    (burst > 0) && (snxt_mp != NULL)) {
+		while (SEQ_LT(snxt, smax) && (win > 0) && (snxt_mp != NULL)) {
 			mblk_t	*xmit_mp;
 			mblk_t	*old_snxt_mp = snxt_mp;
 			uint32_t cnt = mss;
@@ -3485,7 +3463,6 @@
 			TCPS_UPDATE_MIB(tcps, tcpRetransBytes, cnt);
 
 			tcp->tcp_rexmit_nxt = snxt;
-			burst--;
 		}
 		/*
 		 * If we have transmitted all we have at the time
@@ -3526,7 +3503,6 @@
 	tcp->tcp_rexmit_nxt = tcp->tcp_suna;
 	tcp->tcp_rexmit = B_TRUE;
 	tcp->tcp_dupack_cnt = 0;
-	tcp->tcp_snd_burst = TCP_CWND_SS;
 	tcp_ss_rexmit(tcp);
 }
 
--- old/usr/src/uts/common/inet/tcp/tcp_timers.c	Thu Nov  6 17:28:20 2014
+++ new/usr/src/uts/common/inet/tcp/tcp_timers.c	Thu Nov  6 17:28:20 2014
@@ -23,6 +23,7 @@
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved.
  * Copyright 2011 Joyent, Inc.  All rights reserved.
+ * Copyright (c) 2014 by Delphix. All rights reserved.
  */
 
 #include <sys/types.h>
@@ -1066,11 +1067,9 @@
 	/*
 	 * When slow start after retransmission begins, start with
 	 * this seq no.  tcp_rexmit_max marks the end of special slow
-	 * start phase.  tcp_snd_burst controls how many segments
-	 * can be sent because of an ack.
+	 * start phase.
 	 */
 	tcp->tcp_rexmit_nxt = tcp->tcp_suna;
-	tcp->tcp_snd_burst = TCP_CWND_SS;
 	if ((tcp->tcp_valid_bits & TCP_FSS_VALID) &&
 	    (tcp->tcp_unsent == 0)) {
 		tcp->tcp_rexmit_max = tcp->tcp_fss;
--- old/usr/src/uts/common/inet/tcp_impl.h	Thu Nov  6 17:28:20 2014
+++ new/usr/src/uts/common/inet/tcp_impl.h	Thu Nov  6 17:28:20 2014
@@ -22,7 +22,7 @@
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2011, Joyent Inc. All rights reserved.
  * Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved.
- * Copyright (c) 2013 by Delphix. All rights reserved.
+ * Copyright (c) 2013, 2014 by Delphix. All rights reserved.
  */
 
 #ifndef	_INET_TCP_IMPL_H
@@ -440,11 +440,6 @@
 #define	IP_ADDR_CACHE_HASH(faddr)					\
 	(ntohl(faddr) & (IP_ADDR_CACHE_SIZE -1))
 
-/* TCP cwnd burst factor. */
-#define	TCP_CWND_INFINITE	65535
-#define	TCP_CWND_SS		3
-#define	TCP_CWND_NORMAL		5
-
 /*
  * TCP reassembly macros.  We hide starting and ending sequence numbers in
  * b_next and b_prev of messages on the reassembly queue.  The messages are
