• Robert Love's avatar
    fcoe: Use correct API to set vlan tag for FCoE Ethertype skbs · 2884d423
    Robert Love authored
    fcoe_xmit was coded such that it would skip the vlan net device/layer
    and instead set some vlan flags and transmit on the real net device.
    The real net device has code that would add the vlan tag for fcoe skbs.
    This avoids some extra processing for data frames and provides a small
    performance improvement.
    Since fcoe_xmit was not using the vlan net device, __vlan_put_tag
    within the real net device's xmit routine was ultimately being
    called to set the vlan tag.
    With the below change the behavior of __vlan_put_tag changed slightly,
    it now sets the skb->protocol = vlan_proto. vlan_proto was not a field
    being set by fcoe_xmit, so the skb->protocol is now not being set to
    ETH_P_8021Q, as it should be.
    This patch converts fcoe_xmit to use the vlan_put_tag routine which
    will tag the skb and fcoe will continue to transmit fcoe skbs on the
    real net device.
    For reference, the below change was the one that altered the
    __vlan_put_tag behavior.
      commit 86a9bad3
      Author: Patrick McHardy <kaber@trash.net>
      Date:   Fri Apr 19 02:04:30 2013 +0000
          net: vlan: add protocol argument to packet tagging functions
          Add a protocol argument to the VLAN packet tagging functions. In case of HW
          tagging, we need that protocol available in the ndo_start_xmit functions,
          so it is stored in a new field in the skb. The new field fits into a hole
          (on 64 bit) and doesn't increase the sks's size.
    Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
    Acked-by: default avatarNeil Horman <nhorman@tuxdriver.com>
    Acked-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
fcoe.c 77 KB