Hello Dave, I've been chasing a rather strange problem and I saw you were the person that authored most of the code involved so I'm addresing you, but will be happy to receive assistance from any one feeling knowledgeable enough on the issue.
Basically I have an infiniband card on which I want to run ipv6 to this effect I load modules ib_qib (the infiniband card is qlogic QLE7342) and then I load module ib_ipoib and I get : IPv6: ADDRCONF(NETDEV_UP): ib0: link is not ready even though for example ibping and all that works. This happens because the check if (!addrconf_qdisc_ok(dev)) in addrconf_notify fails, since the dev's txq ->qdisc points to noop_qdisc. Now, here is what happens : 1. When the ib_ipoib module is loaded register_netdevice->dev_init_scheduler is called which sets the device's qdisc to noop_qdisc 2. Then via a netlink message the device is being activate, which calls into dev_activate->attach_one_default_qdisc which attaches the newly created default qdisc to the dev->sleeping_qdisc member 3. The addrconf_notify is invoked which fails the check since the netdev_queue's qdisk member was never updated (just the sleeping_qdisc) to anything different than the initial state (which is noop_qdisc). I have stack traces which do show this sequence of events, so my questions now are: 1. What's the difference between netdev_queue->qdisc and netdev_queue->qdisc_sleeping. Git blaming indicates those member haves existed even before the git history was started. 2. Shouldn't the netdev_queue->qdisc also be updated during attach_one_default_qdisc? Regards, Nikolay