projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net_sched: update hierarchical backlog too
[deliverable/linux.git]
/
net
/
sched
/
sch_htb.c
diff --git
a/net/sched/sch_htb.c
b/net/sched/sch_htb.c
index 15ccd7f8fb2ae35d940119e203259bb67e6e807d..846a7f98cef96886410e885a0c1c1b03f54f3f13 100644
(file)
--- a/
net/sched/sch_htb.c
+++ b/
net/sched/sch_htb.c
@@
-1163,14
+1163,7
@@
static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
cl->common.classid)) == NULL)
return -ENOBUFS;
cl->common.classid)) == NULL)
return -ENOBUFS;
- sch_tree_lock(sch);
- *old = cl->un.leaf.q;
- cl->un.leaf.q = new;
- if (*old != NULL) {
- qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
- qdisc_reset(*old);
- }
- sch_tree_unlock(sch);
+ *old = qdisc_replace(sch, new, &cl->un.leaf.q);
return 0;
}
return 0;
}
@@
-1272,7
+1265,6
@@
static int htb_delete(struct Qdisc *sch, unsigned long arg)
{
struct htb_sched *q = qdisc_priv(sch);
struct htb_class *cl = (struct htb_class *)arg;
{
struct htb_sched *q = qdisc_priv(sch);
struct htb_class *cl = (struct htb_class *)arg;
- unsigned int qlen;
struct Qdisc *new_q = NULL;
int last_child = 0;
struct Qdisc *new_q = NULL;
int last_child = 0;
@@
-1292,9
+1284,11
@@
static int htb_delete(struct Qdisc *sch, unsigned long arg)
sch_tree_lock(sch);
if (!cl->level) {
sch_tree_lock(sch);
if (!cl->level) {
- qlen = cl->un.leaf.q->q.qlen;
+ unsigned int qlen = cl->un.leaf.q->q.qlen;
+ unsigned int backlog = cl->un.leaf.q->qstats.backlog;
+
qdisc_reset(cl->un.leaf.q);
qdisc_reset(cl->un.leaf.q);
- qdisc_tree_
decrease_qlen(cl->un.leaf.q, qlen
);
+ qdisc_tree_
reduce_backlog(cl->un.leaf.q, qlen, backlog
);
}
/* delete from hash and active; remainder in destroy_class */
}
/* delete from hash and active; remainder in destroy_class */
@@
-1428,10
+1422,11
@@
static int htb_change_class(struct Qdisc *sch, u32 classid,
sch_tree_lock(sch);
if (parent && !parent->level) {
unsigned int qlen = parent->un.leaf.q->q.qlen;
sch_tree_lock(sch);
if (parent && !parent->level) {
unsigned int qlen = parent->un.leaf.q->q.qlen;
+ unsigned int backlog = parent->un.leaf.q->qstats.backlog;
/* turn parent into inner node */
qdisc_reset(parent->un.leaf.q);
/* turn parent into inner node */
qdisc_reset(parent->un.leaf.q);
- qdisc_tree_
decrease_qlen(parent->un.leaf.q, qlen
);
+ qdisc_tree_
reduce_backlog(parent->un.leaf.q, qlen, backlog
);
qdisc_destroy(parent->un.leaf.q);
if (parent->prio_activity)
htb_deactivate(q, parent);
qdisc_destroy(parent->un.leaf.q);
if (parent->prio_activity)
htb_deactivate(q, parent);
This page took
0.027504 seconds
and
5
git commands to generate.