Commit 6b7ed22a authored by Vinicius Costa Gomes's avatar Vinicius Costa Gomes Committed by Tony Nguyen

igc: Fix returning wrong statistics

'igc_update_stats()' was not updating 'netdev->stats', so the returned
statistics, for example, requested by:

$ ip -s link show dev enp3s0

were not being updated and were always zero.

Fix by returning a set of statistics that are actually being
updated (adapter->stats64).

Fixes: c9a11c23 ("igc: Add netdev")
Signed-off-by: default avatarVinicius Costa Gomes <vinicius.gomes@intel.com>
Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 1773482f
...@@ -3891,21 +3891,23 @@ static int igc_change_mtu(struct net_device *netdev, int new_mtu) ...@@ -3891,21 +3891,23 @@ static int igc_change_mtu(struct net_device *netdev, int new_mtu)
} }
/** /**
* igc_get_stats - Get System Network Statistics * igc_get_stats64 - Get System Network Statistics
* @netdev: network interface device structure * @netdev: network interface device structure
* @stats: rtnl_link_stats64 pointer
* *
* Returns the address of the device statistics structure. * Returns the address of the device statistics structure.
* The statistics are updated here and also from the timer callback. * The statistics are updated here and also from the timer callback.
*/ */
static struct net_device_stats *igc_get_stats(struct net_device *netdev) static void igc_get_stats64(struct net_device *netdev,
struct rtnl_link_stats64 *stats)
{ {
struct igc_adapter *adapter = netdev_priv(netdev); struct igc_adapter *adapter = netdev_priv(netdev);
spin_lock(&adapter->stats64_lock);
if (!test_bit(__IGC_RESETTING, &adapter->state)) if (!test_bit(__IGC_RESETTING, &adapter->state))
igc_update_stats(adapter); igc_update_stats(adapter);
memcpy(stats, &adapter->stats64, sizeof(*stats));
/* only return the current stats */ spin_unlock(&adapter->stats64_lock);
return &netdev->stats;
} }
static netdev_features_t igc_fix_features(struct net_device *netdev, static netdev_features_t igc_fix_features(struct net_device *netdev,
...@@ -4855,7 +4857,7 @@ static const struct net_device_ops igc_netdev_ops = { ...@@ -4855,7 +4857,7 @@ static const struct net_device_ops igc_netdev_ops = {
.ndo_set_rx_mode = igc_set_rx_mode, .ndo_set_rx_mode = igc_set_rx_mode,
.ndo_set_mac_address = igc_set_mac, .ndo_set_mac_address = igc_set_mac,
.ndo_change_mtu = igc_change_mtu, .ndo_change_mtu = igc_change_mtu,
.ndo_get_stats = igc_get_stats, .ndo_get_stats64 = igc_get_stats64,
.ndo_fix_features = igc_fix_features, .ndo_fix_features = igc_fix_features,
.ndo_set_features = igc_set_features, .ndo_set_features = igc_set_features,
.ndo_features_check = igc_features_check, .ndo_features_check = igc_features_check,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment