From 369a7401ae85fa72f9aada578208ba5eec4e3199 Mon Sep 17 00:00:00 2001 From: Vasu Dev Date: Tue, 27 Sep 2011 21:38:13 -0700 Subject: [PATCH] --- yaml --- r: 271075 b: refs/heads/master c: d1483bb90a01ec68c2f6dc8842ce2d449cd6d6d0 h: refs/heads/master i: 271073: e63f44fdea1bc8a3209c137bc99a107a4ae130ab 271071: dc8add19d752ad18cde16b9a285baa0526d4cb24 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/fcoe/fcoe.c | 9 ++++++++- trunk/drivers/scsi/fcoe/fcoe.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index b52def822185..b690dbfde1a9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e17b4af7c7a6f5c24b0e6b856bb45a1a22be75f5 +refs/heads/master: d1483bb90a01ec68c2f6dc8842ce2d449cd6d6d0 diff --git a/trunk/drivers/scsi/fcoe/fcoe.c b/trunk/drivers/scsi/fcoe/fcoe.c index 010432596eaf..0086fc836b54 100644 --- a/trunk/drivers/scsi/fcoe/fcoe.c +++ b/trunk/drivers/scsi/fcoe/fcoe.c @@ -280,6 +280,7 @@ static int fcoe_interface_setup(struct fcoe_interface *fcoe, * use the first one for SPMA */ real_dev = (netdev->priv_flags & IFF_802_1Q_VLAN) ? vlan_dev_real_dev(netdev) : netdev; + fcoe->realdev = real_dev; rcu_read_lock(); for_each_dev_addr(real_dev, ha) { if ((ha->type == NETDEV_HW_ADDR_T_SAN) && @@ -1518,7 +1519,13 @@ int fcoe_xmit(struct fc_lport *lport, struct fc_frame *fp) skb_reset_network_header(skb); skb->mac_len = elen; skb->protocol = htons(ETH_P_FCOE); - skb->dev = fcoe->netdev; + if (fcoe->netdev->priv_flags & IFF_802_1Q_VLAN && + fcoe->realdev->features & NETIF_F_HW_VLAN_TX) { + skb->vlan_tci = VLAN_TAG_PRESENT | + vlan_dev_vlan_id(fcoe->netdev); + skb->dev = fcoe->realdev; + } else + skb->dev = fcoe->netdev; /* fill up mac and fcoe headers */ eh = eth_hdr(skb); diff --git a/trunk/drivers/scsi/fcoe/fcoe.h b/trunk/drivers/scsi/fcoe/fcoe.h index 408a6fd78fb4..6c6884bcf840 100644 --- a/trunk/drivers/scsi/fcoe/fcoe.h +++ b/trunk/drivers/scsi/fcoe/fcoe.h @@ -80,6 +80,7 @@ do { \ struct fcoe_interface { struct list_head list; struct net_device *netdev; + struct net_device *realdev; struct packet_type fcoe_packet_type; struct packet_type fip_packet_type; struct fcoe_ctlr ctlr;