lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 16 Dec 2010 12:03:04 +0100 From: Eric Dumazet <eric.dumazet@...il.com> To: Jarek Poplawski <jarkao2@...il.com> Cc: David Miller <davem@...emloft.net>, netdev <netdev@...r.kernel.org>, Patrick McHardy <kaber@...sh.net> Subject: Re: [PATCH net-next-2.6] net_sched: sch_sfq: add backlog info in sfq_dump_class_stats() Le jeudi 16 décembre 2010 à 08:16 +0000, Jarek Poplawski a écrit : > On 2010-12-15 19:18, Eric Dumazet wrote: > > We currently return for each active SFQ slot the number of packets in > > queue. We can also give number of bytes accounted for these packets. > > > > tc -s class show dev ifb0 > > > > Before patch : > > > > class sfq 11:3d9 parent 11: > > (dropped 0, overlimits 0 requeues 0) > > backlog 0b 3p requeues 0 > > allot 1266 > > > > After patch : > > > > class sfq 11:3e4 parent 11: > > (dropped 0, overlimits 0 requeues 0) > > backlog 4380b 3p requeues 0 > > allot 1212 > > > > > > Signed-off-by: Eric Dumazet <eric.dumazet@...il.com> > > --- > > net/sched/sch_sfq.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c > > index 3cf478d..cb331de 100644 > > --- a/net/sched/sch_sfq.c > > +++ b/net/sched/sch_sfq.c > > @@ -548,8 +548,13 @@ static int sfq_dump_class_stats(struct Qdisc *sch, unsigned long cl, > > { > > struct sfq_sched_data *q = qdisc_priv(sch); > > sfq_index idx = q->ht[cl-1]; > > - struct gnet_stats_queue qs = { .qlen = q->qs[idx].qlen }; > > + struct sk_buff_head *list = &q->qs[idx]; > > + struct gnet_stats_queue qs = { .qlen = list->qlen }; > > struct tc_sfq_xstats xstats = { .allot = q->allot[idx] }; > > + struct sk_buff *skb; > > + > > + skb_queue_walk(list, skb) > > + qs.backlog += qdisc_pkt_len(skb); > > I don't think you can walk this list without the qdisc lock. So after checks, I confirm qdisc lock is held at this point, patch is valid. tc_fill_tclass() calls gnet_stats_start_copy_compat() (and locks qdisc_root_sleeping_lock()), before calling cl_ops->dump_stats(q, cl, &d) Thanks ! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists