diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/core/skbuff.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 4abdf71a23f8..d9addea10309 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -635,6 +635,26 @@ void kfree_skb(struct sk_buff *skb) | |||
635 | EXPORT_SYMBOL(kfree_skb); | 635 | EXPORT_SYMBOL(kfree_skb); |
636 | 636 | ||
637 | /** | 637 | /** |
638 | * skb_tx_error - report an sk_buff xmit error | ||
639 | * @skb: buffer that triggered an error | ||
640 | * | ||
641 | * Report xmit error if a device callback is tracking this skb. | ||
642 | * skb must be freed afterwards. | ||
643 | */ | ||
644 | void skb_tx_error(struct sk_buff *skb) | ||
645 | { | ||
646 | if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) { | ||
647 | struct ubuf_info *uarg; | ||
648 | |||
649 | uarg = skb_shinfo(skb)->destructor_arg; | ||
650 | if (uarg->callback) | ||
651 | uarg->callback(uarg, false); | ||
652 | skb_shinfo(skb)->tx_flags &= ~SKBTX_DEV_ZEROCOPY; | ||
653 | } | ||
654 | } | ||
655 | EXPORT_SYMBOL(skb_tx_error); | ||
656 | |||
657 | /** | ||
638 | * consume_skb - free an skbuff | 658 | * consume_skb - free an skbuff |
639 | * @skb: buffer to free | 659 | * @skb: buffer to free |
640 | * | 660 | * |