lkml.org 
[lkml]   [2017]   [Oct]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH net 3/3] net: skb_queue_purge(): lock/unlock the queue only once
On Sun, 01 Oct 2017 22:19:20 -0000
Michael Witten <mfwitten@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);


\
 
 \ /
  Last update: 2017-10-02 03:00    [W:0.071 / U:3.976 seconds]
©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site