[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20070305175924.2f46446c.mitch@linux.vnet.ibm.com>
Date: Mon, 5 Mar 2007 17:59:24 +0900
From: Mitsuru Chinen <mitch@...ux.vnet.ibm.com>
To: netdev@...r.kernel.org
Cc: usagi-core@...ux-ipv6.org
Subject: [PATCH] Ensure IF_READY is unset when link is not ready
Hi there,
On linux-2.6.21-rc2 or later, IPv6 link-local address is not assigned to
some kind of interfaces during system start-up. (I found this issue
occures with e100, e1000 and tg3.)
This issue comes from the change that inet6_dev is allocated when
NETDEV_REGISTER event occurs. The allocation code is at ipv6_add_dev()
in net/ipv6/addrinfo.c. At the code, IF_READY bit would be set when the
link is ready. The link readyness is verified by netif_caeeir_ok().
However as the drivers don't call netif_carrier_off() prior to calling
register_netdev(), netif_caeeir_ok() returns true in spite of the
actual link state.
Here's a work around patch. This make IF_READY unset when NETDEV_UP
event occurs and the link is not ready. This patch may not be an
fundamental fix. But I don't have any other idea now.
Signed-off-by: Mitsuru Chinen <mitch@...ux.vnet.ibm.com>
---
net/ipv6/addrconf.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index e16f1bb..1593cd1 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -2196,6 +2196,7 @@ static int addrconf_notify(struct notifi
"ADDRCONF(NETDEV_UP): %s: "
"link is not ready\n",
dev->name);
+ idev->if_flags &= ~IF_READY;
break;
}
--
1.4.3.4
-
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