Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Sep 2002 13:23:00 -0400
From:      Bosko Milekic <bmilekic@unixdaemons.com>
To:        Poul-Henning Kamp <phk@freebsd.org>
Cc:        arch@freebsd.org
Subject:   Re: Trivial mbuf patch for review.
Message-ID:  <20020918132300.A34069@unixdaemons.com>
In-Reply-To: <3185.1032361630@critter.freebsd.dk>; from phk@freebsd.org on Wed, Sep 18, 2002 at 05:07:10PM %2B0200
References:  <3185.1032361630@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help


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




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