Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Jul 2009 16:26:27 GMT
From:      Andre Oppermann <andre@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 166271 for review
Message-ID:  <200907191626.n6JGQRe2069451@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166271

Change 166271 by andre@andre_flirtbox on 2009/07/19 16:25:31

	Fixup typos. Compile.

Affected files ...

.. //depot/projects/tcp_reass/netinet/tcp_input.c#13 edit
.. //depot/projects/tcp_reass/netinet/tcp_output.c#15 edit
.. //depot/projects/tcp_reass/netinet/tcp_reass.c#35 edit
.. //depot/projects/tcp_reass/netinet/tcp_subr.c#12 edit
.. //depot/projects/tcp_reass/netinet/tcp_var.h#19 edit

Differences ...

==== //depot/projects/tcp_reass/netinet/tcp_input.c#13 (text+ko) ====

@@ -1245,7 +1245,7 @@
 	    tp->snd_nxt == tp->snd_max &&
 	    tiwin && tiwin == tp->snd_wnd && 
 	    ((tp->t_flags & (TF_NEEDSYN|TF_NEEDFIN)) == 0) &&
-	    TAILQ_EMPTY(&tp->t_trq) &&
+	    RB_EMPTY(&tp->rcv_reass) &&
 	    ((to.to_flags & TOF_TS) == 0 ||
 	     TSTMP_GEQ(to.to_tsval, tp->ts_recent)) ) {
 
@@ -2570,7 +2570,7 @@
 		 * fast retransmit can work).
 		 */
 		if (th->th_seq == tp->rcv_nxt &&
-		    TAILQ_EMPTY(&tp->t_trq) &&
+		    RB_EMPTY(&tp->rcv_reass) &&
 		    TCPS_HAVEESTABLISHED(tp->t_state)) {
 			if (DELAY_ACK(tp))
 				tp->t_flags |= TF_DELACK;

==== //depot/projects/tcp_reass/netinet/tcp_output.c#15 (text+ko) ====

@@ -479,7 +479,7 @@
 	if (len > tp->t_maxseg) {
 		if ((tp->t_flags & TF_TSO) && V_tcp_do_tso &&
 		    ((tp->t_flags & TF_SIGNATURE) == 0) &&
-		    TAILQ_EMPTY(&tp->t_trq) && sack_rxmit == 0 &&
+		    RB_EMPTY(&tp->rcv_reass) && sack_rxmit == 0 &&
 		    tp->t_inpcb->inp_options == NULL &&
 		    tp->t_inpcb->in6p_options == NULL
 #ifdef IPSEC
@@ -686,7 +686,7 @@
 				to.to_flags |= TOF_SACKPERM;
 			else if (TCPS_HAVEESTABLISHED(tp->t_state) &&
 			    (tp->t_flags & TF_SACK_PERMIT) &&
-			    !TAILQ_EMPTY(&tp->t_trq)) {
+			    !RB_EMPTY(&tp->rcv_reass)) {
 				to.to_flags |= TOF_SACK;
 				to.to_sacks = (u_char *)tp;
 			}

==== //depot/projects/tcp_reass/netinet/tcp_reass.c#35 (text+ko) ====

@@ -127,8 +127,8 @@
     &tcp_reass_spacetime, 0,
     "Reassembly Queue strategy of space vs. time efficiency");
 
-static struct tcp_reass_block
-    tcp_reass_merge(struct tcpcb *, struct tcp_reass_block *, struct tcp_reass_block *);
+static struct tcp_reass_block *
+    tcp_reass_merge(struct tcp_reass_block *, struct tcp_reass_block *);
 
 /* Trim empty mbufs from head of chain. */
 static struct mbuf *
@@ -144,6 +144,7 @@
 	return (m);
 }
 
+#if 0
 static u_int
 m_storagesize(struct mbuf *m)
 {
@@ -154,6 +155,7 @@
 		    m->m_ext.ext_size + MSIZE : MSIZE;
 	return (mcnt);
 }
+#endif
 
 /*
  * Adjust TCP reassembly zone limits when the nmbclusters zone changes.
@@ -175,7 +177,7 @@
 
 	TUNABLE_INT_FETCH("net.inet.tcp.reass.maxblocks",
 	    &tcp_reass_maxblocks);
-	tcp_reass_zone = uma_zcreate("tcpreass", sizeof(struct trb),
+	tcp_reass_zone = uma_zcreate("tcpreass", sizeof(struct tcp_reass_block),
 	    NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
 	uma_zone_set_max(tcp_reass_zone, tcp_reass_maxblocks);
 	EVENTHANDLER_REGISTER(nmbclusters_change,
@@ -208,7 +210,7 @@
 	struct mbuf *m;
 	struct tcp_reass_block *trb, *trbn;
 
-	RB_FOREACH_SAFE(trb, tcp_rb, &tp->rcv_reass, trbn) {
+	RB_FOREACH_SAFE(trb, tcp_ra, &tp->rcv_reass, trbn) {
 		KASSERT(SEQ_LT(trb->trb_seqs, trb->trb_seqe),
 		    ("%s: trb_seqs >= trb_seqe", __func__));
 		KASSERT(SEQ_GT(trb->trb_seqs, tp->rcv_nxt),
@@ -217,12 +219,12 @@
 		    ("%s: trb_m == NULL", __func__));
 		KASSERT(trb->trb_mt != NULL,
 		    ("%s: trb_mt == NULL", __func__));
-		size = SEQ_DELTA(trb->trb_seqs, tsb->trb_seqe);
+		size = SEQ_DELTA(trb->trb_seqs, trb->trb_seqe);
 		KASSERT(size == m_length(trb->trb_m, &m),
 		    ("%s: seq# size != actual mbuf size", __func__));
 		KASSERT(trb->trb_mt == m,
 		    ("%s: trb_mt is not last mbuf", __func__));
-		KASSERT(tsbn == NULL || SEQ_LT(tsb->trb_seqe, tsbn->trb_seqs),
+		KASSERT(trbn == NULL || SEQ_LT(trb->trb_seqe, trbn->trb_seqs),
 		    ("%s: overlaps into next block", __func__));
 		total += size;
 		i++;
@@ -230,7 +232,7 @@
 	KASSERT(tp->rcv_reass_size == total,
 	    ("%s: total not correct", __func__));
 
-	LIST_FOREACH(tcp_reass_block, &tp->rcv_reass_sack, trb_sack) {
+	LIST_FOREACH(trb, &tp->rcv_reass_sack, trb_sack) {
 		i--;
 	}
 	KASSERT(i == 0,
@@ -262,7 +264,7 @@
 	KASSERT(tcp_reass_verify(tp),
 	    ("%s: reassembly queue inconsistent", __func__));
 
-	RB_FOREACH_SAFE(trb, tcp_rb, &tp->rcv_reass, trbn) {
+	RB_FOREACH_SAFE(trb, tcp_ra, &tp->rcv_reass, trbn) {
 		tcp_reass_free(tp, trb);
 	}
 	KASSERT(tp->rcv_reass_size == 0, ("%s: snd_sacked not zero", __func__));
@@ -287,7 +289,7 @@
 int
 tcp_reass(struct tcpcb *tp, struct tcphdr *th, int *tlenp, struct mbuf *m)
 {
-	int i, thflags = 0;
+	int thflags = 0;
 	tcp_seq th_seq;
 	struct socket *so = tp->t_inpcb->inp_socket;
 	struct tcp_reass_block *trb, *trbn;
@@ -302,7 +304,7 @@
 	 */
 	if (th == NULL) {
 		if (!TCPS_HAVEESTABLISHED(tp->t_state) ||
-		    RB_EMPTY(&tp->t_trq) ||
+		    RB_EMPTY(&tp->rcv_reass) ||
 		    ((trb = RB_MIN(tcp_ra, &tp->rcv_reass)) &&
 		     trb->trb_seqs != tp->rcv_nxt))
 			return (0);
@@ -388,10 +390,10 @@
 			tcp_timer_activate(tp, TT_REASS, 0);
 			return (thflags);
 		}
-	} else if (*tlenp = 0) {
+	} else if (*tlenp == 0) {
 		m_freem(m);
 		return (0);
-	else
+	} else
 		thflags &= ~TH_FIN;
 
 	/* Get rid of packet header and mtags. */
