PERFORCE change 166477 for review

Andre Oppermann andre at FreeBSD.org
Thu Jul 23 21:10:45 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=166477

Change 166477 by andre at andre_t61 on 2009/07/23 21:10:13

	Another go ot rcv_reass_size reporting the size of all sack'ed blocks held.

Affected files ...

.. //depot/projects/tcp_reass/netinet/tcp_reass.c#43 edit

Differences ...

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

@@ -219,8 +219,8 @@
 		total += size;
 		i++;
 	}
-	//KASSERT(tp->rcv_reass_size == total,
-	//    ("%s: total not correct", __func__));
+	KASSERT(tp->rcv_reass_size == total,
+	    ("%s: rcv_reass_size not correct", __func__));
 
 	LIST_FOREACH(trb, &tp->rcv_reass_sack, trb_sack) {
 		i--;
@@ -241,6 +241,7 @@
 	LIST_REMOVE(trb, trb_sack);
 	if (trb->trb_m != NULL)
 		m_freem(trb->trb_m);
+	tp->rcv_reass_size -= SEQ_DELTA(trb->trb_seqs, trb->trb_seqe);
 	tp->rcv_reass_blocks--;
 	uma_zfree(tcp_reass_zone, trb);
 }
@@ -257,7 +258,9 @@
 	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__));
+
+	KASSERT(tp->rcv_reass_size == 0,
+	    ("%s: rcv_reass_size not zero after flushing", __func__));
 }
 
 static __inline void
@@ -411,6 +414,7 @@
 			tp->rcv_reass_dsack.end = trbs.trb_seqe;
 			goto done;
 		}
+		tp->rcv_reass_size += SEQ_DELTA(trbs.trb_seqs, trbs.trb_seqe);
 
 		/* Merge in the new segment. */
 		(void)tcp_reass_merge(trb, &trbs);
@@ -528,16 +532,16 @@
 
 	KASSERT(trb != NULL && trbn != NULL,
 	    ("%s: incomplete input", __func__));
-
 	KASSERT(SEQ_LT(trbn->trb_seqs, trb->trb_seqs) ||
 	    SEQ_GT(trbn->trb_seqe, trb->trb_seqe),
-	    ("%s: ", __func__));
+	    ("%s: blocks not overlapping", __func__));
 
 	/* Replace, prepend and append. */
 	if (SEQ_LEQ(trbn->trb_seqs, trb->trb_seqs) &&
 	    SEQ_GEQ(trbn->trb_seqe, trb->trb_seqe)) {
 
-		m_freem(trb->trb_m);
+		i = SEQ_DELTA(trb->trb_seqs, trbn->trb_seqe);
+
 		trb->trb_seqs = trbn->trb_seqs;
 		trb->trb_seqe = trbn->trb_seqe;
 		trb->trb_m = trbn->trb_m;
@@ -575,10 +579,10 @@
 		return (NULL);
 
 	trbn->trb_seqs = 0;
-	trbn->trb_seqe = 0;
+	trbn->trb_seqe = i;
 	trbn->trb_m = NULL;
 	trbn->trb_mt = NULL;
-	return (trbn);		
+	return (trbn);
 }
 
 /*


More information about the p4-projects mailing list