Zhengchao Shao <shaozhengchao@xxxxxxxxxx> writes: > The walk implementation of most qdisc class modules is basically the > same. That is, the values of count and skip are checked first. If > count is greater than or equal to skip, the registered fn function is > executed. Otherwise, increase the value of count. So we can reconstruct > them. > > Signed-off-by: Zhengchao Shao <shaozhengchao@xxxxxxxxxx> > --- > include/net/pkt_sched.h | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h > index 29f65632ebc5..243e8b0cb7ea 100644 > --- a/include/net/pkt_sched.h > +++ b/include/net/pkt_sched.h > @@ -222,4 +222,17 @@ static inline struct tc_skb_cb *tc_skb_cb(const struct sk_buff *skb) > return cb; > } > > +static inline bool tc_qdisc_stats_dump(struct Qdisc *sch, > + struct qdisc_walker *arg, > + unsigned long cl) > +{ > + if (arg->count >= arg->skip && arg->fn(sch, cl, arg) < 0) { Seems a bit confusing that tc_qdisc_stats_dump() reverses the order of the 'cl' and 'arg' parameters relative to the callback? -Toke