|
@@ -4468,10 +4468,16 @@ static int rocker_port_master_changed(struct net_device *dev)
|
|
|
struct net_device *master = netdev_master_upper_dev_get(dev);
|
|
|
int err = 0;
|
|
|
|
|
|
+ /* There are currently three cases handled here:
|
|
|
+ * 1. Joining a bridge
|
|
|
+ * 2. Leaving a previously joined bridge
|
|
|
+ * 3. Other, e.g. being added to or removed from a bond or openvswitch,
|
|
|
+ * in which case nothing is done
|
|
|
+ */
|
|
|
if (master && master->rtnl_link_ops &&
|
|
|
!strcmp(master->rtnl_link_ops->kind, "bridge"))
|
|
|
err = rocker_port_bridge_join(rocker_port, master);
|
|
|
- else
|
|
|
+ else if (rocker_port_is_bridged(rocker_port))
|
|
|
err = rocker_port_bridge_leave(rocker_port);
|
|
|
|
|
|
return err;
|