void __kfree_skb(struct sk_buff *skb) { if (skb->list) printk(KERN_WARNING "Warning: kfree_skb passed an skb still " "on a list (from %p).\n", __builtin_return_address(0)); dst_release(skb->dst); if(skb->destructor) skb->destructor(skb); skb_headerinit(skb, NULL, 0); /* clean state */ kfree_skbmem(skb); }
void __kfree_skb(struct sk_buff *skb) { if (skb->list) { printk(KERN_WARNING "Warning: kfree_skb passed an skb still " "on a list (from %p).\n", NET_CALLER(skb)); BUG(); } dst_release(skb->dst); if(skb->destructor) { if (in_irq()) { printk(KERN_WARNING "Warning: kfree_skb on hard IRQ %p\n", NET_CALLER(skb)); } skb->destructor(skb); } #ifdef CONFIG_NETFILTER nf_conntrack_put(skb->nfct); #endif skb_headerinit(skb, NULL, 0); /* clean state */ kfree_skbmem(skb); }