From patchwork Wed Jan 30 00:55:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1033090 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="H0ukQyMy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43q4jD0ytvz9sBn for ; Wed, 30 Jan 2019 11:57:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727584AbfA3A5s (ORCPT ); Tue, 29 Jan 2019 19:57:48 -0500 Received: from mail-pl1-f196.google.com ([209.85.214.196]:44684 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727542AbfA3A5s (ORCPT ); Tue, 29 Jan 2019 19:57:48 -0500 Received: by mail-pl1-f196.google.com with SMTP id e11so10196377plt.11 for ; Tue, 29 Jan 2019 16:57:48 -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:in-reply-to:references; bh=wc9CO6wt6GxEFh2balP2MsV9Pn/6V+hUg7OeAQiS3IE=; b=H0ukQyMykyF94ynnUzSgL+0GAYwO/oIFG2bfJ5aDtFfAxNevZ2tH/WL5GGQpR4zdUR eqGK0/JADLV5YZG18VclbOBE9MIBYuyVyCuh6LS0q5Hhe5OUogk5irijV3sRgJyU0ZAj F7hwyXXPgIrBVxSSukQ1YWSOdH2U1boosYrSy7cXfjEpwPdHr+Al+3/4pU9sCxRY1Hoz yBdJvj9NvnnRuN32wj/YL6flQMIFlf6b9dfB8b9IHR4riUiXshEw9J5dDpLIPCqhoUZu 8oz+fPcdwBpdWWoG6UjmuC5e6KWYes1b6RGsmoFALhJhd2kAZNDmWMYa0IvOfYoMFfYS W0RA== 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:in-reply-to :references; bh=wc9CO6wt6GxEFh2balP2MsV9Pn/6V+hUg7OeAQiS3IE=; b=iOom+/9XE3a2+hOOFxdYubmH3+T2///qholPKj8IukIH9ansDOkqxMJVTFxV8xtUSm 2Ct7A7SBEqvr/5bE9+R4OxqnequUJ7ctpIlrdN6wYJ6A/jlb6ONsJHJhEsE4QM+yJlV3 muqYNZlv288oALQMLtzICP0tS2hTdqn0TBQxU20KEztrgL9dxdaeQUncl15ooib7v9Ax FsT0knY2jwGRXjl5B/7rfaFAXO2zoMLP2l5Fst/c51QJd9n5kOEY9ZUKCz5o45qTDG58 vT49zvvr9z9kdZ7KW2DZi8P47o6K/N4XCuONJmrgtqI/Tq9oXLkVklIPckKtNtcXt8TO GJmw== X-Gm-Message-State: AJcUukfvq3DwwR2Siw72T3MAz0FEG/g9bmJqPIdMi9zj3Uzv4IyjxSpt FsIP6h43ZToSV/6ECmxPFGmqn9HC X-Google-Smtp-Source: ALg8bN5U0iU9//+P6w8jwBI0U+IgOgHt3p/fKSoLMdbuPC4ik9xkba6qvv1SN6sqHKNsviU/cDRoCQ== X-Received: by 2002:a17:902:8687:: with SMTP id g7mr27944062plo.96.1548809867010; Tue, 29 Jan 2019 16:57:47 -0800 (PST) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id v191sm67837137pgb.77.2019.01.29.16.57.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 Jan 2019 16:57:44 -0800 (PST) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, idosch@mellanox.com, jiri@mellanox.com, ilias.apalodimas@linaro.org, ivan.khoronzhuk@linaro.org, roopa@cumulusnetworks.com, nikolay@cumulusnetworks.com Subject: [PATCH net-next v2 01/12] net: bridge: multicast: Propagate br_mc_disabled_update() return Date: Tue, 29 Jan 2019 16:55:37 -0800 Message-Id: <20190130005548.2212-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190130005548.2212-1-f.fainelli@gmail.com> References: <20190130005548.2212-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Some Ethernet switches might not be able to support disabling multicast flooding globally when e.g: several bridges span the same physical device, propagate the return value of br_mc_disabled_update() such that this propagates correctly to user-space. Signed-off-by: Florian Fainelli --- net/bridge/br_multicast.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 3aeff0895669..aff5e003d34f 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -813,20 +813,22 @@ static void br_ip6_multicast_port_query_expired(struct timer_list *t) } #endif -static void br_mc_disabled_update(struct net_device *dev, bool value) +static int br_mc_disabled_update(struct net_device *dev, bool value) { struct switchdev_attr attr = { .orig_dev = dev, .id = SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED, - .flags = SWITCHDEV_F_DEFER, + .flags = SWITCHDEV_F_DEFER | SWITCHDEV_F_SKIP_EOPNOTSUPP, .u.mc_disabled = !value, }; - switchdev_port_attr_set(dev, &attr); + return switchdev_port_attr_set(dev, &attr); } int br_multicast_add_port(struct net_bridge_port *port) { + int ret; + port->multicast_router = MDB_RTR_TYPE_TEMP_QUERY; timer_setup(&port->multicast_router_timer, @@ -837,8 +839,11 @@ int br_multicast_add_port(struct net_bridge_port *port) timer_setup(&port->ip6_own_query.timer, br_ip6_multicast_port_query_expired, 0); #endif - br_mc_disabled_update(port->dev, - br_opt_get(port->br, BROPT_MULTICAST_ENABLED)); + ret = br_mc_disabled_update(port->dev, + br_opt_get(port->br, + BROPT_MULTICAST_ENABLED)); + if (ret) + return ret; port->mcast_stats = netdev_alloc_pcpu_stats(struct bridge_mcast_stats); if (!port->mcast_stats) @@ -1937,12 +1942,16 @@ static void br_multicast_start_querier(struct net_bridge *br, int br_multicast_toggle(struct net_bridge *br, unsigned long val) { struct net_bridge_port *port; + int err = 0; spin_lock_bh(&br->multicast_lock); if (!!br_opt_get(br, BROPT_MULTICAST_ENABLED) == !!val) goto unlock; - br_mc_disabled_update(br->dev, val); + err = br_mc_disabled_update(br->dev, val); + if (err) + goto unlock; + br_opt_toggle(br, BROPT_MULTICAST_ENABLED, !!val); if (!br_opt_get(br, BROPT_MULTICAST_ENABLED)) goto unlock; @@ -1957,7 +1966,7 @@ int br_multicast_toggle(struct net_bridge *br, unsigned long val) unlock: spin_unlock_bh(&br->multicast_lock); - return 0; + return err; } bool br_multicast_enabled(const struct net_device *dev)