int register_netdevice_notifier_net(struct net *net, struct notifier_block *nb);
 int unregister_netdevice_notifier_net(struct net *net,
                                      struct notifier_block *nb);
+void move_netdevice_notifier_net(struct net *src_net, struct net *dst_net,
+                                struct notifier_block *nb);
 int register_netdevice_notifier_dev_net(struct net_device *dev,
                                        struct notifier_block *nb,
                                        struct netdev_net_notifier *nn);
 
 }
 EXPORT_SYMBOL(unregister_netdevice_notifier_net);
 
+static void __move_netdevice_notifier_net(struct net *src_net,
+                                         struct net *dst_net,
+                                         struct notifier_block *nb)
+{
+       __unregister_netdevice_notifier_net(src_net, nb);
+       __register_netdevice_notifier_net(dst_net, nb, true);
+}
+
+void move_netdevice_notifier_net(struct net *src_net, struct net *dst_net,
+                                struct notifier_block *nb)
+{
+       rtnl_lock();
+       __move_netdevice_notifier_net(src_net, dst_net, nb);
+       rtnl_unlock();
+}
+
 int register_netdevice_notifier_dev_net(struct net_device *dev,
                                        struct notifier_block *nb,
                                        struct netdev_net_notifier *nn)
 {
        struct netdev_net_notifier *nn;
 
-       list_for_each_entry(nn, &dev->net_notifier_list, list) {
-               __unregister_netdevice_notifier_net(dev_net(dev), nn->nb);
-               __register_netdevice_notifier_net(net, nn->nb, true);
-       }
+       list_for_each_entry(nn, &dev->net_notifier_list, list)
+               __move_netdevice_notifier_net(dev_net(dev), net, nn->nb);
 }
 
 /**