From patchwork Tue May 19 23:24:51 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baptiste Covolato X-Patchwork-Id: 474093 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 717DE140077 for ; Wed, 20 May 2015 09:25:34 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=arista.com header.i=@arista.com header.b=brqJk9ZJ; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751537AbbESXZb (ORCPT ); Tue, 19 May 2015 19:25:31 -0400 Received: from mail-pa0-f50.google.com ([209.85.220.50]:35939 "EHLO mail-pa0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751117AbbESXZT (ORCPT ); Tue, 19 May 2015 19:25:19 -0400 Received: by pabts4 with SMTP id ts4so43561617pab.3 for ; Tue, 19 May 2015 16:25:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=OqxgT4gd3/f11K3vrObk4GoGk+uxkDBn7h1PbrOYWb8=; b=brqJk9ZJ71hmkarFer2WuJ9CFCJxYC2PH6s7rc/+5ogFbhL+BBfBcTNUAJf9lxugfj eUuirnhheblIawZ5272vIcOQPBSlyWw68vsmv8+0PJsY0IJCdfZNP5lU6LvPmeBCM0hL uSfSj4fjgRpoXyqeBbCM/CWBm79dd2NJjEo8A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=OqxgT4gd3/f11K3vrObk4GoGk+uxkDBn7h1PbrOYWb8=; b=iTfXWiRIUIVCeMz8270WDKCt/zFd5vXe6M77zv80+56Dcvr3eUW80ZUP8Q1wskE2Nc 46iOjXtSaa5Veu2ZgPQE5tImFIxBOkSmHHs9zI9E/Yk9IZt9AB5z+tU+iOy7G4JdRv1v BEWcBiDRaXHaG2cD4P++a5Ynu2c/Rw0tacjn5ghyJ/5eoarNpGGNhE7BB3DJhTsofw61 odPuiNiHjdukMMWTRn0INQ4TulauouQLjgtMzMgl1i+zNbZatsgzJkAiLhaO0JQOdxti 4y8HheDIiMEIwSww4adA1YaE//e8j4SXEyX31SGg2+TTRRjxiC2GYTjgpAmtDaf16grv tyzQ== X-Gm-Message-State: ALoCoQmohshGKBKuGpm+jSIuQsoKkJLho6x28L88Fnc6venn1CMv9VZYKQ5ttpVnjU7r+tlK+jz2 X-Received: by 10.66.230.130 with SMTP id sy2mr59093824pac.157.1432077918801; Tue, 19 May 2015 16:25:18 -0700 (PDT) Received: from localhost.localdomain ([12.154.11.242]) by mx.google.com with ESMTPSA id eo3sm14079962pbd.66.2015.05.19.16.25.17 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 19 May 2015 16:25:18 -0700 (PDT) From: Baptiste Covolato To: "David S. Miller" , netdev@vger.kernel.org Cc: Francesco Ruggeri , Eric Mowat , Adrien Schildknecht Subject: [PATCH net-next 1/3] net: Flush all skbs related to an unregistered device Date: Tue, 19 May 2015 16:24:51 -0700 Message-Id: <1432077893-4431-2-git-send-email-baptiste@arista.com> X-Mailer: git-send-email 2.4.1 In-Reply-To: <1432077893-4431-1-git-send-email-baptiste@arista.com> References: <1432077893-4431-1-git-send-email-baptiste@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Update flush_backlog to flush all packets in the backlog queue belonging to a device being unregistered. Accordingly on_each_cpu no longer needs to pass a device to flush_backlog since it handles any device in the NETREG_UNREGISTERED state. Signed-off-by: Baptiste Covolato Signed-off-by: Francesco Ruggeri --- net/core/dev.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 0e7afef..db59d18 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4005,13 +4005,12 @@ EXPORT_SYMBOL(netif_receive_skb_sk); */ static void flush_backlog(void *arg) { - struct net_device *dev = arg; struct softnet_data *sd = this_cpu_ptr(&softnet_data); struct sk_buff *skb, *tmp; rps_lock(sd); skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) { - if (skb->dev == dev) { + if (skb->dev->reg_state == NETREG_UNREGISTERED) { __skb_unlink(skb, &sd->input_pkt_queue); kfree_skb(skb); input_queue_head_incr(sd); @@ -4020,7 +4019,7 @@ static void flush_backlog(void *arg) rps_unlock(sd); skb_queue_walk_safe(&sd->process_queue, skb, tmp) { - if (skb->dev == dev) { + if (skb->dev->reg_state == NETREG_UNREGISTERED) { __skb_unlink(skb, &sd->process_queue); kfree_skb(skb); input_queue_head_incr(sd); @@ -6790,7 +6789,7 @@ void netdev_run_todo(void) dev->reg_state = NETREG_UNREGISTERED; - on_each_cpu(flush_backlog, dev, 1); + on_each_cpu(flush_backlog, NULL, 1); netdev_wait_allrefs(dev);