From 75bfe33f6f2ac6a7c415f633e1ab198b7ad8a675 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger <shemminger@osdl.org> Date: Tue, 13 Jan 2004 00:33:15 -0800 Subject: [PATCH] [NET]: When registering a new notifier, rebroadcast REGISTER and UP events. --- net/core/dev.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/net/core/dev.c b/net/core/dev.c index 43e782b549f0..6e60daa67fd9 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -996,11 +996,29 @@ int dev_close(struct net_device *dev) * The notifier passed is linked into the kernel structures and must * not be reused until it has been unregistered. A negative errno code * is returned on a failure. + * + * When registered all registration and up events are replayed + * to the new notifier to allow device to have a race free + * view of the network device list. */ int register_netdevice_notifier(struct notifier_block *nb) { - return notifier_chain_register(&netdev_chain, nb); + struct net_device *dev; + int err; + + rtnl_lock(); + err = notifier_chain_register(&netdev_chain, nb); + if (!err) { + for (dev = dev_base; dev; dev = dev->next) { + nb->notifier_call(nb, NETDEV_REGISTER, dev); + + if (dev->flags & IFF_UP) + nb->notifier_call(nb, NETDEV_UP, dev); + } + } + rtnl_unlock(); + return err; } /** -- 2.30.9