headroom = NET_SKB_PAD + sizeof(struct iphdr) +
uhlen + hdr_len;
old_headroom = skb_headroom(skb);
- if (skb_cow_head(skb, headroom)) {
- dev_kfree_skb(skb);
+ if (skb_cow_head(skb, headroom))
goto abort;
- }
new_headroom = skb_headroom(skb);
skb_orphan(skb);
/* Remove from tunnel list */
spin_lock_bh(&pn->l2tp_tunnel_list_lock);
list_del_rcu(&tunnel->list);
- kfree_rcu(tunnel, rcu);
spin_unlock_bh(&pn->l2tp_tunnel_list_lock);
+ synchronize_rcu();
atomic_dec(&l2tp_tunnel_count);
+ kfree(tunnel);
}
/* Create a socket for the tunnel, if one isn't set up by