On Fri, 2017-08-11 at 12:04 +0200, Andreas Born wrote: > bond_miimon_commit() handles the UP transition for each slave of a bond > in the case of MII. It is triggered 10 times per second for the default > MII Polling interval of 100ms. For device drivers that do not implement > __ethtool_get_link_ksettings() the call to bond_update_speed_duplex() > fails persistently while the MII status could remain UP. That is, in this and > other cases where the speed/duplex update keeps failing over a longer > period of time while the MII state is UP, a warning is printed every MII > polling interval. > > To address these excessive warnings pr_warn_ratelimited() should be used > instead. pr_warn_once() would not be sufficient since the call to > bond_update_speed_duplex() could recover to meanwhile succeed and fail > again later. [] > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c [] > @@ -2144,9 +2144,9 @@ static void bond_miimon_commit(struct bonding *bond) > if (bond_update_speed_duplex(slave) && > bond_needs_speed_duplex(bond)) { > slave->link = BOND_LINK_DOWN; > - netdev_warn(bond->dev, > - "failed to get link speed/duplex > for %s\n", > - slave->dev->name); > + pr_warn_ratelimited("%s: failed to get link > speed/duplex for %s\n", > + bond->dev->name, > + slave->dev->name);
This is more commonly done using if (net_ratelimit()) netdev_warn(etc...)