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);


Reply via email to