svn commit: r195826 - projects/tcp_ffcaia2008_8.x/sys/netinet

Lawrence Stewart lstewart at FreeBSD.org
Wed Jul 22 18:25:51 UTC 2009


Author: lstewart
Date: Wed Jul 22 18:25:51 2009
New Revision: 195826
URL: http://svn.freebsd.org/changeset/base/195826

Log:
  Fold struct sackhint into struct tcpcb. Having the details in a separate struct
  provided no real benefit, and we now have a simplified ABI with respect to
  struct tcpcb.
  
  Sponsored by:	FreeBSD Foundation

Modified:
  projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_input.c
  projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_output.c
  projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_sack.c
  projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_usrreq.c
  projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_var.h

Modified: projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_input.c
==============================================================================
--- projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_input.c	Wed Jul 22 18:10:44 2009	(r195825)
+++ projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_input.c	Wed Jul 22 18:25:51 2009	(r195826)
@@ -2078,7 +2078,7 @@ tcp_do_segment(struct mbuf *m, struct tc
 						 * worth of data in flight.
 						 */
 						awnd = (tp->snd_nxt - tp->snd_fack) +
-							tp->sackhint.sack_bytes_rexmit;
+							tp->sack_bytes_rexmit;
 						if (awnd < tp->snd_ssthresh) {
 							tp->snd_cwnd += tp->t_maxseg;
 							if (tp->snd_cwnd > tp->snd_ssthresh)

Modified: projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_output.c
==============================================================================
--- projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_output.c	Wed Jul 22 18:10:44 2009	(r195825)
+++ projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_output.c	Wed Jul 22 18:25:51 2009	(r195826)
@@ -953,7 +953,7 @@ send:
 	} else {
 		th->th_seq = htonl(p->rxmit);
 		p->rxmit += len;
-		tp->sackhint.sack_bytes_rexmit += len;
+		tp->sack_bytes_rexmit += len;
 	}
 	th->th_ack = htonl(tp->rcv_nxt);
 	if (optlen) {
@@ -1209,9 +1209,9 @@ timer:
 		    (error != EPERM)) {
 			if (sack_rxmit) {
 				p->rxmit -= len;
-				tp->sackhint.sack_bytes_rexmit -= len;
-				KASSERT(tp->sackhint.sack_bytes_rexmit >= 0,
-				    ("sackhint bytes rtx >= 0"));
+				tp->sack_bytes_rexmit -= len;
+				KASSERT(tp->sack_bytes_rexmit >= 0,
+				    ("sack bytes rtx >= 0"));
 			} else
 				tp->snd_nxt -= len;
 		}

Modified: projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_sack.c
==============================================================================
--- projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_sack.c	Wed Jul 22 18:10:44 2009	(r195825)
+++ projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_sack.c	Wed Jul 22 18:25:51 2009	(r195826)
@@ -317,8 +317,8 @@ tcp_sackhole_insert(struct tcpcb *tp, tc
 		TAILQ_INSERT_TAIL(&tp->snd_holes, hole, scblink);
 
 	/* Update SACK hint. */
-	if (tp->sackhint.nexthole == NULL)
-		tp->sackhint.nexthole = hole;
+	if (tp->sack_nexthole == NULL)
+		tp->sack_nexthole = hole;
 
 	return hole;
 }
@@ -331,8 +331,8 @@ tcp_sackhole_remove(struct tcpcb *tp, st
 {
 
 	/* Update SACK hint. */
-	if (tp->sackhint.nexthole == hole)
-		tp->sackhint.nexthole = TAILQ_NEXT(hole, scblink);
+	if (tp->sack_nexthole == hole)
+		tp->sack_nexthole = TAILQ_NEXT(hole, scblink);
 
 	/* Remove this SACK hole. */
 	TAILQ_REMOVE(&tp->snd_holes, hole, scblink);
@@ -482,9 +482,9 @@ tcp_sack_doack(struct tcpcb *tp, struct 
 			cur = TAILQ_PREV(cur, sackhole_head, scblink);
 			continue;
 		}
-		tp->sackhint.sack_bytes_rexmit -= (cur->rxmit - cur->start);
-		KASSERT(tp->sackhint.sack_bytes_rexmit >= 0,
-		    ("sackhint bytes rtx >= 0"));
+		tp->sack_bytes_rexmit -= (cur->rxmit - cur->start);
+		KASSERT(tp->sack_bytes_rexmit >= 0,
+		    ("sack bytes rtx >= 0"));
 		if (SEQ_LEQ(sblkp->start, cur->start)) {
 			/* Data acks at least the beginning of hole. */
 			if (SEQ_GEQ(sblkp->end, cur->end)) {
@@ -519,7 +519,7 @@ tcp_sack_doack(struct tcpcb *tp, struct 
 				if (temp != NULL) {
 					if (SEQ_GT(cur->rxmit, temp->rxmit)) {
 						temp->rxmit = cur->rxmit;
-						tp->sackhint.sack_bytes_rexmit
+						tp->sack_bytes_rexmit
 						    += (temp->rxmit
 						    - temp->start);
 					}
@@ -529,7 +529,7 @@ tcp_sack_doack(struct tcpcb *tp, struct 
 				}
 			}
 		}
-		tp->sackhint.sack_bytes_rexmit += (cur->rxmit - cur->start);
+		tp->sack_bytes_rexmit += (cur->rxmit - cur->start);
 		/*
 		 * Testing sblkp->start against cur->start tells us whether
 		 * we're done with the sack block or the sack hole.
@@ -553,11 +553,11 @@ tcp_free_sackholes(struct tcpcb *tp)
 	INP_WLOCK_ASSERT(tp->t_inpcb);
 	while ((q = TAILQ_FIRST(&tp->snd_holes)) != NULL)
 		tcp_sackhole_remove(tp, q);
-	tp->sackhint.sack_bytes_rexmit = 0;
+	tp->sack_bytes_rexmit = 0;
 
 	KASSERT(tp->snd_numholes == 0, ("tp->snd_numholes == 0"));
-	KASSERT(tp->sackhint.nexthole == NULL,
-		("tp->sackhint.nexthole == NULL"));
+	KASSERT(tp->sack_nexthole == NULL,
+		("tp->sack_nexthole == NULL"));
 }
 
 /*
@@ -579,7 +579,7 @@ tcp_sack_partialack(struct tcpcb *tp, st
 	/* Send one or 2 segments based on how much new data was acked. */
 	if (((th->th_ack - tp->snd_una) / tp->t_maxseg) > 2)
 		num_segs = 2;
-	tp->snd_cwnd = (tp->sackhint.sack_bytes_rexmit +
+	tp->snd_cwnd = (tp->sack_bytes_rexmit +
 	    (tp->snd_nxt - tp->sack_newdata) + num_segs * tp->t_maxseg);
 	if (tp->snd_cwnd > tp->snd_ssthresh)
 		tp->snd_cwnd = tp->snd_ssthresh;
@@ -636,13 +636,13 @@ tcp_sack_output(struct tcpcb *tp, int *s
 	struct sackhole *hole = NULL;
 
 	INP_WLOCK_ASSERT(tp->t_inpcb);
-	*sack_bytes_rexmt = tp->sackhint.sack_bytes_rexmit;
-	hole = tp->sackhint.nexthole;
+	*sack_bytes_rexmt = tp->sack_bytes_rexmit;
+	hole = tp->sack_nexthole;
 	if (hole == NULL || SEQ_LT(hole->rxmit, hole->end))
 		goto out;
 	while ((hole = TAILQ_NEXT(hole, scblink)) != NULL) {
 		if (SEQ_LT(hole->rxmit, hole->end)) {
-			tp->sackhint.nexthole = hole;
+			tp->sack_nexthole = hole;
 			break;
 		}
 	}

Modified: projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_usrreq.c
==============================================================================
--- projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_usrreq.c	Wed Jul 22 18:10:44 2009	(r195825)
+++ projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_usrreq.c	Wed Jul 22 18:25:51 2009	(r195826)
@@ -1853,7 +1853,7 @@ db_print_tcpcb(struct tcpcb *tp, const c
 	db_printf("snd_fack: 0x%08x   rcv_numsacks: %d   sack_newdata: "
 	    "0x%08x\n", tp->snd_fack, tp->rcv_numsacks, tp->sack_newdata);
 
-	/* Skip sackblks, sackhint. */
+	/* Skip sackblks. */
 
 	db_print_indent(indent);
 	db_printf("t_rttlow: %d   rfbuf_ts: %u   rfbuf_cnt: %d\n",

Modified: projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_var.h
==============================================================================
--- projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_var.h	Wed Jul 22 18:10:44 2009	(r195825)
+++ projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_var.h	Wed Jul 22 18:25:51 2009	(r195826)
@@ -71,14 +71,6 @@ struct sackhole {
 	TAILQ_ENTRY(sackhole) scblink;	/* scoreboard linkage */
 };
 
-struct sackhint {
-	struct sackhole	*nexthole;
-	int		sack_bytes_rexmit;
-
-	int		ispare;		/* explicit pad for 64bit alignment */
-	uint64_t	_pad[2];	/* 1 sacked_bytes, 1 TBD */
-};
-
 struct tcptemp {
 	u_char	tt_ipgen[40]; /* the size must be of max ip header, now IPv6 */
 	struct	tcphdr tt_t;
@@ -192,7 +184,8 @@ struct tcpcb {
 	struct sackblk sackblks[MAX_SACK_BLKS]; /* seq nos. of sack blocks */
 	tcp_seq sack_newdata;		/* New data xmitted in this recovery
 					   episode starts at this seq number */
-	struct sackhint	sackhint;	/* SACK scoreboard hint */
+	struct sackhole	*sack_nexthole;	/* next hole to rexmt */
+	int	sack_bytes_rexmit;	/* # bytes rexmt this RTT */
 	int	t_rttlow;		/* smallest observerved RTT */
 	u_int32_t	rfbuf_ts;	/* recv buffer autoscaling timestamp */
 	int	rfbuf_cnt;		/* recv buffer autoscaling byte count */


More information about the svn-src-projects mailing list