Message ID | 20220915063038.20010-2-shaozhengchao@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | refactor duplicate codes in the tc cls walk function | expand |
On Thu, Sep 15, 2022 at 02:30:30PM +0800, Zhengchao Shao wrote: > The walk implementation of most tc cls 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@huawei.com> > Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com> > --- > include/net/pkt_cls.h | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h > index d9d90e6925e1..d3cbbabf7592 100644 > --- a/include/net/pkt_cls.h > +++ b/include/net/pkt_cls.h > @@ -81,6 +81,19 @@ int tcf_classify(struct sk_buff *skb, > const struct tcf_proto *tp, struct tcf_result *res, > bool compat_mode); > > +static inline bool tc_cls_stats_update(struct tcf_proto *tp, This function name is confusing, I don't think it updates anything, probably we only dump stats when calling ->walk(). Please use a better name here, like tc_cls_stats_dump(). Thanks.
On 2022/9/16 7:23, Cong Wang wrote: > On Thu, Sep 15, 2022 at 02:30:30PM +0800, Zhengchao Shao wrote: >> The walk implementation of most tc cls 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@huawei.com> >> Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com> >> --- >> include/net/pkt_cls.h | 13 +++++++++++++ >> 1 file changed, 13 insertions(+) >> >> diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h >> index d9d90e6925e1..d3cbbabf7592 100644 >> --- a/include/net/pkt_cls.h >> +++ b/include/net/pkt_cls.h >> @@ -81,6 +81,19 @@ int tcf_classify(struct sk_buff *skb, >> const struct tcf_proto *tp, struct tcf_result *res, >> bool compat_mode); >> >> +static inline bool tc_cls_stats_update(struct tcf_proto *tp, > > This function name is confusing, I don't think it updates anything, > probably we only dump stats when calling ->walk(). Please use a better > name here, like tc_cls_stats_dump(). > > Thanks. Hi Wang: Thank you for your review. I will send V4. Zhengchao Shao
diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index d9d90e6925e1..d3cbbabf7592 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -81,6 +81,19 @@ int tcf_classify(struct sk_buff *skb, const struct tcf_proto *tp, struct tcf_result *res, bool compat_mode); +static inline bool tc_cls_stats_update(struct tcf_proto *tp, + struct tcf_walker *arg, + void *filter) +{ + if (arg->count >= arg->skip && arg->fn(tp, filter, arg) < 0) { + arg->stop = 1; + return false; + } + + arg->count++; + return true; +} + #else static inline bool tcf_block_shared(struct tcf_block *block) {