diff options
author | David S. Miller <davem@davemloft.net> | 2008-03-24 06:54:03 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-03-24 06:54:03 +0100 |
commit | 06802a819a0a2d31c952c0624cea6cd00e4e50da (patch) | |
tree | 8ccd7c668c7fbd8f08cb89426006040217caf3f1 /net/sched | |
parent | [CASSINI]: Use shorter list_splice_init() macro for brevity. (diff) | |
parent | sch_htb: fix "too many events" situation (diff) | |
download | linux-06802a819a0a2d31c952c0624cea6cd00e4e50da.tar.xz linux-06802a819a0a2d31c952c0624cea6cd00e4e50da.zip |
Merge branch 'master' of ../net-2.6/
Conflicts:
net/ipv6/ndisc.c
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/sch_htb.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 795c761ad99f..66148cc4759e 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c @@ -711,9 +711,11 @@ static void htb_charge_class(struct htb_sched *q, struct htb_class *cl, */ static psched_time_t htb_do_events(struct htb_sched *q, int level) { - int i; - - for (i = 0; i < 500; i++) { + /* don't run for longer than 2 jiffies; 2 is used instead of + 1 to simplify things when jiffy is going to be incremented + too soon */ + unsigned long stop_at = jiffies + 2; + while (time_before(jiffies, stop_at)) { struct htb_class *cl; long diff; struct rb_node *p = rb_first(&q->wait_pq[level]); @@ -731,9 +733,8 @@ static psched_time_t htb_do_events(struct htb_sched *q, int level) if (cl->cmode != HTB_CAN_SEND) htb_add_to_wait_tree(q, cl, diff); } - if (net_ratelimit()) - printk(KERN_WARNING "htb: too many events !\n"); - return q->now + PSCHED_TICKS_PER_SEC / 10; + /* too much load - let's continue on next jiffie */ + return q->now + PSCHED_TICKS_PER_SEC / HZ; } /* Returns class->node+prio from id-tree where classe's id is >= id. NULL |