Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 71532
b: refs/heads/master
c: ce0e32e
h: refs/heads/master
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Oct 19, 2007
1 parent 60df6a5 commit 750708f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a25de534f89c515c82d3553c42d3bb02c2d1a7da
refs/heads/master: ce0e32e65f70337e0732c97499b643205fa8ea31
26 changes: 23 additions & 3 deletions trunk/net/sched/sch_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,7 @@ void dev_deactivate(struct net_device *dev)
{
struct Qdisc *qdisc;
struct sk_buff *skb;
int running;

spin_lock_bh(&dev->queue_lock);
qdisc = dev->qdisc;
Expand All @@ -571,12 +572,31 @@ void dev_deactivate(struct net_device *dev)

dev_watchdog_down(dev);

/* Wait for outstanding dev_queue_xmit calls. */
/* Wait for outstanding qdisc-less dev_queue_xmit calls. */
synchronize_rcu();

/* Wait for outstanding qdisc_run calls. */
while (test_bit(__LINK_STATE_QDISC_RUNNING, &dev->state))
yield();
do {
while (test_bit(__LINK_STATE_QDISC_RUNNING, &dev->state))
yield();

/*
* Double-check inside queue lock to ensure that all effects
* of the queue run are visible when we return.
*/
spin_lock_bh(&dev->queue_lock);
running = test_bit(__LINK_STATE_QDISC_RUNNING, &dev->state);
spin_unlock_bh(&dev->queue_lock);

/*
* The running flag should never be set at this point because
* we've already set dev->qdisc to noop_qdisc *inside* the same
* pair of spin locks. That is, if any qdisc_run starts after
* our initial test it should see the noop_qdisc and then
* clear the RUNNING bit before dropping the queue lock. So
* if it is set here then we've found a bug.
*/
} while (WARN_ON_ONCE(running));
}

void dev_init_scheduler(struct net_device *dev)
Expand Down

0 comments on commit 750708f

Please sign in to comment.