mlxsw: spectrum: Use correct PVID value when removing VLANs
authorIdo Schimmel <idosch@mellanox.com>
Thu, 19 Nov 2015 11:27:38 +0000 (12:27 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Nov 2015 16:06:02 +0000 (11:06 -0500)
When removing a range of VLANs in which PVID is a member we should use
the correct PVID value instead of some VLAN in the range.

Also, change two print statements to use 'dev' instead of
'mlxsw_sp_port->dev', as it's already used in other print statements in
the function.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c

index 617fb22..be63398 100644 (file)
@@ -532,7 +532,7 @@ static int __mlxsw_sp_port_vlans_del(struct mlxsw_sp_port *mlxsw_sp_port,
                                     u16 vid_begin, u16 vid_end, bool init)
 {
        struct net_device *dev = mlxsw_sp_port->dev;
-       u16 vid, vid_e;
+       u16 vid, vid_e, pvid;
        int err;
 
        /* In case this is invoked with BRIDGE_FLAGS_SELF and port is
@@ -549,23 +549,21 @@ static int __mlxsw_sp_port_vlans_del(struct mlxsw_sp_port *mlxsw_sp_port,
                err = mlxsw_sp_port_vlan_set(mlxsw_sp_port, vid, vid_e, false,
                                             false);
                if (err) {
-                       netdev_err(mlxsw_sp_port->dev, "Unable to del VIDs %d-%d\n",
-                                  vid, vid_e);
+                       netdev_err(dev, "Unable to del VIDs %d-%d\n", vid,
+                                  vid_e);
                        return err;
                }
        }
 
-       if ((mlxsw_sp_port->pvid >= vid_begin) &&
-           (mlxsw_sp_port->pvid <= vid_end)) {
+       pvid = mlxsw_sp_port->pvid;
+       if (pvid >= vid_begin && pvid <= vid_end && pvid != 1) {
                /* Default VLAN is always 1 */
-               mlxsw_sp_port->pvid = 1;
-               err = mlxsw_sp_port_pvid_set(mlxsw_sp_port,
-                                            mlxsw_sp_port->pvid);
+               err = mlxsw_sp_port_pvid_set(mlxsw_sp_port, 1);
                if (err) {
-                       netdev_err(mlxsw_sp_port->dev, "Unable to del PVID %d\n",
-                                  vid);
+                       netdev_err(dev, "Unable to del PVID %d\n", pvid);
                        return err;
                }
+               mlxsw_sp_port->pvid = 1;
        }
 
        if (init)