Commit 0f524a80 authored by David Ahern's avatar David Ahern Committed by David S. Miller

net: Add warning if any lower device is still in adjacency list

Lower list should be empty just like upper.
Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f1170fd4
...@@ -5219,6 +5219,20 @@ struct net_device *netdev_master_upper_dev_get(struct net_device *dev) ...@@ -5219,6 +5219,20 @@ struct net_device *netdev_master_upper_dev_get(struct net_device *dev)
} }
EXPORT_SYMBOL(netdev_master_upper_dev_get); EXPORT_SYMBOL(netdev_master_upper_dev_get);
/**
* netdev_has_any_lower_dev - Check if device is linked to some device
* @dev: device
*
* Find out if a device is linked to a lower device and return true in case
* it is. The caller must hold the RTNL lock.
*/
static bool netdev_has_any_lower_dev(struct net_device *dev)
{
ASSERT_RTNL();
return !list_empty(&dev->adj_list.lower);
}
void *netdev_adjacent_get_private(struct list_head *adj_list) void *netdev_adjacent_get_private(struct list_head *adj_list)
{ {
struct netdev_adjacent *adj; struct netdev_adjacent *adj;
...@@ -6616,6 +6630,7 @@ static void rollback_registered_many(struct list_head *head) ...@@ -6616,6 +6630,7 @@ static void rollback_registered_many(struct list_head *head)
/* Notifier chain MUST detach us all upper devices. */ /* Notifier chain MUST detach us all upper devices. */
WARN_ON(netdev_has_any_upper_dev(dev)); WARN_ON(netdev_has_any_upper_dev(dev));
WARN_ON(netdev_has_any_lower_dev(dev));
/* Remove entries from kobject tree */ /* Remove entries from kobject tree */
netdev_unregister_kobject(dev); netdev_unregister_kobject(dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment