.disable_policy         = 0,
 };
 
-/* Check if a valid qdisc is available */
-static inline bool addrconf_qdisc_ok(const struct net_device *dev)
+/* Check if link is ready: is it up and is a valid qdisc available */
+static inline bool addrconf_link_ready(const struct net_device *dev)
 {
-       return !qdisc_tx_is_noop(dev);
+       return netif_oper_up(dev) && !qdisc_tx_is_noop(dev);
 }
 
 static void addrconf_del_rs_timer(struct inet6_dev *idev)
 
        ndev->token = in6addr_any;
 
-       if (netif_running(dev) && addrconf_qdisc_ok(dev))
+       if (netif_running(dev) && addrconf_link_ready(dev))
                ndev->if_flags |= IF_READY;
 
        ipv6_mc_init_dev(ndev);
                        /* restore routes for permanent addresses */
                        addrconf_permanent_addr(dev);
 
-                       if (!addrconf_qdisc_ok(dev)) {
+                       if (!addrconf_link_ready(dev)) {
                                /* device is not ready yet. */
                                pr_info("ADDRCONF(NETDEV_UP): %s: link is not ready\n",
                                        dev->name);
                                run_pending = 1;
                        }
                } else if (event == NETDEV_CHANGE) {
-                       if (!addrconf_qdisc_ok(dev)) {
+                       if (!addrconf_link_ready(dev)) {
                                /* device is still not ready. */
                                break;
                        }