summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Leech <cleech@redhat.com>2019-04-02 18:06:12 -0400
committerDavid S. Miller <davem@davemloft.net>2019-04-04 20:18:34 -0400
commit0a89eb92d8c335da92bd5f54d8463b87dd440d45 (patch)
treedfee9349f6c5377e78f0ba286af068d80f523a65
parent5ba578011702f7872509794e70b92ee12bcf433c (diff)
vlan: conditional inclusion of FCoE hooks to match netdevice.h and bnx2x
Way back in 3c9c36bcedd426f2be2826da43e5163de61735f7 the ndo_fcoe_get_wwn pointer was switched from depending on CONFIG_FCOE to CONFIG_LIBFCOE in order to allow building FCoE support into the bnx2x driver and used by bnx2fc without including the generic software fcoe module. But, FCoE is generally used over an 802.1q VLAN, and the implementation of ndo_fcoe_get_wwn in the 8021q module was not similarly changed. The result is that if CONFIG_FCOE is disabled, then bnz2fc cannot make a call to ndo_fcoe_get_wwn through the 8021q interface to the underlying bnx2x interface. The bnx2fc driver then falls back to a potentially different mapping of Ethernet MAC to Fibre Channel WWN, creating an incompatibility with the fabric and target configurations when compared to the WWNs used by pre-boot firmware and differently-configured kernels. So make the conditional inclusion of FCoE code in 8021q match the conditional inclusion in netdevice.h Signed-off-by: Chris Leech <cleech@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/8021q/vlan_dev.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 15293c2a5dd8..8d77b6ee4477 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -443,27 +443,29 @@ static int vlan_dev_fcoe_disable(struct net_device *dev)
443 return rc; 443 return rc;
444} 444}
445 445
446static int vlan_dev_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type) 446static int vlan_dev_fcoe_ddp_target(struct net_device *dev, u16 xid,
447 struct scatterlist *sgl, unsigned int sgc)
447{ 448{
448 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev; 449 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
449 const struct net_device_ops *ops = real_dev->netdev_ops; 450 const struct net_device_ops *ops = real_dev->netdev_ops;
450 int rc = -EINVAL; 451 int rc = 0;
452
453 if (ops->ndo_fcoe_ddp_target)
454 rc = ops->ndo_fcoe_ddp_target(real_dev, xid, sgl, sgc);
451 455
452 if (ops->ndo_fcoe_get_wwn)
453 rc = ops->ndo_fcoe_get_wwn(real_dev, wwn, type);
454 return rc; 456 return rc;
455} 457}
458#endif
456 459
457static int vlan_dev_fcoe_ddp_target(struct net_device *dev, u16 xid, 460#ifdef NETDEV_FCOE_WWNN
458 struct scatterlist *sgl, unsigned int sgc) 461static int vlan_dev_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
459{ 462{
460 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev; 463 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
461 const struct net_device_ops *ops = real_dev->netdev_ops; 464 const struct net_device_ops *ops = real_dev->netdev_ops;
462 int rc = 0; 465 int rc = -EINVAL;
463
464 if (ops->ndo_fcoe_ddp_target)
465 rc = ops->ndo_fcoe_ddp_target(real_dev, xid, sgl, sgc);
466 466
467 if (ops->ndo_fcoe_get_wwn)
468 rc = ops->ndo_fcoe_get_wwn(real_dev, wwn, type);
467 return rc; 469 return rc;
468} 470}
469#endif 471#endif
@@ -794,9 +796,11 @@ static const struct net_device_ops vlan_netdev_ops = {
794 .ndo_fcoe_ddp_done = vlan_dev_fcoe_ddp_done, 796 .ndo_fcoe_ddp_done = vlan_dev_fcoe_ddp_done,
795 .ndo_fcoe_enable = vlan_dev_fcoe_enable, 797 .ndo_fcoe_enable = vlan_dev_fcoe_enable,
796 .ndo_fcoe_disable = vlan_dev_fcoe_disable, 798 .ndo_fcoe_disable = vlan_dev_fcoe_disable,
797 .ndo_fcoe_get_wwn = vlan_dev_fcoe_get_wwn,
798 .ndo_fcoe_ddp_target = vlan_dev_fcoe_ddp_target, 799 .ndo_fcoe_ddp_target = vlan_dev_fcoe_ddp_target,
799#endif 800#endif
801#ifdef NETDEV_FCOE_WWNN
802 .ndo_fcoe_get_wwn = vlan_dev_fcoe_get_wwn,
803#endif
800#ifdef CONFIG_NET_POLL_CONTROLLER 804#ifdef CONFIG_NET_POLL_CONTROLLER
801 .ndo_poll_controller = vlan_dev_poll_controller, 805 .ndo_poll_controller = vlan_dev_poll_controller,
802 .ndo_netpoll_setup = vlan_dev_netpoll_setup, 806 .ndo_netpoll_setup = vlan_dev_netpoll_setup,