|
@@ -1,60 +0,0 @@
|
|
-From 07c6f9805f12f1bb538ef165a092b300350384aa Mon Sep 17 00:00:00 2001
|
|
|
|
-From: Russell King <[email protected]>
|
|
|
|
-Date: Wed, 26 Feb 2020 17:14:21 +0000
|
|
|
|
-Subject: [PATCH] net: switchdev: do not propagate bridge updates across
|
|
|
|
- bridges
|
|
|
|
-
|
|
|
|
-When configuring a tree of independent bridges, propagating changes
|
|
|
|
-from the upper bridge across a bridge master to the lower bridge
|
|
|
|
-ports brings surprises.
|
|
|
|
-
|
|
|
|
-For example, a lower bridge may have vlan filtering enabled. It
|
|
|
|
-may have a vlan interface attached to the bridge master, which may
|
|
|
|
-then be incorporated into another bridge. As soon as the lower
|
|
|
|
-bridge vlan interface is attached to the upper bridge, the lower
|
|
|
|
-bridge has vlan filtering disabled.
|
|
|
|
-
|
|
|
|
-This occurs because switchdev recursively applies its changes to
|
|
|
|
-all lower devices no matter what.
|
|
|
|
-
|
|
|
|
-Reviewed-by: Ido Schimmel <[email protected]>
|
|
|
|
-Tested-by: Ido Schimmel <[email protected]>
|
|
|
|
-Signed-off-by: Russell King <[email protected]>
|
|
|
|
-Reviewed-by: Florian Fainelli <[email protected]>
|
|
|
|
-Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
----
|
|
|
|
- net/switchdev/switchdev.c | 9 +++++++++
|
|
|
|
- 1 file changed, 9 insertions(+)
|
|
|
|
-
|
|
|
|
---- a/net/switchdev/switchdev.c
|
|
|
|
-+++ b/net/switchdev/switchdev.c
|
|
|
|
-@@ -476,6 +476,9 @@ static int __switchdev_handle_port_obj_a
|
|
|
|
- * necessary to go through this helper.
|
|
|
|
- */
|
|
|
|
- netdev_for_each_lower_dev(dev, lower_dev, iter) {
|
|
|
|
-+ if (netif_is_bridge_master(lower_dev))
|
|
|
|
-+ continue;
|
|
|
|
-+
|
|
|
|
- err = __switchdev_handle_port_obj_add(lower_dev, port_obj_info,
|
|
|
|
- check_cb, add_cb);
|
|
|
|
- if (err && err != -EOPNOTSUPP)
|
|
|
|
-@@ -528,6 +531,9 @@ static int __switchdev_handle_port_obj_d
|
|
|
|
- * necessary to go through this helper.
|
|
|
|
- */
|
|
|
|
- netdev_for_each_lower_dev(dev, lower_dev, iter) {
|
|
|
|
-+ if (netif_is_bridge_master(lower_dev))
|
|
|
|
-+ continue;
|
|
|
|
-+
|
|
|
|
- err = __switchdev_handle_port_obj_del(lower_dev, port_obj_info,
|
|
|
|
- check_cb, del_cb);
|
|
|
|
- if (err && err != -EOPNOTSUPP)
|
|
|
|
-@@ -579,6 +585,9 @@ static int __switchdev_handle_port_attr_
|
|
|
|
- * necessary to go through this helper.
|
|
|
|
- */
|
|
|
|
- netdev_for_each_lower_dev(dev, lower_dev, iter) {
|
|
|
|
-+ if (netif_is_bridge_master(lower_dev))
|
|
|
|
-+ continue;
|
|
|
|
-+
|
|
|
|
- err = __switchdev_handle_port_attr_set(lower_dev, port_attr_info,
|
|
|
|
- check_cb, set_cb);
|
|
|
|
- if (err && err != -EOPNOTSUPP)
|
|
|