PERFORCE change 165543 for review
Andre Oppermann
andre at FreeBSD.org
Thu Jul 2 14:22:16 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=165543
Change 165543 by andre at andre_flirtbox on 2009/07/02 14:21:57
Use TCPSTAT_INC/ADD macro to update tcp statistics.
Move empty queue test up and remove chained if test
in later tests.
Affected files ...
.. //depot/projects/tcp_reass/netinet/tcp_reass.c#26 edit
Differences ...
==== //depot/projects/tcp_reass/netinet/tcp_reass.c#26 (text+ko) ====
@@ -295,8 +295,8 @@
*/
if (th_seq != tp->rcv_nxt &&
tp->t_trqmcnt > (sbspace(&so->so_rcv) / 8 * 11)) {
- tcpstat.tcps_reass_overflow++;
- tcpstat.tcps_rcvmemdrop++;
+ TCPSTAT_INC(tcps_reass_overflow);
+ TCPSTAT_INC(tcps_rcvmemdrop);
m_freem(m);
*tlenp = 0;
return (0);
@@ -336,11 +336,15 @@
} else
thflags &= ~TH_FIN;
+ /* Check if this is the first segment. */
+ if (TAILQ_EMPTY(&tp->t_trq))
+ goto insert;
+
/* Starting point for the following tests. */
tqe = TAILQ_LAST(&tp->t_trq, trq_head);
/* Check if this segment directly attaches to the end. */
- if (tqe && tqe->trq_seq + tqe->trq_len == th_seq) {
+ if (tqe->trq_seq + tqe->trq_len == th_seq) {
tqe->trq_len += *tlenp;
tqe->trq_mcnt += mcnt;
tp->t_trqmcnt += mcnt;
@@ -357,18 +361,14 @@
LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s);
}
/* TCP statistics. */
- tcpstat.tcps_rcvoopack++;
- tcpstat.tcps_rcvoobyte += *tlenp;
- tcpstat.tcps_reass_tail++;
+ TCPSTAT_INC(tcps_rcvoopack);
+ TCPSTAT_ADD(tcps_rcvoobyte, *tlenp);
+ TCPSTAT_INC(tcps_reass_tail);
return (0);
}
/* Check if beyond last block. */
- if (tqe && SEQ_LT(tqe->trq_seq + tqe->trq_len, th_seq))
- goto insert;
-
- /* Check if this is the first segment. */
- if (TAILQ_EMPTY(&tp->t_trq))
+ if (SEQ_LT(tqe->trq_seq + tqe->trq_len, th_seq))
goto insert;
/* Check if this is the missing segment. */
@@ -383,8 +383,8 @@
m_adj(m, -i);
*tlenp -= i;
/* TCP statistics. */
- tcpstat.tcps_rcvpartduppack++;
- tcpstat.tcps_rcvpartdupbyte += i;
+ TCPSTAT_INC(tcps_rcvpartduppack);
+ TCPSTAT_ADD(tcps_rcvpartdupbyte, i);
/* Update accounting. */
mcnt = m_storagesize(m);
}
@@ -399,9 +399,10 @@
}
goto insert; /* No statistics, this segment is in line. */
}
+
+ /* TCP statistics. */
TCPSTAT_INC(tcps_rcvoopack);
TCPSTAT_ADD(tcps_rcvoobyte, *tlenp);
- /* TCP statistics. */
/* See where it fits. */
TAILQ_FOREACH_SAFE(tqe, &tp->t_trq, trq_q, tqen) {
@@ -415,10 +416,13 @@
/* Segment is already fully covered. */
if (SEQ_LEQ(tqe->trq_seq, th_seq) &&
SEQ_GEQ(tqe->trq_seq + tqe->trq_len, th_seq + *tlenp)) {
- tcpstat.tcps_rcvduppack++;
- tcpstat.tcps_rcvdupbyte += *tlenp;
- tcpstat.tcps_reass_covered++;
- /* XXXAO: What to SACK report when duplicate? */
+ TCPSTAT_INC(tcps_rcvduppack);
+ TCPSTAT_ADD(tcps_rcvdupbyte, *tlenp);
+ TCPSTAT_INC(tcps_reass_covered);
+ /*
+ * XXXAO: What to SACK report when duplicate?
+ * See RFC2883: D-SACK (Duplicate SACK)
+ */
if (LIST_FIRST(&tp->t_trq_sack) != tqe) {
LIST_REMOVE(tqe, trq_s);
LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s);
@@ -448,7 +452,7 @@
LIST_REMOVE(tqe, trq_s);
LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s);
}
- tcpstat.tcps_reass_replace++;
+ TCPSTAT_INC(tcps_reass_replace);
return (0);
}
@@ -463,8 +467,8 @@
m_adj(m, -i);
*tlenp -= i;
/* TCP statistics. */
- tcpstat.tcps_rcvpartduppack++;
- tcpstat.tcps_rcvpartdupbyte += i;
+ TCPSTAT_INC(tcps_rcvpartduppack);
+ TCPSTAT_ADD(tcps_rcvpartdupbyte, i);
/* Update accounting. */
mcnt = m_storagesize(m);
}
@@ -479,7 +483,7 @@
LIST_REMOVE(tqe, trq_s);
LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s);
}
- tcpstat.tcps_reass_prepend++;
+ TCPSTAT_INC(tcps_reass_prepend);
return (0);
}
@@ -492,8 +496,8 @@
m_adj(m, i);
*tlenp -= i;
/* TCP Statistics. */
- tcpstat.tcps_rcvpartduppack++;
- tcpstat.tcps_rcvpartdupbyte += i;
+ TCPSTAT_INC(tcps_rcvpartduppack);
+ TCPSTAT_ADD(tcps_rcvpartdupbyte, i);
}
tqe->trq_len += *tlenp;
tqe->trq_mcnt += mcnt;
@@ -508,7 +512,7 @@
LIST_REMOVE(tqe, trq_s);
LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s);
}
- tcpstat.tcps_reass_append++;
+ TCPSTAT_INC(tcps_reass_append);
return (0);
}
}
@@ -525,12 +529,12 @@
} else {
tqen = uma_zalloc(tcp_reass_zone, (M_NOWAIT|M_ZERO));
if (tqen == NULL) {
- tcpstat.tcps_rcvmemdrop++;
+ TCPSTAT_INC(tcps_rcvmemdrop);
m_freem(m);
*tlenp = 0;
return (0);
}
- tcpstat.tcps_reass_blocks++;
+ TCPSTAT_INC(tcps_reass_blocks);
}
tcp_reass_qsize++;
if (tcp_reass_spacetime) {
@@ -576,7 +580,7 @@
("%s: queue empty at present", __func__));
KASSERT((TAILQ_FIRST(&tp->t_trq))->trq_seq == tp->rcv_nxt,
("%s: first block does not match rcv_nxt", __func__));
- tcpstat.tcps_reass_missingseg++;
+ TCPSTAT_INC(tcps_reass_missingseg);
SOCKBUF_LOCK(&so->so_rcv);
TAILQ_FOREACH_SAFE(tqe, &tp->t_trq, trq_q, tqen) {
@@ -634,8 +638,8 @@
/* Appended block may reach beyond next block. */
while (SEQ_GEQ(tqe->trq_seq + tqe->trq_len, tqen->trq_seq + tqen->trq_len)) {
/* TCP Statistics. */
- tcpstat.tcps_rcvpartdupbyte += tqen->trq_len;
- tcpstat.tcps_reass_covered++;
+ TCPSTAT_ADD(tcps_rcvpartdupbyte, tqen->trq_len);
+ TCPSTAT_INC(tcps_reass_covered);
tp->t_trqmcnt -= tqe->trq_mcnt;
m_freem(tqen->trq_m);
TAILQ_REMOVE(&tp->t_trq, tqen, trq_q);
@@ -651,7 +655,7 @@
if ((i = SEQ_DELTA(tqe->trq_seq + tqe->trq_len, tqen->trq_seq))) {
m_adj(tqen->trq_m, i);
tqen->trq_len -= i;
- tcpstat.tcps_rcvpartdupbyte += i; /* Statistics */
+ TCPSTAT_ADD(tcps_rcvpartdupbyte, i); /* Statistics */
/* Dispose of empty mbufs. */
if (tcp_reass_spacetime) {
tqen->trq_m = m_trimhead(tqen->trq_m);
@@ -670,7 +674,7 @@
LIST_REMOVE(tqen, trq_s);
uma_zfree(tcp_reass_zone, tqen);
tcp_reass_qsize--;
- tcpstat.tcps_reass_merge++;
+ TCPSTAT_INC(tcps_reass_merge);
}
/*
More information about the p4-projects
mailing list