aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-08-03 03:24:04 -0400
committerDavid S. Miller <davem@davemloft.net>2010-08-03 03:24:04 -0400
commit3578b0c8abc7bdb4f02152ce5db7e09d484c6866 (patch)
treea884f8467e5700b798d52a038d56f99ee5bd73f1 /net/core/dev.c
parenta427615e0420f179eab801b929111abaadea2ed3 (diff)
Revert "net: remove zap_completion_queue"
This reverts commit 15e83ed78864d0625e87a85f09b297c0919a4797. As explained by Johannes Berg, the optimization made here is invalid. Or, at best, incomplete. Not only destructor invocation, but conntract entry releasing must be executed outside of hw IRQ context. So just checking "skb->destructor" is insufficient. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 8c663dbf1d77..e1c1cdcc2bb0 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1591,9 +1591,7 @@ EXPORT_SYMBOL(__netif_schedule);
1591 1591
1592void dev_kfree_skb_irq(struct sk_buff *skb) 1592void dev_kfree_skb_irq(struct sk_buff *skb)
1593{ 1593{
1594 if (!skb->destructor) 1594 if (atomic_dec_and_test(&skb->users)) {
1595 dev_kfree_skb(skb);
1596 else if (atomic_dec_and_test(&skb->users)) {
1597 struct softnet_data *sd; 1595 struct softnet_data *sd;
1598 unsigned long flags; 1596 unsigned long flags;
1599 1597