Module Name: src Committed By: maxv Date: Fri Mar 30 08:53:51 UTC 2018
Modified Files: src/sys/netinet: tcp_output.c Log Message: Style, use NULL for pointers, use KASSERT, and don't inline huge functions, we want to debug them with DDB (and not just with GPROF). To generate a diff of this commit: cvs rdiff -u -r1.200 -r1.201 src/sys/netinet/tcp_output.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netinet/tcp_output.c diff -u src/sys/netinet/tcp_output.c:1.200 src/sys/netinet/tcp_output.c:1.201 --- src/sys/netinet/tcp_output.c:1.200 Thu Mar 29 07:46:43 2018 +++ src/sys/netinet/tcp_output.c Fri Mar 30 08:53:51 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: tcp_output.c,v 1.200 2018/03/29 07:46:43 maxv Exp $ */ +/* $NetBSD: tcp_output.c,v 1.201 2018/03/30 08:53:51 maxv Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -135,7 +135,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tcp_output.c,v 1.200 2018/03/29 07:46:43 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_output.c,v 1.201 2018/03/30 08:53:51 maxv Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -227,11 +227,7 @@ extern struct evcnt tcp_output_refbig; #endif /* TCP_OUTPUT_COUNTERS */ -static -#ifndef GPROF -inline -#endif -int +static int tcp_segsize(struct tcpcb *tp, int *txsegsizep, int *rxsegsizep, bool *alwaysfragp) { @@ -248,10 +244,8 @@ tcp_segsize(struct tcpcb *tp, int *txseg *alwaysfragp = false; -#ifdef DIAGNOSTIC - if (tp->t_inpcb && tp->t_in6pcb) - panic("tcp_segsize: both t_inpcb and t_in6pcb are set"); -#endif + KASSERT(!(tp->t_inpcb && tp->t_in6pcb)); + switch (tp->t_family) { case AF_INET: hdrlen = sizeof(struct ip) + sizeof(struct tcphdr); @@ -372,7 +366,7 @@ tcp_segsize(struct tcpcb *tp, int *txseg /* there may not be any room for data if mtu is too small */ if (size < 0) - return (EMSGSIZE); + return EMSGSIZE; /* * *rxsegsizep holds *estimated* inbound segment size (estimation @@ -412,14 +406,10 @@ tcp_segsize(struct tcpcb *tp, int *txseg tp->t_segsz = *txsegsizep; } - return (0); + return 0; } -static -#ifndef GPROF -inline -#endif -int +static int tcp_build_datapkt(struct tcpcb *tp, struct socket *so, int off, long len, int hdrlen, struct mbuf **mp) { @@ -441,7 +431,7 @@ tcp_build_datapkt(struct tcpcb *tp, stru #ifdef notyet if ((m = m_copypack(so->so_snd.sb_mb, off, (int)len, max_linkhdr + hdrlen)) == 0) - return (ENOBUFS); + return ENOBUFS; /* * m_copypack left space for our hdr; use it. */ @@ -450,7 +440,7 @@ tcp_build_datapkt(struct tcpcb *tp, stru #else MGETHDR(m, M_DONTWAIT, MT_HEADER); if (__predict_false(m == NULL)) - return (ENOBUFS); + return ENOBUFS; MCLAIM(m, &tcp_tx_mowner); /* @@ -464,7 +454,7 @@ tcp_build_datapkt(struct tcpcb *tp, stru MCLGET(m, M_DONTWAIT); if ((m->m_flags & M_EXT) == 0) { m_freem(m); - return (ENOBUFS); + return ENOBUFS; } } @@ -508,26 +498,26 @@ tcp_build_datapkt(struct tcpcb *tp, stru off = tp->t_inoff; if (len <= M_TRAILINGSPACE(m)) { - m_copydata(m0, off, (int) len, mtod(m, char *) + hdrlen); + m_copydata(m0, off, (int)len, mtod(m, char *) + hdrlen); m->m_len += len; TCP_OUTPUT_COUNTER_INCR(&tcp_output_copysmall); } else { - m->m_next = m_copym(m0, off, (int) len, M_DONTWAIT); + m->m_next = m_copym(m0, off, (int)len, M_DONTWAIT); if (m->m_next == NULL) { m_freem(m); - return (ENOBUFS); + return ENOBUFS; } #ifdef TCP_OUTPUT_COUNTERS if (m->m_next->m_flags & M_EXT) TCP_OUTPUT_COUNTER_INCR(&tcp_output_refbig); else TCP_OUTPUT_COUNTER_INCR(&tcp_output_copybig); -#endif /* TCP_OUTPUT_COUNTERS */ +#endif } #endif *mp = m; - return (0); + return 0; } /* @@ -568,10 +558,8 @@ tcp_output(struct tcpcb *tp) #endif uint64_t *tcps; -#ifdef DIAGNOSTIC - if (tp->t_inpcb && tp->t_in6pcb) - panic("tcp_output: both t_inpcb and t_in6pcb are set"); -#endif + KASSERT(!(tp->t_inpcb && tp->t_in6pcb)); + so = NULL; ro = NULL; if (tp->t_inpcb) { @@ -594,19 +582,19 @@ tcp_output(struct tcpcb *tp) if (tp->t_in6pcb) break; #endif - return (EINVAL); + return EINVAL; #ifdef INET6 case AF_INET6: if (tp->t_in6pcb) break; - return (EINVAL); + return EINVAL; #endif default: - return (EAFNOSUPPORT); + return EAFNOSUPPORT; } if (tcp_segsize(tp, &txsegsize, &rxsegsize, &alwaysfrag)) - return (EMSGSIZE); + return EMSGSIZE; idle = (tp->snd_max == tp->snd_una); @@ -739,7 +727,7 @@ again: * now, and we previously incremented snd_cwnd in tcp_input(). */ /* - * Still in sack recovery , reset rxmit flag to zero. + * Still in sack recovery, reset rxmit flag to zero. */ sack_rxmit = 0; sack_bytes_rxmt = 0; @@ -749,12 +737,12 @@ again: long cwin; if (!TCP_SACK_ENABLED(tp)) break; - if (tp->t_partialacks < 0) + if (tp->t_partialacks < 0) break; p = tcp_sack_output(tp, &sack_bytes_rxmt); if (p == NULL) break; - + cwin = min(tp->snd_wnd, tp->snd_cwnd) - sack_bytes_rxmt; if (cwin < 0) cwin = 0; @@ -844,14 +832,14 @@ again: /* * From FreeBSD: * Don't remove this (len > 0) check ! - * We explicitly check for len > 0 here (although it - * isn't really necessary), to work around a gcc + * We explicitly check for len > 0 here (although it + * isn't really necessary), to work around a gcc * optimization issue - to force gcc to compute * len above. Without this check, the computation * of len is bungled by the optimizer. */ if (len > 0) { - cwin = tp->snd_cwnd - + cwin = tp->snd_cwnd - (tp->snd_nxt - tp->sack_newdata) - sack_bytes_rxmt; if (cwin < 0) @@ -1081,7 +1069,7 @@ dontupdate: */ just_return: TCP_REASS_UNLOCK(tp); - return (0); + return 0; send: /* @@ -1197,7 +1185,7 @@ send: */ if (!OPT_FITS(TCPOLEN_SIGNATURE)) goto reset; - + *optp++ = TCPOPT_SIGNATURE; *optp++ = TCPOLEN_SIGNATURE; sigoff = optlen + 2; @@ -1205,7 +1193,7 @@ send: optlen += TCPOLEN_SIGNATURE; optp += TCP_SIGLEN; } -#endif /* TCP_SIGNATURE */ +#endif /* * Tack on the SACK block if it is necessary. @@ -1351,7 +1339,7 @@ reset: TCP_REASS_UNLOCK(tp); th = NULL; break; } - if (tp->t_template == 0) + if (tp->t_template == NULL) panic("tcp_output"); if (tp->t_template->m_len < iphdrlen) panic("tcp_output"); @@ -1391,13 +1379,12 @@ reset: TCP_REASS_UNLOCK(tp); if (tp->t_flags & TF_ECN_SND_CWR) { flags |= TH_CWR; tp->t_flags &= ~TF_ECN_SND_CWR; - } + } if (tp->t_flags & TF_ECN_SND_ECE) { flags |= TH_ECE; } } - /* * If we are doing retransmissions, then snd_nxt will * not reflect the first unsent octet. For ACK only @@ -1465,7 +1452,7 @@ reset: TCP_REASS_UNLOCK(tp); if (sav == NULL) { if (m) m_freem(m); - return (EPERM); + return EPERM; } m->m_pkthdr.len = hdrlen + len; @@ -1689,12 +1676,12 @@ out: if (tp->t_flags & TF_DELACK) TCP_RESTART_DELACK(tp); - return (error); + return error; } if (packetlen > tp->t_pmtud_mtu_sent) tp->t_pmtud_mtu_sent = packetlen; - + tcps = TCP_STAT_GETREF(); tcps[TCP_STAT_SNDTOTAL]++; if (tp->t_flags & TF_DELACK) @@ -1718,7 +1705,7 @@ out: #endif if (sendalot && (tp->t_congctl == &tcp_reno_ctl || --maxburst)) goto again; - return (0); + return 0; } void