Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Dec 2000 20:26:27 -0800
From:      Alfred Perlstein <bright@wintelcom.net>
To:        Bosko Milekic <bmilekic@technokratis.com>
Cc:        net@freebsd.org
Subject:   Re: need mbuf generic free() hook
Message-ID:  <20001212202626.U16205@fw.wintelcom.net>
In-Reply-To: <Pine.BSF.4.21.0012122312270.23680-100000@jehovah.technokratis.com>; from bmilekic@technokratis.com on Tue, Dec 12, 2000 at 11:16:24PM -0500
References:  <20001212042447.E16205@fw.wintelcom.net> <Pine.BSF.4.21.0012122312270.23680-100000@jehovah.technokratis.com>

next in thread | previous in thread | raw e-mail | index | archive | help
* Bosko Milekic <bmilekic@technokratis.com> [001212 20:15] wrote:
> 
>   Alfred,
> 
>   	You've brought this up before. This looks familiar to your earlier
>   post(s) regarding how to "abuse m_ext." Mind you, I may be mistaken, but
>   that would be because this isn't being made awfully clear.
> 	Earlier you talked about forcing a custom free routine to be called
>   even in the case of mbuf clusters, and we devised a way.
>   	Are you suggesting now to have a custom free routine called when your
>   mbuf is freed (i.e. even when it is a non-M_EXT mbuf?)
>   	If that's so, I would urge you to re-examine the code because doing
>   something like that would be generally wrong. I say "generally" because
>   I'm always open to exceptions, as you know. So please clarify.

Look at "option b" I think that's a good way to go with this, basically
being able to turn an mbuf into a mbuf that has its cluster pointer
pointed at itself.

> 
> On Tue, 12 Dec 2000, Alfred Perlstein wrote:
> 
> > Ok, so I'm trying to rid FreeBSD of the unp_gc() junk in uipc_usrreq.c
> > I just realized why I'm leaking file descriptors:
> > 
> > Only mbufs with external storage can have a 'free' function, the
> > problem is that for the most part when passing a single fd I'm only
> > using a single mbuf to pass my data around, my ext_free routine is
> > probably never called, and on top of that I'm probably corrupting
> > my mbuf by using it when I shouldn't be.
> > 
> > This is terrible, what should be a simple free() hook is now my
> > worst nightmare.  A couple of options come to mind:
> > 
> > a) always have a free hook, the extra if (m->m_freehook != NULL)
> > check can't be that expensive.
> > b) a macro to make an mbuf into an mbuf cluster that points to itself,
> > it should check to see if it has enough room to shuffle the data
> > and return an error if it can't accomidate both the data and the
> > expanded mbug header.
> > 
> > I like 'a' but would be willing to deal with 'b' as we've never
> > had a need for this, although that would mean copying about the
> > size of an mbuf in the worst case when a subsystem needs this 
> > facility.
> > 
> > Suggestions? Comments?
> > 
> > -- 
> > -Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
> > "I have the heart of a child; I keep it in a jar on my desk."
> > 
> > 
> 
> 
>   Bosko Milekic
>   bmilekic@technokratis.com
> 

-- 
-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
"I have the heart of a child; I keep it in a jar on my desk."


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




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