From owner-freebsd-arch Wed Sep 18 10:21:52 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9931737B401; Wed, 18 Sep 2002 10:21:45 -0700 (PDT) Received: from tesla.distributel.net (nat.MTL.distributel.NET [66.38.181.24]) by mx1.FreeBSD.org (Postfix) with ESMTP id D500A43E6E; Wed, 18 Sep 2002 10:21:44 -0700 (PDT) (envelope-from bmilekic@unixdaemons.com) Received: (from bmilekic@localhost) by tesla.distributel.net (8.11.6/8.11.6) id g8IHN0734107; Wed, 18 Sep 2002 13:23:00 -0400 (EDT) (envelope-from bmilekic@unixdaemons.com) Date: Wed, 18 Sep 2002 13:23:00 -0400 From: Bosko Milekic To: Poul-Henning Kamp Cc: arch@freebsd.org Subject: Re: Trivial mbuf patch for review. Message-ID: <20020918132300.A34069@unixdaemons.com> References: <3185.1032361630@critter.freebsd.dk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: <3185.1032361630@critter.freebsd.dk>; from phk@freebsd.org on Wed, Sep 18, 2002 at 05:07:10PM +0200 Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Wed, Sep 18, 2002 at 05:07:10PM +0200, Poul-Henning Kamp wrote: > > This patch is a no-op which replaces local mbuf-chain counting > loops with calls to m_length() and in one case m_fixhdr(). > > Index: kern/uipc_socket2.c > =================================================================== > RCS file: /home/ncvs/src/sys/kern/uipc_socket2.c,v > retrieving revision 1.103 > diff -u -r1.103 uipc_socket2.c > --- kern/uipc_socket2.c 16 Aug 2002 18:41:48 -0000 1.103 > +++ kern/uipc_socket2.c 18 Sep 2002 14:08:34 -0000 > @@ -498,11 +498,11 @@ > #ifdef SOCKBUF_DEBUG > void > sbcheck(sb) > - register struct sockbuf *sb; > + struct sockbuf *sb; > { > - register struct mbuf *m; > - register struct mbuf *n = 0; > - register u_long len = 0, mbcnt = 0; > + struct mbuf *m; > + struct mbuf *n = 0; > + u_long len = 0, mbcnt = 0; > > for (m = sb->sb_mb; m; m = n) { > n = m->m_nextpkt; > @@ -610,22 +610,18 @@ > */ > int > sbappendaddr(sb, asa, m0, control) > - register struct sockbuf *sb; > + struct sockbuf *sb; > struct sockaddr *asa; > struct mbuf *m0, *control; > { > - register struct mbuf *m, *n; > + struct mbuf *m, *n; > int space = asa->sa_len; > > if (m0 && (m0->m_flags & M_PKTHDR) == 0) > panic("sbappendaddr"); > if (m0) > space += m0->m_pkthdr.len; > - for (n = control; n; n = n->m_next) { > - space += n->m_len; > - if (n->m_next == 0) /* keep pointer to last control buf */ > - break; > - } > + space += m_length(control, &n); > if (space > sbspace(sb)) > return (0); > if (asa->sa_len > MLEN) > @@ -657,19 +653,12 @@ > struct sockbuf *sb; > struct mbuf *control, *m0; > { > - register struct mbuf *m, *n; > - int space = 0; > + struct mbuf *m, *n; > + int space; > > if (control == 0) > panic("sbappendcontrol"); > - for (m = control; ; m = m->m_next) { > - space += m->m_len; > - if (m->m_next == 0) > - break; > - } > - n = m; /* save pointer to last control buffer */ > - for (m = m0; m; m = m->m_next) > - space += m->m_len; > + space = m_length(control, &n) + m_length(m0, NULL); > if (space > sbspace(sb)) > return (0); > n->m_next = m0; /* concatenate data to control */ Looks like there is a problem here, as you removed the 'n = m' initialization. > Index: net/bpf.c > =================================================================== > RCS file: /home/ncvs/src/sys/net/bpf.c,v > retrieving revision 1.94 > diff -u -r1.94 bpf.c > --- net/bpf.c 31 Jul 2002 16:11:32 -0000 1.94 > +++ net/bpf.c 18 Sep 2002 14:18:31 -0000 > @@ -1123,11 +1123,8 @@ > struct bpf_if *bp = ifp->if_bpf; > struct bpf_d *d; > u_int pktlen, slen; > - struct mbuf *m0; > > - pktlen = 0; > - for (m0 = m; m0 != 0; m0 = m0->m_next) > - pktlen += m0->m_len; > + pktlen = m_length(m, NULL); > > BPFIF_LOCK(bp); > for (d = bp->bif_dlist; d != 0; d = d->bd_next) { > Index: net/if_ppp.c > =================================================================== > RCS file: /home/ncvs/src/sys/net/if_ppp.c,v > retrieving revision 1.83 > diff -u -r1.83 if_ppp.c > --- net/if_ppp.c 19 Aug 2002 19:22:41 -0000 1.83 > +++ net/if_ppp.c 18 Sep 2002 14:19:07 -0000 > @@ -758,7 +758,6 @@ > struct ifqueue *ifq; > enum NPmode mode; > int len; > - struct mbuf *m; > > #ifdef MAC > error = mac_check_ifnet_transmit(ifp, m0); > @@ -851,9 +850,7 @@ > *cp++ = protocol & 0xff; > m0->m_len += PPP_HDRLEN; > > - len = 0; > - for (m = m0; m != 0; m = m->m_next) > - len += m->m_len; > + len = m_length(m0, NULL); > > if (sc->sc_flags & SC_LOG_OUTPKT) { > printf("ppp%d output: ", ifp->if_unit); > @@ -1087,9 +1084,7 @@ > struct mbuf *mcomp = NULL; > int slen, clen; > > - slen = 0; > - for (mp = m; mp != NULL; mp = mp->m_next) > - slen += mp->m_len; > + slen = m_length(m, NULL); > clen = (*sc->sc_xcomp->compress) > (sc->sc_xc_state, &mcomp, m, slen, sc->sc_if.if_mtu + PPP_HDRLEN); > if (mcomp != NULL) { > @@ -1324,9 +1319,7 @@ > sc->sc_stats.ppp_ipackets++; > > if (sc->sc_flags & SC_LOG_INPKT) { > - ilen = 0; > - for (mp = m; mp != NULL; mp = mp->m_next) > - ilen += mp->m_len; > + ilen = m_length(m, NULL); > printf("ppp%d: got %d bytes\n", ifp->if_unit, ilen); > pppdumpm(m); > } > @@ -1389,9 +1382,7 @@ > } > #endif > > - ilen = 0; > - for (mp = m; mp != NULL; mp = mp->m_next) > - ilen += mp->m_len; > + ilen = m_length(m, NULL); > > #ifdef VJC > if (sc->sc_flags & SC_VJ_RESET) { > Index: netinet/ip_input.c > =================================================================== > RCS file: /home/ncvs/src/sys/netinet/ip_input.c,v > retrieving revision 1.208 > diff -u -r1.208 ip_input.c > --- netinet/ip_input.c 17 Sep 2002 11:20:02 -0000 1.208 > +++ netinet/ip_input.c 18 Sep 2002 13:47:10 -0000 > @@ -1071,12 +1071,8 @@ > m->m_len += (IP_VHL_HL(ip->ip_vhl) << 2); > m->m_data -= (IP_VHL_HL(ip->ip_vhl) << 2); > /* some debugging cruft by sklower, below, will go away soon */ > - if (m->m_flags & M_PKTHDR) { /* XXX this should be done elsewhere */ > - register int plen = 0; > - for (t = m; t; t = t->m_next) > - plen += t->m_len; > - m->m_pkthdr.len = plen; > - } > + if (m->m_flags & M_PKTHDR) /* XXX this should be done elsewhere */ > + m_fixhdr(m); > return (m); > > dropfrag: > Index: netns/idp_usrreq.c > =================================================================== > RCS file: /home/ncvs/src/sys/netns/idp_usrreq.c,v > retrieving revision 1.12 > diff -u -r1.12 idp_usrreq.c > --- netns/idp_usrreq.c 31 May 2002 11:52:34 -0000 1.12 > +++ netns/idp_usrreq.c 18 Sep 2002 14:14:06 -0000 > @@ -144,18 +144,12 @@ > register struct mbuf *m; > register struct idp *idp; > register struct socket *so; > - register int len = 0; > + register int len; > register struct route *ro; > struct mbuf *mprev; > extern int idpcksum; > > - /* > - * Calculate data length. > - */ > - for (m = m0; m; m = m->m_next) { > - mprev = m; > - len += m->m_len; > - } > + len = m_length(m0, &mprev); > /* > * Make sure packet is actually of even length. > */ > Index: netns/spp_usrreq.c > =================================================================== > RCS file: /home/ncvs/src/sys/netns/spp_usrreq.c,v > retrieving revision 1.16 > diff -u -r1.16 spp_usrreq.c > --- netns/spp_usrreq.c 25 Aug 2002 13:17:35 -0000 1.16 > +++ netns/spp_usrreq.c 18 Sep 2002 14:13:27 -0000 > @@ -687,8 +687,7 @@ > firstbad = m; > /*for (;;) {*/ > /* calculate length */ > - for (m0 = m, len = 0; m ; m = m->m_next) > - len += m->m_len; > + len = m_length(m); > if (len > cb->s_mtu) { > } > /* FINISH THIS > Index: netsmb/smb_rq.c > =================================================================== > RCS file: /home/ncvs/src/sys/netsmb/smb_rq.c,v > retrieving revision 1.7 > diff -u -r1.7 smb_rq.c > --- netsmb/smb_rq.c 16 Sep 2002 09:51:58 -0000 1.7 > +++ netsmb/smb_rq.c 18 Sep 2002 14:12:50 -0000 > @@ -421,9 +421,7 @@ > m0 = m_split(mtop, offset, M_TRYWAIT); > if (m0 == NULL) > return EBADRPC; > - for(len = 0, m = m0; m->m_next; m = m->m_next) > - len += m->m_len; > - len += m->m_len; > + len = m_length(m0, &m); > m->m_len -= len - count; > if (mdp->md_top == NULL) { > md_initm(mdp, m0); > Index: nfsclient/nfs_socket.c > =================================================================== > RCS file: /home/ncvs/src/sys/nfsclient/nfs_socket.c,v > retrieving revision 1.86 > diff -u -r1.86 nfs_socket.c > --- nfsclient/nfs_socket.c 8 Sep 2002 15:11:18 -0000 1.86 > +++ nfsclient/nfs_socket.c 18 Sep 2002 14:19:42 -0000 > @@ -869,13 +869,7 @@ > rep->r_vp = vp; > rep->r_td = td; > rep->r_procnum = procnum; > - i = 0; > - m = mrest; > - while (m) { > - i += m->m_len; > - m = m->m_next; > - } > - mrest_len = i; > + mrest_len = i = m_length(mrest, NULL); > > /* > * Get the RPC header with authorization. > Index: nfsserver/nfs_syscalls.c > =================================================================== > RCS file: /home/ncvs/src/sys/nfsserver/nfs_syscalls.c,v > retrieving revision 1.80 > diff -u -r1.80 nfs_syscalls.c > --- nfsserver/nfs_syscalls.c 24 Jul 2002 23:10:34 -0000 1.80 > +++ nfsserver/nfs_syscalls.c 18 Sep 2002 14:11:36 -0000 > @@ -451,12 +451,7 @@ > nfsrv_updatecache(nd, TRUE, mreq); > nd->nd_mrep = NULL; > case RC_REPLY: > - m = mreq; > - siz = 0; > - while (m) { > - siz += m->m_len; > - m = m->m_next; > - } > + siz = m_length(mreq, NULL); > if (siz <= 0 || siz > NFS_MAXPACKET) { > printf("mbuf siz=%d\n",siz); > panic("Bad nfs svc reply"); > -- > Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 > phk@FreeBSD.ORG | TCP/IP since RFC 956 > FreeBSD committer | BSD since 4.3-tahoe > Never attribute to malice what can adequately be explained by incompetence. The rest looks OK, from a very quick glance. By the way, it's good to see that you're doing some cleanups in this code (re: m_length() implementation and m_fixhdr() movements). Thank you. Regards, -- Bosko Milekic * bmilekic@unixdaemons.com * bmilekic@FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message