@@ -413,7 +415,7 @@
 	 * Return match that has at least partial overlap to either side or
 	 * insert a new reassembly block.
 	 */
-	if ((trb = RB_FIND(tcp_rb, &tp->rcv_reass, &trbs)) != NULL) {
+	if ((trb = RB_FIND(tcp_ra, &tp->rcv_reass, &trbs)) != NULL) {
 		/* Within an already known block. */
 		if (SEQ_GEQ(trbs.trb_seqs, trb->trb_seqs) &&
 		    SEQ_LEQ(trbs.trb_seqe, trb->trb_seqe)) {
@@ -430,7 +432,7 @@
 			tcp_reass_sacktrack(tp, trb);
 
 			/* Merge in next blocks if there is overlap. */
-			while ((trbn = RB_NEXT(tcp_rb, &tp->rcv_reass, trb)) != NULL &&
+			while ((trbn = RB_NEXT(tcp_ra, &tp->rcv_reass, trb)) != NULL &&
 			    SEQ_GEQ(trbn->trb_seqs, trb->trb_seqe)) {
 				trbn = tcp_reass_merge(trb, trbn);
 				tcp_reass_free(tp, trbn);
@@ -443,9 +445,9 @@
 			tcp_reass_sacktrack(tp, trb);
 
 			/* Merge in previous blocks if there is overlap. */
-			while ((trbn = RB_PREV(tcp_rb, &tp->rcv_reass, trb)) != NULL &&
+			while ((trbn = RB_PREV(tcp_ra, &tp->rcv_reass, trb)) != NULL &&
 			    SEQ_GEQ(trbn->trb_seqe, trb->trb_seqs)) {
-				trbn = tcp_reass_merge(tp, trb, trbn);
+				trbn = tcp_reass_merge(trb, trbn);
 				tcp_reass_free(tp, trbn);
 			}
 		}
@@ -454,12 +456,12 @@
 		trb->trb_seqe = trbs.trb_seqe;
 		trb->trb_m = trbs.trb_m;
 		trb->trb_mt = trbs.trb_mt;
-		trbn = RB_INSERT(tcp_rb, &tp->rcv_reass, trb);
+		trbn = RB_INSERT(tcp_ra, &tp->rcv_reass, trb);
 		KASSERT(trbn == NULL, ("%s: RB_INSERT failed", __func__));
 		tcp_reass_sacktrack(tp, trb);
 		tp->rcv_reass_size += SEQ_DELTA(trb->trb_seqs, trb->trb_seqe);
 	} else if (tp->rcv_nxt == th_seq) {
-		trbn = RB_INSERT(tcp_rb, &tp->rcv_reass, &trbs);
+		trbn = RB_INSERT(tcp_ra, &tp->rcv_reass, &trbs);
 		KASSERT(trbn == NULL, ("%s: RB_INSERT failed", __func__));
 	}
 	if (tp->rcv_nxt == th_seq)
@@ -485,7 +487,7 @@
 	trb = RB_MIN(tcp_ra, &tp->rcv_reass);
 	if (!(so->so_rcv.sb_state & SBS_CANTRCVMORE)) {
 		sbappendstream_locked(&so->so_rcv, trb->trb_m);
-		tp->rcv_nxt += tqe->trq_len;
+		tp->rcv_nxt += SEQ_DELTA(trb->trb_seqs, trb->trb_seqe);
 		trb->trb_m = NULL;
 		trb->trb_mt = NULL;
 	}
@@ -519,7 +521,7 @@
  * Always merge trbn into trb!
  */
 static struct tcp_reass_block *
-tcp_reass_merge(struct tcpcb *tp, struct tcp_reass_block *trb, struct tcp_reass_block *trbn)
+tcp_reass_merge(struct tcp_reass_block *trb, struct tcp_reass_block *trbn)
 {
 	int i;
 
@@ -538,7 +540,7 @@
 		trb->trb_mt->m_next = trbn->trb_m;
 		trb->trb_mt = trbn->trb_mt;
 	} else if (SEQ_LEQ(trb->trb_seqs, trbn->trb_seqe)) {
-		if (SEQ_LEQ(trb->trb_seqs, trbn->trb_seqs)
+		if (SEQ_LEQ(trb->trb_seqs, trbn->trb_seqs))
 			return (trbn);
 		if ((i = SEQ_DELTA(trb->trb_seqs, trbn->trb_seqe)) > 0) {
 			m_adj(trb->trb_m, i);
@@ -564,27 +566,27 @@
 int
 tcp_reass_sack(struct tcpcb *tp, u_char *optp, int numsacks)
 {
-	struct trq *tqe;
+	struct tcp_reass_block *trb;
 	tcp_seq sack_seq;
 	int nsacks = 0;
 
 	INP_WLOCK_ASSERT(tp->t_inpcb);
 	KASSERT(numsacks > 0,
 	    ("%s: zero sack blocks to add", __func__));
-	KASSERT(!LIST_EMPTY(&tp->t_trq_sack),
+	KASSERT(!LIST_EMPTY(&tp->rcv_reass_sack),
 	    ("%s: sack list empty", __func__));
 
 	/*
 	 * The most recent block must appear first.  RFC2018, Section 4.
 	 * Add the other blocks in most recent created or updated order.
 	 */
-	LIST_FOREACH(tqe, &tp->t_trq_sack, trq_s) {
+	LIST_FOREACH(trb, &tp->rcv_reass_sack, trb_sack) {
 		if (numsacks < 1)
 			break;
-		sack_seq = htonl(tqe->trq_seq);
+		sack_seq = htonl(trb->trb_seqs);
 		bcopy((u_char *)&sack_seq, optp, sizeof(sack_seq));
 		optp += sizeof(sack_seq);
-		sack_seq = htonl(tqe->trq_seq + tqe->trq_len);
+		sack_seq = htonl(trb->trb_seqe);
 		bcopy((u_char *)&sack_seq, optp, sizeof(sack_seq));
 		optp += sizeof(sack_seq);
 		numsacks--;
@@ -605,4 +607,4 @@
 		    trb->trb_seqs, trb->trb_seqe);
 	}
 }
-#endif+#endif

==== //depot/projects/tcp_reass/netinet/tcp_subr.c#12 (text+ko) ====

@@ -749,8 +749,8 @@
 		tp->t_flags = (TF_REQ_SCALE|TF_REQ_TSTMP);
 	if (V_tcp_do_sack)
 		tp->t_flags |= TF_SACK_PERMIT;
-	TAILQ_INIT(&tp->t_trq);
-	LIST_INIT(&tp->t_trq_sack);
+	RB_INIT(&tp->rcv_reass);
+	LIST_INIT(&tp->rcv_reass_sack);
 	TAILQ_INIT(&tp->snd_holes);
 	tp->t_inpcb = inp;	/* XXX */
 	/*
@@ -883,7 +883,7 @@
 	}
 
 	/* Free the reassembly queue and other data structures. */
-	tcp_reass_qfree(tp);
+	tcp_reass_flush(tp);
 	tcp_free_sackholes(tp);
 
 	/* Disconnect offload device, if any. */
@@ -958,7 +958,7 @@
 				continue;
 			INP_WLOCK(inpb);
 			if ((tcpb = intotcpcb(inpb)) != NULL)
-				tcp_reass_qfree(tcpb);
+				tcp_reass_flush(tcpb);
 			INP_WUNLOCK(inpb);
 		}
 		INP_INFO_RUNLOCK(&V_tcbinfo);

==== //depot/projects/tcp_reass/netinet/tcp_var.h#19 (text+ko) ====

@@ -34,6 +34,7 @@
 #define _NETINET_TCP_VAR_H_
 
 #include <netinet/tcp.h>
+#include <sys/tree.h>
 
 #ifdef _KERNEL
 #include <net/vnet.h>
@@ -105,7 +106,7 @@
  */
 struct tcpcb {
 	RB_HEAD(tcp_ra, tcp_reass_block) rcv_reass;	/* segment reassembly queue */
-	LIST_HEAD(trq_shead, trq) rcv_reass_sack;	/* last additions to reass queue */
+	LIST_HEAD(tcp_ras, tcp_reass_block) rcv_reass_sack;	/* last additions to reass queue */
 	int	rcv_reass_size;		/* segment reassembly memory usage */
 
 	int	t_dupacks;		/* consecutive dup acks recd */



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