bond_ethdev_stats_get() accumulates statistics from each bonding member. If rte_eth_stats_get() fails for a member, the local member_stats structure may be left unchanged.
Skip members whose statistics cannot be read, instead of accumulating stale or uninitialized counters. Signed-off-by: Weijun Pan <[email protected]> --- v4: - Add this preparatory fix as a separate patch. drivers/net/bonding/rte_eth_bond_pmd.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 6a4f997b5a..6f10dbb0c7 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -2677,9 +2677,12 @@ bond_ethdev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats, struct bond_dev_private *internals = dev->data->dev_private; struct rte_eth_stats member_stats; int i; + int ret; for (i = 0; i < internals->member_count; i++) { - rte_eth_stats_get(internals->members[i].port_id, &member_stats); + ret = rte_eth_stats_get(internals->members[i].port_id, &member_stats); + if (ret != 0) + continue; stats->ipackets += member_stats.ipackets; stats->opackets += member_stats.opackets; -- 2.34.1

