Skip to content

Commit

Permalink
[NET_SCHED]: Rationalise return value of qdisc_restart
Browse files Browse the repository at this point in the history
The current return value scheme and associated comment was invented
back in the 20th century when we still had that tbusy flag.  Things
have changed quite a bit since then (even Tony Blair is moving on
now, not to mention the new French president).

All we need to indicate now is whether the caller should continue
processing the queue.  Therefore it's sufficient if we return 0 if
we want to stop and non-zero otherwise.

This is based on a patch by Krishna Kumar.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Herbert Xu authored and David S. Miller committed May 11, 2007
1 parent 5830725 commit d90df3a
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions net/sched/sch_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,9 @@ void qdisc_unlock_tree(struct net_device *dev)


/* Kick device.
Note, that this procedure can be called by a watchdog timer, so that
we do not check dev->tbusy flag here.
Returns: 0 - queue is empty.
>0 - queue is not empty, but throttled.
<0 - queue is not empty. Device is throttled, if dev->tbusy != 0.
Returns: 0 - queue is empty or throttled.
>0 - queue is not empty.
NOTE: Called under dev->queue_lock with locally disabled BH.
*/
Expand Down Expand Up @@ -115,7 +112,7 @@ static inline int qdisc_restart(struct net_device *dev)
kfree_skb(skb);
if (net_ratelimit())
printk(KERN_DEBUG "Dead loop on netdevice %s, fix it urgently!\n", dev->name);
return -1;
goto out;
}
__get_cpu_var(netdev_rx_stat).cpu_collision++;
goto requeue;
Expand All @@ -135,7 +132,7 @@ static inline int qdisc_restart(struct net_device *dev)
netif_tx_unlock(dev);
}
spin_lock(&dev->queue_lock);
return -1;
goto out;
}
if (ret == NETDEV_TX_LOCKED && nolock) {
spin_lock(&dev->queue_lock);
Expand Down Expand Up @@ -169,8 +166,10 @@ static inline int qdisc_restart(struct net_device *dev)
else
q->ops->requeue(skb, q);
netif_schedule(dev);
return 1;
return 0;
}

out:
BUG_ON((int) q->q.qlen < 0);
return q->q.qlen;
}
Expand All @@ -180,8 +179,10 @@ void __qdisc_run(struct net_device *dev)
if (unlikely(dev->qdisc == &noop_qdisc))
goto out;

while (qdisc_restart(dev) < 0 && !netif_queue_stopped(dev))
/* NOTHING */;
do {
if (!qdisc_restart(dev))
break;
} while (!netif_queue_stopped(dev));

out:
clear_bit(__LINK_STATE_QDISC_RUNNING, &dev->state);
Expand Down

0 comments on commit d90df3a

Please sign in to comment.