Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Dec 2000 20:06:01 +0000 (GMT)
From:      Terry Lambert <tlambert@primenet.com>
To:        dg@root.com
Cc:        gallatin@cs.duke.edu (Andrew Gallatin), bmilekic@technokratis.com (Bosko Milekic), ken@kdm.org (Kenneth D. Merry), arch@FreeBSD.ORG, alfred@FreeBSD.ORG
Subject:   Re: zero copy code review
Message-ID:  <200012032006.NAA00585@usr05.primenet.com>
In-Reply-To: <200012012326.PAA14154@implode.root.com> from "David Greenman" at Dec 01, 2000 03:26:19 PM

next in thread | previous in thread | raw e-mail | index | archive | help
> > > 	In your code, you do deal with the possibility of the MGETHDR
> > >   returning NULL (you check for it) and you set ENOBUFS in that case and
> > >   jump to the "errorpath" label. But, before using MGETHDR, you allocate an
> > >   sf_buf (in sf) and it just so happens that the code beyond "errorpath"
> > >   does not take care of freeing the sf_buf you allocated before even
> > >   trying to allocate the mbuf.
> >
> >I see your point.  This was copied, (bug for bug ;-), from sendfile itself.
> >Look at line 1700 or so of kern/uipc_syscalls.c..  This bug should
> >probaby be fixed there too..
> 
>    Oops. The original assumption (and code that I wrote) was that M_WAIT
> _cannot_ return a NULL pointer. This was changed in FreeBSD recently, and
> as you mentioned, the code added in rev 1.65 that now checks for it in
> sendfile doesn't do complete cleanup in this case. It definately should
> be fixed so that the sf_buf is freed as well.


There's a real easy fix for this:


	m_get_not_broken( flag, type)
		int	flag, type;
	{
		struct mbuf *m;

		do {
			m = m_get( flag, type);
		} while( flag == M_WAIT && m == NULL);

		return( m);
	}

I think the idea that the M_WAIT flag should be broken so that
it can be safely used in interrupt mode is dumb.


					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.


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?200012032006.NAA00585>