net: Check CHANGEUPPER notifier return value
authorIdo Schimmel <idosch@mellanox.com>
Thu, 3 Dec 2015 11:12:03 +0000 (12:12 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 3 Dec 2015 16:49:23 +0000 (11:49 -0500)
switchdev drivers reflect the newly requested topology to hardware when
CHANGEUPPER is received, after software links were already formed.
However, the operation can fail and user will not be notified, as the
return value of the notifier is not checked.

Add this check and rollback software links if necessary.

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>
net/core/dev.c

index 5df6cbce727c140684b84129c26ffc0606260cbb..939cd1b1da1569fd785ae1667d5a53ad0cdb69f2 100644 (file)
@@ -5490,8 +5490,12 @@ static int __netdev_upper_dev_link(struct net_device *dev,
                        goto rollback_lower_mesh;
        }
 
-       call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
-                                     &changeupper_info.info);
+       ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
+                                           &changeupper_info.info);
+       ret = notifier_to_errno(ret);
+       if (ret)
+               goto rollback_lower_mesh;
+
        return 0;
 
 rollback_lower_mesh: