aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2008-11-05 19:00:02 -0500
committerDavid S. Miller <davem@davemloft.net>2008-11-05 19:00:02 -0500
commitae33bc40c0d96d02f51a996482ea7e41c5152695 (patch)
treeab250ee1d4eac70ac77a4f40ed303373c41d9213 /net/core
parentd0c082cea6dfb9b674b4f6e1e84025662dbd24e8 (diff)
net: Guaranetee the proper ordering of the loopback device.
I was recently hunting a bug that occurred in network namespace cleanup. In looking at the code it became apparrent that we have and will continue to have cases where if we have anything going on in a network namespace there will be assumptions that the loopback device is present. Things like sending igmp unsubscribe messages when we bring down network devices invokes the routing code which assumes that at least the loopback driver is present. Therefore to avoid magic initcall ordering hackery that is hard to follow and hard to get right insert a call to register the loopback device directly from net_dev_init(). This guarantes that the loopback device is the first device registered and the last network device to go away. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 9475f3e624a8..811507c39805 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4904,6 +4904,18 @@ static int __init net_dev_init(void)
4904 if (register_pernet_subsys(&netdev_net_ops)) 4904 if (register_pernet_subsys(&netdev_net_ops))
4905 goto out; 4905 goto out;
4906 4906
4907 /* The loopback device is special if any other network devices
4908 * is present in a network namespace the loopback device must
4909 * be present. Since we now dynamically allocate and free the
4910 * loopback device ensure this invariant is maintained by
4911 * keeping the loopback device as the first device on the
4912 * list of network devices. Ensuring the loopback devices
4913 * is the first device that appears and the last network device
4914 * that disappears.
4915 */
4916 if (register_pernet_device(&loopback_net_ops))
4917 goto out;
4918
4907 if (register_pernet_device(&default_device_ops)) 4919 if (register_pernet_device(&default_device_ops))
4908 goto out; 4920 goto out;
4909 4921