|
@@ -182,14 +182,17 @@ static struct net_device *get_iff_from_mac(struct adapter *adapter,
|
|
|
struct net_device *dev = adapter->port[i];
|
|
|
|
|
|
if (!memcmp(dev->dev_addr, mac, ETH_ALEN)) {
|
|
|
+ rcu_read_lock();
|
|
|
if (vlan && vlan != VLAN_VID_MASK) {
|
|
|
- rcu_read_lock();
|
|
|
dev = __vlan_find_dev_deep(dev, vlan);
|
|
|
- rcu_read_unlock();
|
|
|
} else if (netif_is_bond_slave(dev)) {
|
|
|
- while (dev->master)
|
|
|
- dev = dev->master;
|
|
|
+ struct net_device *upper_dev;
|
|
|
+
|
|
|
+ while ((upper_dev =
|
|
|
+ netdev_master_upper_dev_get_rcu(dev)))
|
|
|
+ dev = upper_dev;
|
|
|
}
|
|
|
+ rcu_read_unlock();
|
|
|
return dev;
|
|
|
}
|
|
|
}
|