rtnetlink: handle rtnl_link netlink notifications manually
In order to support specifying device flags during device creation, we must be able to roll back device registration in case setting the flags fails without sending any notifications related to the device to userspace. This patch changes rollback_registered_many() and register_netdevice() to manually send netlink notifications for devices not handled by rtnl_link and allows to defer notifications for devices handled by rtnl_link until setup is complete. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
10de05afe0
commit
a2835763e1
@ -4865,6 +4865,10 @@ static void rollback_registered_many(struct list_head *head)
|
||||
*/
|
||||
call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
|
||||
|
||||
if (!dev->rtnl_link_ops ||
|
||||
dev->rtnl_link_state == RTNL_LINK_INITIALIZED)
|
||||
rtmsg_ifinfo(RTM_DELLINK, dev, ~0U);
|
||||
|
||||
/*
|
||||
* Flush the unicast and multicast chains
|
||||
*/
|
||||
@ -5091,7 +5095,9 @@ int register_netdevice(struct net_device *dev)
|
||||
* Prevent userspace races by waiting until the network
|
||||
* device is fully setup before sending notifications.
|
||||
*/
|
||||
rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U);
|
||||
if (!dev->rtnl_link_ops ||
|
||||
dev->rtnl_link_state == RTNL_LINK_INITIALIZED)
|
||||
rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
|
Reference in New Issue
Block a user