nfp: flower: don't try to nack device unregister events
authorJakub Kicinski <jakub.kicinski@netronome.com>
Wed, 7 Nov 2018 01:07:31 +0000 (17:07 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Nov 2018 19:45:22 +0000 (11:45 -0800)
Returning an error from a notifier means we want to veto the change.
We shouldn't veto NETDEV_UNREGISTER just because we couldn't find
the tracking info for given master.

I can't seem to find a way to trigger this unless we have some
other bug, so it's probably not fix-worthy.

While at it move the checking if the netdev really is of interest
into the handling functions, like we do for other events.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: John Hurley <john.hurley@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/flower/lag_conf.c

index 81dcf5b..dc06074 100644 (file)
@@ -472,17 +472,25 @@ nfp_fl_lag_schedule_group_remove(struct nfp_fl_lag *lag,
        schedule_delayed_work(&lag->work, NFP_FL_LAG_DELAY);
 }
 
-static int
+static void
 nfp_fl_lag_schedule_group_delete(struct nfp_fl_lag *lag,
                                 struct net_device *master)
 {
        struct nfp_fl_lag_group *group;
+       struct nfp_flower_priv *priv;
+
+       priv = container_of(lag, struct nfp_flower_priv, nfp_lag);
+
+       if (!netif_is_bond_master(master))
+               return;
 
        mutex_lock(&lag->lock);
        group = nfp_fl_lag_find_group_for_master_with_lag(lag, master);
        if (!group) {
                mutex_unlock(&lag->lock);
-               return -ENOENT;
+               nfp_warn(priv->app->cpp, "untracked bond got unregistered %s\n",
+                        netdev_name(master));
+               return;
        }
 
        group->to_remove = true;
@@ -490,7 +498,6 @@ nfp_fl_lag_schedule_group_delete(struct nfp_fl_lag *lag,
        mutex_unlock(&lag->lock);
 
        schedule_delayed_work(&lag->work, NFP_FL_LAG_DELAY);
-       return 0;
 }
 
 static int
@@ -643,12 +650,8 @@ nfp_fl_lag_netdev_event(struct notifier_block *nb, unsigned long event,
                        return NOTIFY_BAD;
                return NOTIFY_OK;
        case NETDEV_UNREGISTER:
-               if (netif_is_bond_master(netdev)) {
-                       err = nfp_fl_lag_schedule_group_delete(lag, netdev);
-                       if (err)
-                               return NOTIFY_BAD;
-                       return NOTIFY_OK;
-               }
+               nfp_fl_lag_schedule_group_delete(lag, netdev);
+               return NOTIFY_OK;
        }
 
        return NOTIFY_DONE;