提交 045bf89b 编写于 作者: O Oleksandr Mazur 提交者: Zhengchao Shao

net: bridge: multicast: notify switchdev driver whenever MC processing gets disabled

mainline inclusion
from mainline-v5.17-rc5
commit c832962a
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7V613

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c832962ac972082b3a1f89775c9d4274c8cb5670

--------------------------------

Whenever bridge driver hits the max capacity of MDBs, it disables
the MC processing (by setting corresponding bridge option), but never
notifies switchdev about such change (the notifiers are called only upon
explicit setting of this option, through the registered netlink interface).

This could lead to situation when Software MDB processing gets disabled,
but this event never gets offloaded to the underlying Hardware.

Fix this by adding a notify message in such case.

Fixes: 147c1e9b ("switchdev: bridge: Offload multicast disabled")
Signed-off-by: NOleksandr Mazur <oleksandr.mazur@plvision.eu>
Acked-by: NNikolay Aleksandrov <nikolay@nvidia.com>
Link: https://lore.kernel.org/r/20220215165303.31908-1-oleksandr.mazur@plvision.euSigned-off-by: NJakub Kicinski <kuba@kernel.org>

Conflicts:
	net/bridge/br_multicast.c
Signed-off-by: NZhengchao Shao <shaozhengchao@huawei.com>
上级 dc715384
...@@ -48,6 +48,8 @@ static const struct rhashtable_params br_sg_port_rht_params = { ...@@ -48,6 +48,8 @@ static const struct rhashtable_params br_sg_port_rht_params = {
.automatic_shrinking = true, .automatic_shrinking = true,
}; };
static void br_mc_disabled_update(struct net_device *dev, bool value);
static void br_multicast_start_querier(struct net_bridge *br, static void br_multicast_start_querier(struct net_bridge *br,
struct bridge_mcast_own_query *query); struct bridge_mcast_own_query *query);
static void br_multicast_add_router(struct net_bridge *br, static void br_multicast_add_router(struct net_bridge *br,
...@@ -1040,6 +1042,7 @@ struct net_bridge_mdb_entry *br_multicast_new_group(struct net_bridge *br, ...@@ -1040,6 +1042,7 @@ struct net_bridge_mdb_entry *br_multicast_new_group(struct net_bridge *br,
return mp; return mp;
if (atomic_read(&br->mdb_hash_tbl.nelems) >= br->hash_max) { if (atomic_read(&br->mdb_hash_tbl.nelems) >= br->hash_max) {
br_mc_disabled_update(br->dev, false);
br_opt_toggle(br, BROPT_MULTICAST_ENABLED, false); br_opt_toggle(br, BROPT_MULTICAST_ENABLED, false);
return ERR_PTR(-E2BIG); return ERR_PTR(-E2BIG);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册