|
@@ -142,6 +142,7 @@ struct htb_class {
|
|
|
struct rb_node node[TC_HTB_NUMPRIO]; /* node for self or feed tree */
|
|
|
|
|
|
unsigned int drops ____cacheline_aligned_in_smp;
|
|
|
+ unsigned int overlimits;
|
|
|
};
|
|
|
|
|
|
struct htb_level {
|
|
@@ -533,6 +534,9 @@ htb_change_class_mode(struct htb_sched *q, struct htb_class *cl, s64 *diff)
|
|
|
if (new_mode == cl->cmode)
|
|
|
return;
|
|
|
|
|
|
+ if (new_mode == HTB_CANT_SEND)
|
|
|
+ cl->overlimits++;
|
|
|
+
|
|
|
if (cl->prio_activity) { /* not necessary: speed optimization */
|
|
|
if (cl->cmode != HTB_CANT_SEND)
|
|
|
htb_deactivate_prios(q, cl);
|
|
@@ -1143,6 +1147,7 @@ htb_dump_class_stats(struct Qdisc *sch, unsigned long arg, struct gnet_dump *d)
|
|
|
struct htb_class *cl = (struct htb_class *)arg;
|
|
|
struct gnet_stats_queue qs = {
|
|
|
.drops = cl->drops,
|
|
|
+ .overlimits = cl->overlimits,
|
|
|
};
|
|
|
__u32 qlen = 0;
|
|
|
|