On Sun, 01 Oct 2017 22:19:20 -0000 Michael Witten <mfwit...@gmail.com> wrote:
> + spin_lock_irqsave(&q->lock, flags); > + skb = q->next; > + __skb_queue_head_init(q); > + spin_unlock_irqrestore(&q->lock, flags); Other code manipulating lists uses splice operation and a sk_buff_head temporary on the stack. That would be easier to understand. struct sk_buf_head head; __skb_queue_head_init(&head); spin_lock_irqsave(&q->lock, flags); skb_queue_splice_init(q, &head); spin_unlock_irqrestore(&q->lock, flags); > + while (skb != head) { > + next = skb->next; > kfree_skb(skb); > + skb = next; > + } It would be cleaner if you could use skb_queue_walk_safe rather than open coding the loop. skb_queue_walk_safe(&head, skb, tmp) kfree_skb(skb);