[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <cb0375e10904010840n1543a890w9039465d0f80ffcc@mail.gmail.com>
Date: Wed, 1 Apr 2009 11:40:06 -0400
From: Andrew Lutomirski <amluto@...il.com>
To: netdev@...r.kernel.org, LKML <linux-kernel@...r.kernel.org>
Subject: [PATCH 1/1] Tell linkwatch about new interfaces
From: Andrew Lutomirski <amluto@...il.com>
When a network driver registers a new interface, linkwatch will not notice,
and hence not set the rfc2863 operstate, until netif_carrier_on gets called.
If the new interface has no carrier when it is connected, then a status of
"unknown" is reported to userspace, which confuses various tools
(NetworkManager, for example).
This fires a linkwatch event for all new interfaces, so that operstate
gets set reasonably quickly.
Signed-off-by: Andrew Lutomirski <amluto@...il.com>
---
This looks like the root cause of the bug I reported here:
http://lkml.org/lkml/2009/3/24/499
Without knowing all the locking and ordering constraints imposed on network
drivers, this seemed like the safest way to fix the bug. Alternative
approaches would be to call rfc2863_policy directly or to initialize the
relevent fields to sane values (for the carrier off state) in alloc_netdev.
This applies to 2.6.29. I can rediff it for any other tree, but I didn't see
any changes that would conflict.
diff --git a/net/core/dev.c b/net/core/dev.c
index e438f54..45911fd 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4445,6 +4445,9 @@ int register_netdevice(struct net_device *dev)
dev->reg_state = NETREG_UNREGISTERED;
}
+ /* Update link state. */
+ linkwatch_fire_event(dev);
+
out:
return ret;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists