From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751943AbdJBA7T (ORCPT ); Sun, 1 Oct 2017 20:59:19 -0400 Received: from mail-pg0-f51.google.com ([74.125.83.51]:50832 "EHLO mail-pg0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751148AbdJBA7R (ORCPT ); Sun, 1 Oct 2017 20:59:17 -0400 X-Google-Smtp-Source: AOwi7QDoldWaUvmsi8QQHauwjtSYr9EUd6QcqxnJFrTzJfjobXMWjQaPr8wnY23gm35ebl7Sbub5vg== Date: Sun, 1 Oct 2017 17:59:09 -0700 From: Stephen Hemminger To: Michael Witten Cc: "David S. Miller" , Alexey Kuznetsov , Hideaki YOSHIFUJI , Eric Dumazet , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH net 3/3] net: skb_queue_purge(): lock/unlock the queue only once Message-ID: <20171001175909.4b9e53d8@xeon-e3> In-Reply-To: References: <45aab5effc0c424a992646a97cf2ec14-mfwitten@gmail.com> <14527e6c082e4ea282a3f833118c68df-mfwitten@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 01 Oct 2017 22:19:20 -0000 Michael Witten 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);