Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d90df3ad07a20cd93921e05ff2b12ca7030b4fd7
Commit:     d90df3ad07a20cd93921e05ff2b12ca7030b4fd7
Parent:     5830725f8a36908111ecccf2899d06d6dcf54d45
Author:     Herbert Xu <[EMAIL PROTECTED]>
AuthorDate: Thu May 10 04:55:14 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Thu May 10 23:47:40 2007 -0700

    [NET_SCHED]: Rationalise return value of qdisc_restart
    
    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 <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/sched/sch_generic.c |   21 +++++++++++----------
 1 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index a8240c5..07200bf 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -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.
 */
@@ -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;
@@ -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);
@@ -169,8 +166,10 @@ requeue:
                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;
 }
@@ -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);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to