From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 7C26161025 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 8A9FE60E16 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+vC12Kv3SPanRuHArnowX+WkNaI2Qb5ZPbGEQodn4mA=; b=jm86lm83qe9i7AI5bLQD+As8zMzZaAAnU5cCbvYkfw1ApWt3FTPrI0s9/knsz59AP8bUnHKU8zGAelVX5rM+WepBpyDrByjE77gt8+P4RdFSljKsbqicjq6r2Odd/OVcH33yf/FBGu54Z+b4btUfYpNpsPnbfKLhl3pym/PxtGtQ6z2NGNT70kSjV10Ojp/jMPSUGmmSG4StqS2FYV983vrmjC/R86Nk/9vkJuMgVf9a4fpCk5j/jzyF0U0BzezQOi8MKms7H442hmDYTXOUZWRClfYxxk15OJWnTcrvJQAGfH2QrDSU+xshOK+ebNrXWObJ4LhYTBbZ7d8c3Xqxrg== From: Petr Machata Date: Thu, 26 Jan 2023 18:01:12 +0100 Message-ID: <982c17c28b513bd3e6dd670fa2db13ec76bc4460.1674752051.git.petrm@nvidia.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain Subject: [Bridge] [PATCH net-next 04/16] net: bridge: Add br_multicast_del_port_group() List-Id: Linux Ethernet Bridging List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Roopa Prabhu , Nikolay Aleksandrov , netdev@vger.kernel.org Cc: Petr Machata , Ido Schimmel , bridge@lists.linux-foundation.org Since cleaning up the effects of br_multicast_new_port_group() just consists of delisting and freeing the memory, the function br_mdb_add_group_star_g() inlines the corresponding code. In the following patches, number of per-port and per-port-VLAN MDB entries is going to be maintained, and that counter will have to be updated. Because that logic is going to be hidden in the br_multicast module, introduce a new hook intended to again remove a newly-created group. Signed-off-by: Petr Machata Reviewed-by: Ido Schimmel --- net/bridge/br_mdb.c | 3 +-- net/bridge/br_multicast.c | 11 +++++++++++ net/bridge/br_private.h | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c index 139de8ac532c..9f22ebfdc518 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c @@ -1099,8 +1099,7 @@ static int br_mdb_add_group_star_g(const struct br_mdb_config *cfg, return 0; err_del_port_group: - hlist_del_init(&p->mglist); - kfree(p); + br_multicast_del_port_group(p); return err; } diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index f9f4d54226fd..08da724ebfdd 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -1326,6 +1326,17 @@ struct net_bridge_port_group *br_multicast_new_port_group( return p; } +void br_multicast_del_port_group(struct net_bridge_port_group *p) +{ + struct net_bridge_port *port = p->key.port; + + hlist_del_init(&p->mglist); + if (!br_multicast_is_star_g(&p->key.addr)) + rhashtable_remove_fast(&port->br->sg_port_tbl, &p->rhnode, + br_sg_port_rht_params); + kfree(p); +} + void br_multicast_host_join(const struct net_bridge_mcast *brmctx, struct net_bridge_mdb_entry *mp, bool notify) { diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 1805c468ae03..e4069e27b5c6 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -958,6 +958,7 @@ br_multicast_new_port_group(struct net_bridge_port *port, unsigned char flags, const unsigned char *src, u8 filter_mode, u8 rt_protocol, struct netlink_ext_ack *extack); +void br_multicast_del_port_group(struct net_bridge_port_group *p); int br_mdb_hash_init(struct net_bridge *br); void br_mdb_hash_fini(struct net_bridge *br); void br_mdb_notify(struct net_device *dev, struct net_bridge_mdb_entry *mp, -- 2.39.0