kernels/linux-2.4.0/include/linux/skbuff.h
/**
 *	skb_unlink	-	remove a buffer from a list
 *	@skb: buffer to remove
 *
 *	Place a packet after a given packet in a list. The list locks are taken
 *	and this function is atomic with respect to other list locked calls
 *	
 *	Works even without knowing the list it is sitting on, which can be 
 *	handy at times. It also means that THE LIST MUST EXIST when you 
 *	unlink. Thus a list must have its contents unlinked before it is
 *	destroyed.
 */
skb_unlink      -       remove a buffer from a list
@skb: buffer to remove

Place a packet after a given packet in a list. The list locks are taken
and this function is atomic with respect to other list locked calls

Works even without knowing the list it is sitting on, which can be
handy at times.
skb_unlink - remove a buffer from a list @skb : buffer to remove Place a packet after a given packet in a list . The list locks are taken and this function is atomic with respect to other list locked calls Works even without knowing the list it is sitting on which can be handy at times .
static inline void skb_unlink(struct sk_buff *skb)
{
	struct sk_buff_head *list = skb->list;
	if(list) {
		unsigned long flags;
		spin_lock_irqsave(&list->lock, flags);
		if(skb->list == list)
			__skb_unlink(skb, skb->list);
		spin_unlock_irqrestore(&list->lock, flags);
	}
}
static inline void skb_unlink ( struct sk_buff * skb ) { struct sk_buff_head * list = skb -> list ; if ( list ) { unsigned long flags ; spin_lock_irqsave ( & list -> lock , flags ) ; if ( skb -> list == list ) __skb_unlink ( skb , skb -> list ) ; spin_unlock_irqrestore ( & list -> lock , flags ) ; } }
skb_unlink      -       remove a buffer from a list
      @skb: buffer to remove
skb_unlink - remove a buffer from a list @skb : buffer to remove