If priv_ethtool_get_stats_n fails to retrieve statistics, lock is not released. Next call of function, which uses the same spinlock, will stuck trying to obtain it.
This patch addresses the issue. Fixes: 4b2e6df26168 ("net/mlx5: fix extended statistics counters identification") Cc: shah...@mellanox.com Signed-off-by: Pavlo Shcherbyna <pavlo.shcherb...@harmonicinc.com> --- drivers/net/mlx5/mlx5_stats.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c index 703f48c..8764829 100644 --- a/drivers/net/mlx5/mlx5_stats.c +++ b/drivers/net/mlx5/mlx5_stats.c @@ -442,8 +442,10 @@ struct mlx5_counter_ctrl { priv_lock(priv); stats_n = priv_ethtool_get_stats_n(priv); - if (stats_n < 0) + if (stats_n < 0) { + priv_unlock(priv); return -1; + } if (xstats_ctrl->stats_n != stats_n) priv_xstats_init(priv); ret = priv_xstats_get(priv, stats); @@ -467,8 +469,10 @@ struct mlx5_counter_ctrl { priv_lock(priv); stats_n = priv_ethtool_get_stats_n(priv); - if (stats_n < 0) + if (stats_n < 0) { + priv_unlock(priv); return; + } if (xstats_ctrl->stats_n != stats_n) priv_xstats_init(priv); priv_xstats_reset(priv); -- 1.7.10.4