From 0b172cde0b8562b3a1bf87be2fecbe8a9d068a45 Mon Sep 17 00:00:00 2001 From: "Tommy S. Christensen" Date: Tue, 3 May 2005 16:18:52 -0700 Subject: [PATCH] --- yaml --- r: 839 b: refs/heads/master c: cacaddf57ed4d5ca994e9a7e2bd5558061f5d89d h: refs/heads/master i: 837: b6519d6c78a486a31bef49824500e69bf104d3b8 835: 12682c423ded29b98b1ba053b783e9c20805406d 831: bdff3b875ab577cb62ff6645d88c900695aff537 v: v3 --- [refs] | 2 +- trunk/net/core/link_watch.c | 7 +++++++ trunk/net/sched/sch_generic.c | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 6321021231b1..a831af03c70e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0f4821e7b93fe72e89b8ff393bd8e705bd178aa5 +refs/heads/master: cacaddf57ed4d5ca994e9a7e2bd5558061f5d89d diff --git a/trunk/net/core/link_watch.c b/trunk/net/core/link_watch.c index 4859b7446c6f..d43d1201275c 100644 --- a/trunk/net/core/link_watch.c +++ b/trunk/net/core/link_watch.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -74,6 +75,12 @@ void linkwatch_run_queue(void) clear_bit(__LINK_STATE_LINKWATCH_PENDING, &dev->state); if (dev->flags & IFF_UP) { + if (netif_carrier_ok(dev)) { + WARN_ON(dev->qdisc_sleeping == &noop_qdisc); + dev_activate(dev); + } else + dev_deactivate(dev); + netdev_state_change(dev); } diff --git a/trunk/net/sched/sch_generic.c b/trunk/net/sched/sch_generic.c index 8c01e023f02e..9a2f8e41a26e 100644 --- a/trunk/net/sched/sch_generic.c +++ b/trunk/net/sched/sch_generic.c @@ -539,6 +539,10 @@ void dev_activate(struct net_device *dev) write_unlock_bh(&qdisc_tree_lock); } + if (!netif_carrier_ok(dev)) + /* Delay activation until next carrier-on event */ + return; + spin_lock_bh(&dev->queue_lock); rcu_assign_pointer(dev->qdisc, dev->qdisc_sleeping); if (dev->qdisc != &noqueue_qdisc) {