mlxsw: spectrum: Return NOTIFY_BAD on bridge failure
authorIdo Schimmel <idosch@mellanox.com>
Mon, 4 Jan 2016 09:42:24 +0000 (10:42 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 5 Jan 2016 03:07:58 +0000 (22:07 -0500)
It is possible for us to fail when joining or leaving a bridge, so let
the user know about that by returning NOTIFY_BAD, as already done for
LAG join/leave and 802.1D bridges.

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.c

index 6cc1125030df29910d1b2e2de4098ab0a50b689a..eb719f3343d066aeb9afa017f2b4a164c5cca027 100644 (file)
@@ -2357,16 +2357,20 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *dev,
                } else if (netif_is_bridge_master(upper_dev)) {
                        if (info->linking) {
                                err = mlxsw_sp_port_bridge_join(mlxsw_sp_port);
-                               if (err)
+                               if (err) {
                                        netdev_err(dev, "Failed to join bridge\n");
+                                       return NOTIFY_BAD;
+                               }
                                mlxsw_sp_master_bridge_inc(mlxsw_sp, upper_dev);
                                mlxsw_sp_port->bridged = 1;
                        } else {
                                err = mlxsw_sp_port_bridge_leave(mlxsw_sp_port);
-                               if (err)
-                                       netdev_err(dev, "Failed to leave bridge\n");
                                mlxsw_sp_port->bridged = 0;
                                mlxsw_sp_master_bridge_dec(mlxsw_sp, upper_dev);
+                               if (err) {
+                                       netdev_err(dev, "Failed to leave bridge\n");
+                                       return NOTIFY_BAD;
+                               }
                        }
                } else if (netif_is_lag_master(upper_dev)) {
                        if (info->linking) {