Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Sep 2002 14:30:44 -0400 (EDT)
From:      "Andrew R. Reiter" <arr@watson.org>
To:        Poul-Henning Kamp <phk@FreeBSD.ORG>
Cc:        arch@FreeBSD.ORG
Subject:   Re: Trivial mbuf patch for review.
Message-ID:  <Pine.NEB.3.96L.1020918142918.51396A-100000@fledge.watson.org>
In-Reply-To: <3185.1032361630@critter.freebsd.dk>

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

The only comment I have is the same one I mentioned on irc (I guess it was
more in the form of a question) -- but for the record...

Should m_length() return unsigned?  Also, if not, should we fix below in
bpf.c where pktlen is unsigned?

Cheers,
Andrew


On Wed, 18 Sep 2002, 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 */
: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.
:
:To Unsubscribe: send mail to majordomo@FreeBSD.org
:with "unsubscribe freebsd-arch" in the body of the message
:

--
Andrew R. Reiter
arr@watson.org
arr@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?Pine.NEB.3.96L.1020918142918.51396A-100000>