kernels/linux-2.4.0/include/linux/skbuff.h
/**
 *	skb_cow - copy a buffer if need be
 *	@skb: buffer to copy
 *	@headroom: needed headroom
 *
 *	If the buffer passed lacks sufficient headroom or is a clone then
 *	it is copied and the additional headroom made available. If there
 *	is no free memory %NULL is returned. The new buffer is returned if
 *	a copy was made (and the old one dropped a reference). The existing
 *	buffer is returned otherwise.
 *
 *	This function primarily exists to avoid making two copies when making
 *	a writable copy of a buffer and then growing the headroom.
 */
copy a buffer if need be
@skb: buffer to copy
@headroom: needed headroom

If the buffer passed lacks sufficient headroom or is a clone then
it is copied and the additional headroom made available. If there
is no free memory %NULL is returned. The new buffer is returned if
a copy was made (and the old one dropped a reference). The existing
buffer is returned otherwise.

This function primarily exists to avoid making two copies when making
a writable copy of a buffer and then growing the headroom.
copy a buffer if need be @skb : buffer to copy @headroom : needed headroom If the buffer passed lacks sufficient headroom or is a clone then it is copied and the additional headroom made available . If there is no free memory %NULL is returned . The new buffer is returned if a copy was made ( and the old one dropped a reference ) . The existing buffer is returned otherwise . This function primarily exists to avoid making two copies when making a writable copy of a buffer and then growing the headroom .
static inline struct sk_buff *
skb_cow(struct sk_buff *skb, unsigned int headroom)
{
	headroom = (headroom+15)&~15;
	if ((unsigned)skb_headroom(skb) < headroom || skb_cloned(skb)) {
		struct sk_buff *skb2 = skb_realloc_headroom(skb, headroom);
		kfree_skb(skb);
		skb = skb2;
	}
	return skb;
}
static inline struct sk_buff * skb_cow ( struct sk_buff * skb , unsigned int headroom ) { headroom = ( headroom + 15 ) & ~ 15 ; if ( ( unsigned ) skb_headroom ( skb ) < headroom || skb_cloned ( skb ) ) { struct sk_buff * skb2 = skb_realloc_headroom ( skb , headroom ) ; kfree_skb ( skb ) ; skb = skb2 ; } return skb ; }
skb_cow - copy a buffer if need be
      @skb: buffer to copy
      @headroom: needed headroom
skb_cow - copy a buffer if need be @skb : buffer to copy @headroom : needed headroom