lkml.org 
[lkml]   [2020]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 155/255] igc: Fix returning wrong statistics
    Date
    From: Vinicius Costa Gomes <vinicius.gomes@intel.com>

    [ Upstream commit 6b7ed22ae4c96a415001f0c3116ebee15bb8491a ]

    '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: c9a11c23ceb6 ("igc: Add netdev")
    Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Tested-by: Aaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/intel/igc/igc_main.c | 14 ++++++++------
    1 file changed, 8 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
    index 9593aa4eea369..1358a39c34ad3 100644
    --- a/drivers/net/ethernet/intel/igc/igc_main.c
    +++ b/drivers/net/ethernet/intel/igc/igc_main.c
    @@ -3890,21 +3890,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
    + * @stats: rtnl_link_stats64 pointer
    *
    * Returns the address of the device statistics structure.
    * 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);

    + spin_lock(&adapter->stats64_lock);
    if (!test_bit(__IGC_RESETTING, &adapter->state))
    igc_update_stats(adapter);
    -
    - /* only return the current stats */
    - return &netdev->stats;
    + memcpy(stats, &adapter->stats64, sizeof(*stats));
    + spin_unlock(&adapter->stats64_lock);
    }

    static netdev_features_t igc_fix_features(struct net_device *netdev,
    @@ -4833,7 +4835,7 @@ static const struct net_device_ops igc_netdev_ops = {
    .ndo_set_rx_mode = igc_set_rx_mode,
    .ndo_set_mac_address = igc_set_mac,
    .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_set_features = igc_set_features,
    .ndo_features_check = igc_features_check,
    --
    2.27.0


    \
     
     \ /
      Last update: 2020-11-17 14:40    [W:4.112 / U:0.984 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site