Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Mar 2003 12:15:01 -0500
From:      Bosko Milekic <bmilekic@unixdaemons.com>
To:        Maxime Henrion <mux@freebsd.org>
Cc:        cvs-all@freebsd.org
Subject:   Re: cvs commit: src/sys/conf options src/sys/netinet ip_output.c
Message-ID:  <20030327171501.GA18549@unixdaemons.com>
In-Reply-To: <20030327165800.GK57674@elvis.mu.org>
References:  <200303260452.h2Q4quap015364@www.ambrisko.com> <20030326114030.U2075@odysseus.silby.com> <20030326183351.GJ57674@elvis.mu.org> <20030326130903.G2075@odysseus.silby.com> <20030327013224.P7674@odysseus.silby.com> <20030327164402.GA15454@unixdaemons.com> <20030327165800.GK57674@elvis.mu.org>

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

--u3/rZRmxL6MmkK24
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline


See attached.  Similar logic may be applied to m_dup_pkthdr().

On Thu, Mar 27, 2003 at 05:58:00PM +0100, Maxime Henrion wrote:
> Bosko Milekic wrote:
> > 
> > Can you please still use m_gethdr() or m_getcl() to do the allocations
> > in the defragment function?  Similarly, for > MCLBYTES, use m_getm().
> > Don't roll your own.
> 
> Please see my reply to Mike for the first version of his patch.  He
> couldn't do this because m_dup_pkthdr() has a KASSERT() that makes it
> panic if we have a cluster attached to the mbuf.
> 
> Cheers,
> Maxime
> 

-- 
Bosko Milekic
bmilekic@unixdaemons.com
bmilekic@FreeBSD.org


--u3/rZRmxL6MmkK24
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="move.diff"

--- /usr/src/sys.old/kern/uipc_mbuf.c	Wed Mar  5 18:37:41 2003
+++ /usr/src/sys/kern/uipc_mbuf.c	Thu Mar  6 18:16:06 2003
@@ -79,14 +79,15 @@
 	    ("m_move_pkthdr: called on non-header"));
 	KASSERT(SLIST_EMPTY(&to->m_pkthdr.tags),
 	    ("m_move_pkthdr: to has tags"));
-#endif
 	KASSERT((to->m_flags & M_EXT) == 0, ("m_move_pkthdr: to has cluster"));
+#endif
 #ifdef MAC
 	if (to->m_flags & M_PKTHDR)
 		mac_destroy_mbuf(to);
 #endif
-	to->m_flags = from->m_flags & M_COPYFLAGS;
-	to->m_data = to->m_pktdat;
+	to->m_flags = (from->m_flags & M_COPYFLAGS) | (to->m_flags & M_EXT);
+	if ((to->m_flags & M_EXT) == 0)
+		to->m_data = to->m_pktdat;
 	to->m_pkthdr = from->m_pkthdr;		/* especially tags */
 #ifdef MAC
 	mac_init_mbuf(to, 1);			/* XXXMAC no way to fail */

--u3/rZRmxL6MmkK24--



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