Revert "net: Guaranetee the proper ordering of the loopback device."
authorDavid S. Miller <davem@davemloft.net>
Sat, 8 Nov 2008 06:52:14 +0000 (22:52 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 8 Nov 2008 06:52:14 +0000 (22:52 -0800)
This reverts commit ae33bc40c0d96d02f51a996482ea7e41c5152695.

drivers/net/loopback.c
include/linux/netdevice.h
net/core/dev.c

index c4516b580ba544f8d97876f01394bbe1e9b27ed0..91d08585a6d8c62fc019fa2c652c132237b592eb 100644 (file)
@@ -204,8 +204,17 @@ static __net_exit void loopback_net_exit(struct net *net)
        unregister_netdev(dev);
 }
 
-/* Registered in net/core/dev.c */
-struct pernet_operations __net_initdata loopback_net_ops = {
+static struct pernet_operations __net_initdata loopback_net_ops = {
        .init = loopback_net_init,
        .exit = loopback_net_exit,
 };
+
+static int __init loopback_init(void)
+{
+       return register_pernet_device(&loopback_net_ops);
+}
+
+/* Loopback is special. It should be initialized before any other network
+ * device and network subsystem.
+ */
+fs_initcall(loopback_init);
index 12d7f4469dc9c6eeb897037bd7880777d86b218f..f1b0dbe584648a839eb6ae13228d529d10e752f1 100644 (file)
@@ -1766,7 +1766,6 @@ static inline int skb_bond_should_drop(struct sk_buff *skb)
        return 0;
 }
 
-extern struct pernet_operations __net_initdata loopback_net_ops;
 #endif /* __KERNEL__ */
 
 #endif /* _LINUX_DEV_H */
index e0dc67a789b7e53331e639c335c85c2d18d5e0b3..2306d56fbb5e464116674c5af5730d5696496986 100644 (file)
@@ -4909,18 +4909,6 @@ static int __init net_dev_init(void)
        if (register_pernet_subsys(&netdev_net_ops))
                goto out;
 
-       /* The loopback device is special if any other network devices
-        * is present in a network namespace the loopback device must
-        * be present. Since we now dynamically allocate and free the
-        * loopback device ensure this invariant is maintained by
-        * keeping the loopback device as the first device on the
-        * list of network devices.  Ensuring the loopback devices
-        * is the first device that appears and the last network device
-        * that disappears.
-        */
-       if (register_pernet_device(&loopback_net_ops))
-               goto out;
-
        if (register_pernet_device(&default_device_ops))
                goto out;