Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Apr 2013 14:06:33 +0000 (UTC)
From:      Andre Oppermann <andre@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r249809 - head/sys/netinet
Message-ID:  <201304231406.r3NE6X6u044738@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andre
Date: Tue Apr 23 14:06:32 2013
New Revision: 249809
URL: http://svnweb.freebsd.org/changeset/base/249809

Log:
  When doing RFC3042 limited transmit on the first on second
  duplicate ACK make sure we actually have new data to send.
  This prevents us from sending unneccessary pure ACKs.
  
  Reported by:	Matt Miller <matt@matthewjmiller.net>
  Tested by:	Matt Miller <matt@matthewjmiller.net>
  MFC after:	2 weeks

Modified:
  head/sys/netinet/tcp_input.c

Modified: head/sys/netinet/tcp_input.c
==============================================================================
--- head/sys/netinet/tcp_input.c	Tue Apr 23 13:33:13 2013	(r249808)
+++ head/sys/netinet/tcp_input.c	Tue Apr 23 14:06:32 2013	(r249809)
@@ -2564,6 +2564,7 @@ tcp_do_segment(struct mbuf *m, struct tc
 					u_long oldcwnd = tp->snd_cwnd;
 					tcp_seq oldsndmax = tp->snd_max;
 					u_int sent;
+					int avail;
 
 					KASSERT(tp->t_dupacks == 1 ||
 					    tp->t_dupacks == 2,
@@ -2585,7 +2586,17 @@ tcp_do_segment(struct mbuf *m, struct tc
 						 */
 						break;
 					}
-					(void) tcp_output(tp);
+					/*
+					 * Only call tcp_output when there
+					 * is new data available to be sent.
+					 * Otherwise we would send pure ACKs.
+					 */
+					SOCKBUF_LOCK(&so->so_snd);
+					avail = so->so_snd.sb_cc -
+					    (tp->snd_nxt - tp->snd_una);
+					SOCKBUF_UNLOCK(&so->so_snd);
+					if (avail > 0)
+						(void) tcp_output(tp);
 					sent = tp->snd_max - oldsndmax;
 					if (sent > tp->t_maxseg) {
 						KASSERT((tp->t_dupacks == 2 &&



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