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>
