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>