Date: Sat, 21 Sep 2002 19:54:43 +1000 From: Darren Reed <darrenr@reed.wattle.id.au> To: cvs-all@FreeBSD.org, cvs-committers@FreeBSD.org Cc: John@reed.wattle.id.au, Baldwin <jhb@FreeBSD.org> Subject: Re: cvs commit: src/sys/kern uipc_mbuf.c Message-ID: <200209210954.TAA28569@avalon.reed.wattle.id.au> In-Reply-To: <37234.1032598916@critter.freebsd.dk>
index | next in thread | previous in thread | raw e-mail
In some email I received from Poul-Henning Kamp, sie wrote:
> Darren,
>
> You don't seem to understand that this function is (should only be)
> used in cases where m_pkthdr.len cannot be used and that the only
> possible way to find the length in those cases is to traverse the
> chain.
So, explain to me why you've patched code to use m_length() in all
those places where m_pkthdr.len can be used and walking the chain
is a last-resort with no tail pointer is required.
> If you feel it is important to be able to use m_pkthdr.len in all
> cases, feel free to change the code which calls m_length() to be
> able to do this instead of calling m_length().
I think it should not use m_length() at all if you don't want to
rename m_length() or fix it so it works quicker for the most common
case.
That said, would anyone object to me adding the macro below to FreeBSD
in sys/mbuf.h ? It's a tad gross because of the local variables :/
Darren
/*
* MLENGTH(int len, struct mbuf *m)
* Computes the length of the mbuf chain (m) and stores in an integer (len)
*/
#define MLENGTH(l,m) \
do { \
if (((m)->m_pkthdr.flags & M_PKTHDR) != 0) \
(l) = (m)->m_pkthdr.len; \
else { \
struct mbuf *_m; \
int _l; \
\
for (_l = 0; _m = (m); _m != NULL; _m = _m->m_next) \
_l += m->m_len; \
(l) = _l; \
} \
} while (/* CONSTCOND */ 0)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209210954.TAA28569>
