diff options
Diffstat (limited to 'net/core/skbuff.c')
-rw-r--r-- | net/core/skbuff.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index cfd777bd6bd0..1c1738cc4538 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -483,15 +483,8 @@ EXPORT_SYMBOL(skb_add_rx_frag); | |||
483 | 483 | ||
484 | static void skb_drop_list(struct sk_buff **listp) | 484 | static void skb_drop_list(struct sk_buff **listp) |
485 | { | 485 | { |
486 | struct sk_buff *list = *listp; | 486 | kfree_skb_list(*listp); |
487 | |||
488 | *listp = NULL; | 487 | *listp = NULL; |
489 | |||
490 | do { | ||
491 | struct sk_buff *this = list; | ||
492 | list = list->next; | ||
493 | kfree_skb(this); | ||
494 | } while (list); | ||
495 | } | 488 | } |
496 | 489 | ||
497 | static inline void skb_drop_fraglist(struct sk_buff *skb) | 490 | static inline void skb_drop_fraglist(struct sk_buff *skb) |
@@ -651,6 +644,17 @@ void kfree_skb(struct sk_buff *skb) | |||
651 | } | 644 | } |
652 | EXPORT_SYMBOL(kfree_skb); | 645 | EXPORT_SYMBOL(kfree_skb); |
653 | 646 | ||
647 | void kfree_skb_list(struct sk_buff *segs) | ||
648 | { | ||
649 | while (segs) { | ||
650 | struct sk_buff *next = segs->next; | ||
651 | |||
652 | kfree_skb(segs); | ||
653 | segs = next; | ||
654 | } | ||
655 | } | ||
656 | EXPORT_SYMBOL(kfree_skb_list); | ||
657 | |||
654 | /** | 658 | /** |
655 | * skb_tx_error - report an sk_buff xmit error | 659 | * skb_tx_error - report an sk_buff xmit error |
656 | * @skb: buffer that triggered an error | 660 | * @skb: buffer that triggered an error |