mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
net_sched: update hierarchical backlog too
When the bottom qdisc decides to, for example, drop some packet, it calls qdisc_tree_decrease_qlen() to update the queue length for all its ancestors, we need to update the backlog too to keep the stats on root qdisc accurate. Cc: Jamal Hadi Salim <jhs@mojatatu.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
86a7996cc8
commit
2ccccf5fb4
21 changed files with 91 additions and 49 deletions
|
@ -744,14 +744,15 @@ static u32 qdisc_alloc_handle(struct net_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
|
||||
void qdisc_tree_reduce_backlog(struct Qdisc *sch, unsigned int n,
|
||||
unsigned int len)
|
||||
{
|
||||
const struct Qdisc_class_ops *cops;
|
||||
unsigned long cl;
|
||||
u32 parentid;
|
||||
int drops;
|
||||
|
||||
if (n == 0)
|
||||
if (n == 0 && len == 0)
|
||||
return;
|
||||
drops = max_t(int, n, 0);
|
||||
rcu_read_lock();
|
||||
|
@ -774,11 +775,12 @@ void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
|
|||
cops->put(sch, cl);
|
||||
}
|
||||
sch->q.qlen -= n;
|
||||
sch->qstats.backlog -= len;
|
||||
__qdisc_qstats_drop(sch, drops);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
}
|
||||
EXPORT_SYMBOL(qdisc_tree_decrease_qlen);
|
||||
EXPORT_SYMBOL(qdisc_tree_reduce_backlog);
|
||||
|
||||
static void notify_and_destroy(struct net *net, struct sk_buff *skb,
|
||||
struct nlmsghdr *n, u32 clid,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue