|
@@ -694,12 +694,9 @@ EXPORT_SYMBOL(__kfree_skb);
|
|
|
*/
|
|
*/
|
|
|
void kfree_skb(struct sk_buff *skb)
|
|
void kfree_skb(struct sk_buff *skb)
|
|
|
{
|
|
{
|
|
|
- if (unlikely(!skb))
|
|
|
|
|
- return;
|
|
|
|
|
- if (likely(atomic_read(&skb->users) == 1))
|
|
|
|
|
- smp_rmb();
|
|
|
|
|
- else if (likely(!atomic_dec_and_test(&skb->users)))
|
|
|
|
|
|
|
+ if (!skb_unref(skb))
|
|
|
return;
|
|
return;
|
|
|
|
|
+
|
|
|
trace_kfree_skb(skb, __builtin_return_address(0));
|
|
trace_kfree_skb(skb, __builtin_return_address(0));
|
|
|
__kfree_skb(skb);
|
|
__kfree_skb(skb);
|
|
|
}
|
|
}
|
|
@@ -746,12 +743,9 @@ EXPORT_SYMBOL(skb_tx_error);
|
|
|
*/
|
|
*/
|
|
|
void consume_skb(struct sk_buff *skb)
|
|
void consume_skb(struct sk_buff *skb)
|
|
|
{
|
|
{
|
|
|
- if (unlikely(!skb))
|
|
|
|
|
- return;
|
|
|
|
|
- if (likely(atomic_read(&skb->users) == 1))
|
|
|
|
|
- smp_rmb();
|
|
|
|
|
- else if (likely(!atomic_dec_and_test(&skb->users)))
|
|
|
|
|
|
|
+ if (!skb_unref(skb))
|
|
|
return;
|
|
return;
|
|
|
|
|
+
|
|
|
trace_consume_skb(skb);
|
|
trace_consume_skb(skb);
|
|
|
__kfree_skb(skb);
|
|
__kfree_skb(skb);
|
|
|
}
|
|
}
|