Subject: Re: m_copy - doesn't copy if M_EXT is set.
To: Ignatios Souvatzis <is@jocelyn.rhein.de>
From: Dennis Ferguson <dennis@juniper.net>
List: tech-net
Date: 10/04/1999 15:03:37
> On Sun, Oct 03, 1999 at 05:23:24PM -0700, Justin C. Walker wrote:
> >    You're correct about the behavior of m_copy()/m_copym(), but not  
> > about it's having changed.  This is old behavior.
> 
> From before 4.4BSD, even, I think. Does anybody have a 4.3BSD book handy?

It has been like this since 4.2BSD when mbufs and mclusters were first
implemented, I think.  It was done this way for TCP, which wants to copy
data into packets while keeping a copy of the data on the send queue until
it is acknowledged.  Fragmentation and multicast also make advantageous use
of this.

This is also the reason why m_pullup() always copies the header out of a
cluster even if the header was originally contiguous in the cluster.

Dennis Ferguson