hv_netvsc: fix bonding devices check in netvsc_netdev_event()
Bonding driver sets IFF_BONDING on both master (the bonding device) and slave (the real NIC) devices and in netvsc_netdev_event() we want to skip master devices only. Currently, there is an uncertainty when a slave interface is removed: if bonding module comes first in netdev_chain it clears IFF_BONDING flag on the netdev and netvsc_netdev_event() correctly handles NETDEV_UNREGISTER event, but in case netvsc comes first on the chain it sees the device with IFF_BONDING still attached and skips it. As we still hold vf_netdev pointer to the device we crash on the next inject. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Acked-by: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
0f20d795f7
Коммит
0dbff144a1
|
@ -1482,8 +1482,13 @@ static int netvsc_netdev_event(struct notifier_block *this,
|
|||
{
|
||||
struct net_device *event_dev = netdev_notifier_info_to_dev(ptr);
|
||||
|
||||
/* Avoid Vlan, Bonding dev with same MAC registering as VF */
|
||||
if (event_dev->priv_flags & (IFF_802_1Q_VLAN | IFF_BONDING))
|
||||
/* Avoid Vlan dev with same MAC registering as VF */
|
||||
if (event_dev->priv_flags & IFF_802_1Q_VLAN)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
/* Avoid Bonding master dev with same MAC registering as VF */
|
||||
if (event_dev->priv_flags & IFF_BONDING &&
|
||||
event_dev->flags & IFF_MASTER)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
switch (event) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче