Message ID | ea15b7f9-4c02-3d4e-1c01-4e2a90d2a23c@oracle.com |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
Series | Setting large MTU size on slave interfaces may stall the whole system | expand |
On Tue, Dec 12, 2017 at 5:21 AM, Qing Huang <qing.huang@oracle.com> wrote: > Hi, > > We found an issue with the bonding driver when testing Mellanox devices. > The following test commands will stall the whole system sometimes, with > serial console > flooded with log messages from the bond_miimon_inspect() function. Setting > mtu size > to be 1500 seems okay but very rarely it may hit the same problem too. > > ip address flush dev ens3f0 > ip link set dev ens3f0 down > ip address flush dev ens3f1 > ip link set dev ens3f1 down > [root@ca-hcl629 etc]# modprobe bonding mode=0 miimon=250 use_carrier=1 > updelay=500 downdelay=500 > [root@ca-hcl629 etc]# ifconfig bond0 up > [root@ca-hcl629 etc]# ifenslave bond0 ens3f0 ens3f1 > [root@ca-hcl629 etc]# ip link set bond0 mtu 4500 up > Seiral console output: > > ** 4 printk messages dropped ** [ 3717.743761] bond0: link status down for > interface ens3f0, disabling it in 500 ms [..] > It seems that when setting a large mtu size on an RoCE interface, the RTNL > mutex may be held too long by the slave > interface, causing bond_mii_monitor() to be called repeatedly at an interval > of 1 tick (1K HZ kernel configuration) and kernel to become unresponsive. Did you try/managed to reproduce that also with other NIC drivers? Or.
Hi Or, On 12/13/2017 06:28 AM, Or Gerlitz wrote: > On Tue, Dec 12, 2017 at 5:21 AM, Qing Huang <qing.huang@oracle.com> wrote: >> Hi, >> >> We found an issue with the bonding driver when testing Mellanox devices. >> The following test commands will stall the whole system sometimes, with >> serial console >> flooded with log messages from the bond_miimon_inspect() function. Setting >> mtu size >> to be 1500 seems okay but very rarely it may hit the same problem too. >> >> ip address flush dev ens3f0 >> ip link set dev ens3f0 down >> ip address flush dev ens3f1 >> ip link set dev ens3f1 down >> [root@ca-hcl629 etc]# modprobe bonding mode=0 miimon=250 use_carrier=1 >> updelay=500 downdelay=500 >> [root@ca-hcl629 etc]# ifconfig bond0 up >> [root@ca-hcl629 etc]# ifenslave bond0 ens3f0 ens3f1 >> [root@ca-hcl629 etc]# ip link set bond0 mtu 4500 up >> Seiral console output: >> >> ** 4 printk messages dropped ** [ 3717.743761] bond0: link status down for >> interface ens3f0, disabling it in 500 ms > [..] > > >> It seems that when setting a large mtu size on an RoCE interface, the RTNL >> mutex may be held too long by the slave >> interface, causing bond_mii_monitor() to be called repeatedly at an interval >> of 1 tick (1K HZ kernel configuration) and kernel to become unresponsive. > Did you try/managed to reproduce that also with other NIC drivers? This seems to be an issue with the bonding driver. Also running older kernels on the same hardware without commit (de77ecd4ef02) seems to work fine. We can try to reproduce the issue with other type of NIC hardware. > > Or.
--- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -2266,7 +2266,6 @@ static void bond_mii_monitor(struct work_struct *work) /* Race avoidance with bond_close cancel of workqueue */ if (!rtnl_trylock()) { - delay = 1; should_notify_peers = false; goto re_arm; } #2, we use printk_ratelimit() to avoid flooding log messages generated by bond_miimon_inspect(). index b2db581..0183b7f 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -2054,7 +2054,7 @@ static int bond_miimon_inspect(struct bonding *bond) bond_propose_link_state(slave, BOND_LINK_FAIL); commit++; slave->delay = bond->params.downdelay; - if (slave->delay) { + if (slave->delay && printk_ratelimit()) { netdev_info(bond->dev, "link status down for %sinterface %s, disabling it in %d ms\n",