]> git.hungrycats.org Git - linux/commitdiff
[NET]: Add synchronize_net.
authorStephen Hemminger <shemminger@osdl.org>
Wed, 2 Apr 2003 20:46:09 +0000 (12:46 -0800)
committerDavid S. Miller <davem@nuts.ninka.net>
Wed, 2 Apr 2003 20:46:09 +0000 (12:46 -0800)
Currently it takes then releases BR_NETPROTO_LOCK as a writer.
Later it will be converted to RCUs synchronize_kernel().

All call sites have been verified to be sleep friendly.

include/linux/netdevice.h
net/core/dev.c
net/netsyms.c

index 6e291c99688bda5248060d2820cb4f434767fed1..080084cc3afcfe895c0f882ee878a438466cb06b 100644 (file)
@@ -486,6 +486,7 @@ extern int          dev_close(struct net_device *dev);
 extern int             dev_queue_xmit(struct sk_buff *skb);
 extern int             register_netdevice(struct net_device *dev);
 extern int             unregister_netdevice(struct net_device *dev);
+extern void            synchronize_net(void);
 extern int             register_netdevice_notifier(struct notifier_block *nb);
 extern int             unregister_netdevice_notifier(struct notifier_block *nb);
 extern int             call_netdevice_notifiers(unsigned long val, void *v);
index 2d5ae21a98dec88a35ce907c72f920bb3e712c77..17e32722281bd3c86369bd7e072639f35ae30b1e 100644 (file)
@@ -2646,6 +2646,13 @@ int netdev_finish_unregister(struct net_device *dev)
        return 0;
 }
 
+/* Synchronize with packet receive processing. */
+void synchronize_net(void) 
+{
+       br_write_lock_bh(BR_NETPROTO_LOCK);
+       br_write_unlock_bh(BR_NETPROTO_LOCK);
+}
+
 /**
  *     unregister_netdevice - remove device from the kernel
  *     @dev: device
@@ -2688,10 +2695,7 @@ int unregister_netdevice(struct net_device *dev)
                return -ENODEV;
        }
 
-       /* Synchronize to net_rx_action. */
-       br_write_lock_bh(BR_NETPROTO_LOCK);
-       br_write_unlock_bh(BR_NETPROTO_LOCK);
-
+       synchronize_net();
 
 #ifdef CONFIG_NET_FASTROUTE
        dev_clear_fastroute(dev);
index 56db7f1ca61557acbf8e1a0edc468052469ca1cd..cfed5eef7c29acc0a25361ce2dcd9265ca8da28b 100644 (file)
@@ -544,6 +544,7 @@ EXPORT_SYMBOL(call_netdevice_notifiers);
 EXPORT_SYMBOL(loopback_dev);
 EXPORT_SYMBOL(register_netdevice);
 EXPORT_SYMBOL(unregister_netdevice);
+EXPORT_SYMBOL(synchronize_net);
 EXPORT_SYMBOL(netdev_state_change);
 EXPORT_SYMBOL(dev_new_index);
 EXPORT_SYMBOL(dev_get_by_flags);