Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Jul 2009 17:07:17 GMT
From:      Andre Oppermann <andre@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 166462 for review
Message-ID:  <200907231707.n6NH7H4Y056119@repoman.freebsd.org>

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

Change 166462 by andre@andre_flirtbox on 2009/07/23 17:07:03

	Simplify D-SACK handling tcp_reass_sack() and remove
	code duplication.

Affected files ...

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

Differences ...

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

@@ -594,7 +594,7 @@
 {
 	int nsacks = 0;
 	tcp_seq sack_seq;
-	struct tcp_reass_block *trb;
+	struct tcp_reass_block *trb, trbs;
 
 	INP_WLOCK_ASSERT(tp->t_inpcb);
 	KASSERT(numsacks > 0,
@@ -602,18 +602,12 @@
 	KASSERT(!LIST_EMPTY(&tp->rcv_reass_sack),
 	    ("%s: sack list empty", __func__));
 
-	/* DSACK */
-	if (tp->rcv_reass_dsack.start == tp->rcv_reass_dsack.end) {
-		sack_seq = htonl(tp->rcv_reass_dsack.start);
-		bcopy((u_char *)&sack_seq, optp, sizeof(sack_seq));
-		optp += sizeof(sack_seq);
-		sack_seq = htonl(tp->rcv_reass_dsack.end);
-		bcopy((u_char *)&sack_seq, optp, sizeof(sack_seq));
-		optp += sizeof(sack_seq);
-		tp->rcv_reass_dsack.start = 0;
-		tp->rcv_reass_dsack.end = 0;
-		numsacks--;
-		nsacks++;
+	/* Create D-SACK block and temporarily insert it. */
+	if (tp->rcv_reass_dsack.start != tp->rcv_reass_dsack.end) {
+		bzero(&trbs, sizeof(trbs));
+		trbs.trb_seqs = htonl(tp->rcv_reass_dsack.start);
+		trbs.trb_seqe = htonl(tp->rcv_reass_dsack.end);
+		LIST_INSERT_HEAD(&tp->rcv_reass_sack, &trbs, trb_sack);
 	}
 
 	/*
@@ -634,6 +628,13 @@
 		nsacks++;
 	}
 
+	/* Remove D-SACK block again. */
+	if (LIST_FIRST(&tp->rcv_reass_sack) == &trbs) {
+		LIST_REMOVE(&trbs, trb_sack);
+		tp->rcv_reass_dsack.start = 0;
+		tp->rcv_reass_dsack.end = 0;
+	}
+
 	return (nsacks);
 }
 



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