diff --git a/[refs] b/[refs] index 02d9add9b6cf..ab2b6c8b4b3d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bbb84619c378414118fd4f1778125cd246c71e53 +refs/heads/master: e93737b0f0159a61772894943199fd3b6f315641 diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c index c36a17aafcf3..6fe7d739e59b 100644 --- a/trunk/net/core/dev.c +++ b/trunk/net/core/dev.c @@ -4771,21 +4771,23 @@ static void net_set_todo(struct net_device *dev) static void rollback_registered_many(struct list_head *head) { - struct net_device *dev; + struct net_device *dev, *tmp; BUG_ON(dev_boot_phase); ASSERT_RTNL(); - list_for_each_entry(dev, head, unreg_list) { + list_for_each_entry_safe(dev, tmp, head, unreg_list) { /* Some devices call without registering - * for initialization unwind. + * for initialization unwind. Remove those + * devices and proceed with the remaining. */ if (dev->reg_state == NETREG_UNINITIALIZED) { pr_debug("unregister_netdevice: device %s/%p never " "was registered\n", dev->name, dev); WARN_ON(1); - return; + list_del(&dev->unreg_list); + continue; } BUG_ON(dev->reg_state != NETREG_REGISTERED);