From patchwork Sat Feb 2 14:29:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rundong Ge X-Patchwork-Id: 1035446 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="InH1dzIu"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43sGZj3d9wz9s1l for ; Sun, 3 Feb 2019 01:29:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727383AbfBBO3q (ORCPT ); Sat, 2 Feb 2019 09:29:46 -0500 Received: from mail-io1-f67.google.com ([209.85.166.67]:41288 "EHLO mail-io1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725843AbfBBO3q (ORCPT ); Sat, 2 Feb 2019 09:29:46 -0500 Received: by mail-io1-f67.google.com with SMTP id s22so8275084ioc.8 for ; Sat, 02 Feb 2019 06:29:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=lQdtww47S3iiZG7to6CXgz2z3c8N1qmX9llAql9jW3k=; b=InH1dzIubX1HCU1NJ0Zm7JzcDC0oDrAZdwER0yp8i2qEmdTNXZkxk9giP64U/YRKy1 SAOXmELWqtjh22wu891dXvQH5mN2hrqEZNCKiuvq1sA4HRPtwnmjsRRindZEYzDQUsV3 SiDFRVlS54W7LXbNkS9aSU5QTQ8fKk0GGtIzolBRX6pfxRVqwK87UKIbjARYbVbnyLmX a8Mg2sKvt0LI5aWIJau49L0Xh2GSLTfhLtJr09s3/kDX2r3FfsKlVopXa3uU/n/hqvoL GOZDg21+IZNfZo70VFzuMoh6Lyc1jgyrcYBr5C/hYP0R+daqC4dtAG+fevo0R1YWSsXL G4LA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=lQdtww47S3iiZG7to6CXgz2z3c8N1qmX9llAql9jW3k=; b=PjYQxC0f5NXQHFnDYpEUW7BV1Ezr1TI5cGZOTMEncacXYb3VCV7O76n89m1DhC5Abk uPYmEz9Guz2PeG4fhe0MssP0PRz4QuuX34Pl84ATtYcXgf5MU7P3DK5QcvZHeKyLJ34E 4Nskq4VaQh5aALvBlroKWrh37PzhHMhdiVMcsifa2bpIga3pjQ6+aUTkhERXgs/C+6ER D/qsGRncxiwNX6I/OGsYv+rokfTBGfoOoQuhm3kVUFF4sA78gyF8Gv1GCWWRFkIdkGCv 4ziFefbDRurLYe0XZIGBwLciFLmUnL9JggM4Vedput42FfwVUX160RhXhR2v94wD6qdu YgDw== X-Gm-Message-State: AHQUAuarwsH8eUISUtAIO27W2iD7cPjIylAGzcSwDurBtgIoWVf3e91R s97ZPbgY6MILm3nzbBGPcw== X-Google-Smtp-Source: AHgI3IaQ47xxz221vuS61mhZvIRSh33GTfMB4RAjftF1/eTQadSZ6kvEb+AESnw4HOjH8C9CvOsi2w== X-Received: by 2002:a6b:a0d:: with SMTP id z13mr11066226ioi.57.1549117785042; Sat, 02 Feb 2019 06:29:45 -0800 (PST) Received: from ip-172-31-24-36.us-east-2.compute.internal (ec2-18-220-14-221.us-east-2.compute.amazonaws.com. [18.220.14.221]) by smtp.gmail.com with ESMTPSA id b192sm2920826itb.12.2019.02.02.06.29.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 02 Feb 2019 06:29:44 -0800 (PST) From: Rundong Ge To: andrew@lunn.ch Cc: vivien.didelot@gmail.com, f.fainelli@gmail.com, davem@davemloft.net, netdev@vger.kernel.org, rdong.ge@gmail.com Subject: [PATCH] net: dsa: slave: Don't propagate flag changes on down slave interfaces Date: Sat, 2 Feb 2019 14:29:35 +0000 Message-Id: <20190202142935.3090-1-rdong.ge@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The unbalance of master's promiscuity or allmulti will happen after ifdown and ifup a slave interface which is in a bridge. When we ifdown a slave interface , both the 'dsa_slave_close' and 'dsa_slave_change_rx_flags' will clear the master's flags. The flags of master will be decrease twice. In the other hand, if we ifup the slave interface again, since the slave's flags were cleared the 'dsa_slave_open' won't set the master's flag, only 'dsa_slave_change_rx_flags' that triggered by 'br_add_if' will set the master's flags. The flags of master is increase once. Only propagating flag changes when a slave interface is up makes sure this does not happen. The 'vlan_dev_change_rx_flags' had the same problem and was fixed, and changes here follows that fix. Signed-off-by: Rundong Ge --- net/dsa/slave.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index a3fcc1d..b5e4482 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -140,11 +140,14 @@ static int dsa_slave_close(struct net_device *dev) static void dsa_slave_change_rx_flags(struct net_device *dev, int change) { struct net_device *master = dsa_slave_to_master(dev); - - if (change & IFF_ALLMULTI) - dev_set_allmulti(master, dev->flags & IFF_ALLMULTI ? 1 : -1); - if (change & IFF_PROMISC) - dev_set_promiscuity(master, dev->flags & IFF_PROMISC ? 1 : -1); + if (dev->flags & IFF_UP) { + if (change & IFF_ALLMULTI) + dev_set_allmulti(master, + dev->flags & IFF_ALLMULTI ? 1 : -1); + if (change & IFF_PROMISC) + dev_set_promiscuity(master, + dev->flags & IFF_PROMISC ? 1 : -1); + } } static void dsa_slave_set_rx_mode(struct net_device *dev)