net: dsa: mv88e6xxx: Fixed port netdev check for VLANs
authorAndrew Lunn <andrew@lunn.ch>
Thu, 9 Nov 2017 21:29:53 +0000 (22:29 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sat, 11 Nov 2017 10:33:11 +0000 (19:33 +0900)
Having the same VLAN on multiple bridges is currently unsupported as
an offload. mv88e6xxx_port_check_hw_vlan() is used to ensure that a
VLAN is not on multiple bridges when adding a VLAN range to a port. It
loops the ports and checks to see if there are ports in a different
bridge with the same VLAN.

While walking all switch ports, the code was checking if the new port
has a netdev slave attached to it. If not, skip checking the port
being walked. This seems like a typ0. If the new port does not have a
slave, how has a VLAN been added to it in the first place, requiring
this check be performed at all? More likely, we should be checking if
the port being walked has a slave. Without the port having a slave, it
cannot have a VLAN on it, so there is no need to check further for
that particular port.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mv88e6xxx/chip.c

index 09a66d4d9492d50857b283bc8b226d51b8abe7fb..420621c759e4418f46395e7a088d264a2eda6f4d 100644 (file)
@@ -1137,7 +1137,7 @@ static int mv88e6xxx_port_check_hw_vlan(struct dsa_switch *ds, int port,
                        if (dsa_is_dsa_port(ds, i) || dsa_is_cpu_port(ds, i))
                                continue;
 
-                       if (!ds->ports[port].slave)
+                       if (!ds->ports[i].slave)
                                continue;
 
                        if (vlan.member[i] ==