[SCSI] fcoe: Fix getting san mac for VLAN interface
Make sure we are get the SAN MAC address from the real netdev if the input netdev is a VLAN device. Signed-off-by: Yi Zou <yi.zou@intel.com> Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
@@ -249,6 +249,7 @@ static int fcoe_interface_setup(struct fcoe_interface *fcoe,
|
|||||||
{
|
{
|
||||||
struct fcoe_ctlr *fip = &fcoe->ctlr;
|
struct fcoe_ctlr *fip = &fcoe->ctlr;
|
||||||
struct netdev_hw_addr *ha;
|
struct netdev_hw_addr *ha;
|
||||||
|
struct net_device *real_dev;
|
||||||
u8 flogi_maddr[ETH_ALEN];
|
u8 flogi_maddr[ETH_ALEN];
|
||||||
const struct net_device_ops *ops;
|
const struct net_device_ops *ops;
|
||||||
|
|
||||||
@@ -272,8 +273,10 @@ static int fcoe_interface_setup(struct fcoe_interface *fcoe,
|
|||||||
|
|
||||||
/* look for SAN MAC address, if multiple SAN MACs exist, only
|
/* look for SAN MAC address, if multiple SAN MACs exist, only
|
||||||
* use the first one for SPMA */
|
* use the first one for SPMA */
|
||||||
|
real_dev = (netdev->priv_flags & IFF_802_1Q_VLAN) ?
|
||||||
|
vlan_dev_real_dev(netdev) : netdev;
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
for_each_dev_addr(netdev, ha) {
|
for_each_dev_addr(real_dev, ha) {
|
||||||
if ((ha->type == NETDEV_HW_ADDR_T_SAN) &&
|
if ((ha->type == NETDEV_HW_ADDR_T_SAN) &&
|
||||||
(is_valid_ether_addr(ha->addr))) {
|
(is_valid_ether_addr(ha->addr))) {
|
||||||
memcpy(fip->ctl_src_addr, ha->addr, ETH_ALEN);
|
memcpy(fip->ctl_src_addr, ha->addr, ETH_ALEN);
|
||||||
|
Reference in New Issue
Block a user