fcoe: Fix getting san mac for VLAN interface
authorYi Zou <yi.zou@intel.com>
Tue, 3 Nov 2009 19:49:43 +0000 (11:49 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 28 Jan 2010 23:01:42 +0000 (15:01 -0800)
commit 5bab87e6d465d54a2b5899e0f583d42f00dbee2e upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/scsi/fcoe/fcoe.c

index 36f16a0bcf17b51b6e8df6db9ea2fd92f39f273d..70ab5d0c5a484ac2e9359e11b7d21935149ead1c 100644 (file)
@@ -160,6 +160,7 @@ static int fcoe_interface_setup(struct fcoe_interface *fcoe,
 {
        struct fcoe_ctlr *fip = &fcoe->ctlr;
        struct netdev_hw_addr *ha;
+       struct net_device *real_dev;
        u8 flogi_maddr[ETH_ALEN];
 
        fcoe->netdev = netdev;
@@ -173,8 +174,10 @@ static int fcoe_interface_setup(struct fcoe_interface *fcoe,
 
        /* look for SAN MAC address, if multiple SAN MACs exist, only
         * use the first one for SPMA */
+       real_dev = (netdev->priv_flags & IFF_802_1Q_VLAN) ?
+               vlan_dev_real_dev(netdev) : netdev;
        rcu_read_lock();
-       for_each_dev_addr(netdev, ha) {
+       for_each_dev_addr(real_dev, ha) {
                if ((ha->type == NETDEV_HW_ADDR_T_SAN) &&
                    (is_valid_ether_addr(ha->addr))) {
                        memcpy(fip->ctl_src_addr, ha->addr, ETH_ALEN);