> -----Original Message-----
> From: Nikolay Aleksandrov [mailto:niko...@cumulusnetworks.com]
> Sent: Friday, September 09, 2016 4:39 PM
> To: Nikolay Aleksandrov <niko...@cumulusnetworks.com>
> Cc: Jiri Pirko <j...@resnulli.us>; Linux Kernel Network Developers 
> <netdev@vger.kernel.org>; David S. Miller
> <da...@davemloft.net>; Nogah Frankel <nog...@mellanox.com>; Ido Schimmel 
> <ido...@mellanox.com>; Elad Raz
> <el...@mellanox.com>; Yotam Gigi <yot...@mellanox.com>; Or Gerlitz 
> <ogerl...@mellanox.com>; ro...@cumulusnetworks.com;
> linvi...@tuxdriver.com; tg...@suug.ch; go...@cumulusnetworks.com; 
> sfel...@gmail.com; s...@queasysnail.net; Eran Ben Elisha
> <era...@mellanox.com>; a...@plumgrid.com; eduma...@google.com; 
> han...@stressinduktion.org; f.faine...@gmail.com;
> d...@cumulusnetworks.com
> Subject: Re: [patch net-next v8 2/3] net: core: Add offload stats to 
> if_stats_msg
> 
> 
> > On Sep 9, 2016, at 4:36 PM, Nikolay Aleksandrov 
> > <niko...@cumulusnetworks.com> wrote:
> >
> >>
> >> On Sep 8, 2016, at 9:19 AM, Jiri Pirko <j...@resnulli.us> wrote:
> >>
> >> From: Nogah Frankel <nog...@mellanox.com>
> >>
> >> Add a nested attribute of offload stats to if_stats_msg
> >> named IFLA_STATS_LINK_OFFLOAD_XSTATS.
> >> Under it, add SW stats, meaning stats only per packets that went via
> >> slowpath to the cpu, named IFLA_OFFLOAD_XSTATS_CPU_HIT.
> >>
> >> Signed-off-by: Nogah Frankel <nog...@mellanox.com>
> >> Signed-off-by: Jiri Pirko <j...@mellanox.com>
> >> ---
> >> include/uapi/linux/if_link.h |  9 ++++
> >> net/core/rtnetlink.c         | 97 
> >> ++++++++++++++++++++++++++++++++++++++++++--
> >> 2 files changed, 102 insertions(+), 4 deletions(-)
> >>
> > [snip]
> >> @@ -3655,6 +3725,22 @@ static int rtnl_fill_statsinfo(struct sk_buff *skb, 
> >> struct net_device *dev,
> >>            }
> >>    }
> >>
> >> +  if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS,
> >> +                       *idxattr)) {
> >> +          attr = nla_nest_start(skb, IFLA_STATS_LINK_OFFLOAD_XSTATS);
> >> +          if (!attr)
> >> +                  goto nla_put_failure;
> >> +
> >> +          err = rtnl_get_offload_stats(skb, dev);
> >> +          if (err == -ENODATA)
> >> +                  nla_nest_cancel(skb, attr);
> >> +          else
> >> +                  nla_nest_end(skb, attr);
> >> +
> >> +          if ((err) && (err != -ENODATA))
> >> +                  goto nla_put_failure;
> >> +  }
> >> +
> >
> > Hmm, actually on a second read I think there’s a potential problem here. 
> > Since you don’t set *idxattr and if the space
> > isn’t enough the dump will get restarted and this will lead to an infinite 
> > loop.
> 
> Err, poor choice of words. I meant the loop will be for userspace since the 
> dump will err out at the same spot all the time so it
> won’t be able to ever finish. :-)
> 
> > I.e. if the previous attributes filled the skb and there’s not enough room 
> > for this one, it will return an error
> > but *idxattr will be == 0 from the previous attribute thus the whole dump 
> > will be restarted (this is in case someone
> > requests this attribute with some of the others of course).
> >
> > Cheers,
> > Nik
> >
> >

I'll fix it. Thanks.

> >>    nlmsg_end(skb, nlh);
> >>
> >>    return 0;
> >> @@ -3712,6 +3798,9 @@ static size_t if_nlmsg_stats_size(const struct 
> >> net_device *dev,
> >>            }
> >>    }
> >>
> >> +  if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS, 0))
> >> +          size += rtnl_get_offload_stats_size(dev);
> >> +
> >>    return size;
> >> }
> >>
> >> --
> >> 2.5.5

Reply via email to