svn commit: r211317 - head/sys/netinet

Andre Oppermann andre at FreeBSD.org
Sat Aug 14 21:41:33 UTC 2010


Author: andre
Date: Sat Aug 14 21:41:33 2010
New Revision: 211317
URL: http://svn.freebsd.org/changeset/base/211317

Log:
  When using TSO and sending more than TCP_MAXWIN sendalot is set
  and we loop back to 'again'.  If the remainder is less or equal
  to one full segment, the TSO flag was not cleared even though
  it isn't necessary anymore.  Enabling the TSO flag on a segment
  that doesn't require any offloaded segmentation by the NIC may
  cause confusion in the driver or hardware.
  
  Reset the internal tso flag in tcp_output() on every iteration
  of sendalot.
  
  PR:		kern/132832
  Submitted by:	Renaud Lienhart <renaud-at-vmware com>
  MFC after:	1 week

Modified:
  head/sys/netinet/tcp_output.c

Modified: head/sys/netinet/tcp_output.c
==============================================================================
--- head/sys/netinet/tcp_output.c	Sat Aug 14 21:04:27 2010	(r211316)
+++ head/sys/netinet/tcp_output.c	Sat Aug 14 21:41:33 2010	(r211317)
@@ -153,7 +153,7 @@ tcp_output(struct tcpcb *tp)
 	int idle, sendalot;
 	int sack_rxmit, sack_bytes_rxmt;
 	struct sackhole *p;
-	int tso = 0;
+	int tso;
 	struct tcpopt to;
 #if 0
 	int maxburst = TCP_MAXBURST;
@@ -211,6 +211,7 @@ again:
 	    SEQ_LT(tp->snd_nxt, tp->snd_max))
 		tcp_sack_adjust(tp);
 	sendalot = 0;
+	tso = 0;
 	off = tp->snd_nxt - tp->snd_una;
 	sendwin = min(tp->snd_wnd, tp->snd_cwnd);
 	sendwin = min(sendwin, tp->snd_bwnd);
@@ -490,9 +491,9 @@ after_sack_rexmit:
 		} else {
 			len = tp->t_maxseg;
 			sendalot = 1;
-			tso = 0;
 		}
 	}
+
 	if (sack_rxmit) {
 		if (SEQ_LT(p->rxmit + len, tp->snd_una + so->so_snd.sb_cc))
 			flags &= ~TH_FIN;
@@ -1051,6 +1052,8 @@ send:
 	 * XXX: Fixme: This is currently not the case for IPv6.
 	 */
 	if (tso) {
+		KASSERT(len > tp->t_maxopd - optlen,
+		    ("%s: len <= tso_segsz", __func__));
 		m->m_pkthdr.csum_flags |= CSUM_TSO;
 		m->m_pkthdr.tso_segsz = tp->t_maxopd - optlen;
 	}


More information about the svn-src-all mailing list