kmem_cache_free(skbuff_head_cache, skb);
switch (skb->fclone) { case SKB_FCLONE_UNAVAILABLE: kmem_cache_free(skbuff_head_cache, skb); break;  case SKB_FCLONE_ORIG: fclone_ref = (atomic_t *) (skb + 2); if (atomic_dec_and_test(fclone_ref)) kmem_cache_free(skbuff_fclone_cache, skb); break;  case SKB_FCLONE_CLONE: fclone_ref = (atomic_t *) (skb + 1); other = skb - 1;   skb->fclone = SKB_FCLONE_UNAVAILABLE;  if (atomic_dec_and_test(fclone_ref)) kmem_cache_free(skbuff_fclone_cache, other); break; };
void kfree_skbmem(struct sk_buff *skb){	skb_release_data(skb);	kmem_cache_free(skbuff_head_cache, skb);}