diff options
author | David S. Miller <davem@davemloft.net> | 2010-08-03 03:24:04 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-08-03 03:24:04 -0400 |
commit | 3578b0c8abc7bdb4f02152ce5db7e09d484c6866 (patch) | |
tree | a884f8467e5700b798d52a038d56f99ee5bd73f1 /net/core/dev.c | |
parent | a427615e0420f179eab801b929111abaadea2ed3 (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.c | 4 |
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 | ||
1592 | void dev_kfree_skb_irq(struct sk_buff *skb) | 1592 | void 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 | ||