net: vrf: move to generic dstat helpers
authorJeremy Kerr <jk@codeconstruct.com.au>
Fri, 7 Jun 2024 10:25:26 +0000 (18:25 +0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 12 Jun 2024 02:24:56 +0000 (19:24 -0700)
The vrf driver has its own dstats-to-rtnl_link_stats64 collection, but
we now have a generic implementation for dstats collection, so switch to
this.

In doing so, we fix a minor issue where the (non-percpu)
dev->stats->tx_errors value was never collected into rtnl_link_stats64,
as the generic dev_get_dstats64() consumes the starting values from
dev->stats.

Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20240607-dstats-v3-3-cc781fe116f7@codeconstruct.com.au
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/vrf.c

index 5018831b2a7975aac48dd38e30d144d272063899..9af316cdd8b3bc1ad41fe1c1a4855ac1059fe261 100644 (file)
@@ -137,33 +137,6 @@ static void vrf_tx_error(struct net_device *vrf_dev, struct sk_buff *skb)
        kfree_skb(skb);
 }
 
-static void vrf_get_stats64(struct net_device *dev,
-                           struct rtnl_link_stats64 *stats)
-{
-       int i;
-
-       for_each_possible_cpu(i) {
-               const struct pcpu_dstats *dstats;
-               u64 tbytes, tpkts, tdrops, rbytes, rpkts;
-               unsigned int start;
-
-               dstats = per_cpu_ptr(dev->dstats, i);
-               do {
-                       start = u64_stats_fetch_begin(&dstats->syncp);
-                       tbytes = u64_stats_read(&dstats->tx_bytes);
-                       tpkts = u64_stats_read(&dstats->tx_packets);
-                       tdrops = u64_stats_read(&dstats->tx_drops);
-                       rbytes = u64_stats_read(&dstats->rx_bytes);
-                       rpkts = u64_stats_read(&dstats->rx_packets);
-               } while (u64_stats_fetch_retry(&dstats->syncp, start));
-               stats->tx_bytes += tbytes;
-               stats->tx_packets += tpkts;
-               stats->tx_dropped += tdrops;
-               stats->rx_bytes += rbytes;
-               stats->rx_packets += rpkts;
-       }
-}
-
 static struct vrf_map *netns_vrf_map(struct net *net)
 {
        struct netns_vrf *nn_vrf = net_generic(net, vrf_net_id);
@@ -1201,7 +1174,6 @@ static const struct net_device_ops vrf_netdev_ops = {
        .ndo_uninit             = vrf_dev_uninit,
        .ndo_start_xmit         = vrf_xmit,
        .ndo_set_mac_address    = eth_mac_addr,
-       .ndo_get_stats64        = vrf_get_stats64,
        .ndo_add_slave          = vrf_add_slave,
        .ndo_del_slave          = vrf_del_slave,
 };