[SCSI] fcoe: Call ndo_fcoe_enable/disable to turn FCoE feature on/off in LLD
Calls ndo_fcoe_enabled() of the associated netdev upon creating the FCoE instance to make sure LLD has all necessary resources allocated and setup properly before passing FCoE traffic. Similarly, calls ndo_fcoe_disable() upon destroying the FCoE instance on the associated netdev to allow the LLD to release all allocated resources for FCoE. 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:
parent
d37322a43e
commit
b7a727f1af
|
@ -161,9 +161,18 @@ 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;
|
||||||
u8 flogi_maddr[ETH_ALEN];
|
u8 flogi_maddr[ETH_ALEN];
|
||||||
|
const struct net_device_ops *ops;
|
||||||
|
|
||||||
fcoe->netdev = netdev;
|
fcoe->netdev = netdev;
|
||||||
|
|
||||||
|
/* Let LLD initialize for FCoE */
|
||||||
|
ops = netdev->netdev_ops;
|
||||||
|
if (ops->ndo_fcoe_enable) {
|
||||||
|
if (ops->ndo_fcoe_enable(netdev))
|
||||||
|
FCOE_NETDEV_DBG(netdev, "Failed to enable FCoE"
|
||||||
|
" specific feature for LLD.\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* Do not support for bonding device */
|
/* Do not support for bonding device */
|
||||||
if ((netdev->priv_flags & IFF_MASTER_ALB) ||
|
if ((netdev->priv_flags & IFF_MASTER_ALB) ||
|
||||||
(netdev->priv_flags & IFF_SLAVE_INACTIVE) ||
|
(netdev->priv_flags & IFF_SLAVE_INACTIVE) ||
|
||||||
|
@ -262,6 +271,7 @@ void fcoe_interface_cleanup(struct fcoe_interface *fcoe)
|
||||||
struct net_device *netdev = fcoe->netdev;
|
struct net_device *netdev = fcoe->netdev;
|
||||||
struct fcoe_ctlr *fip = &fcoe->ctlr;
|
struct fcoe_ctlr *fip = &fcoe->ctlr;
|
||||||
u8 flogi_maddr[ETH_ALEN];
|
u8 flogi_maddr[ETH_ALEN];
|
||||||
|
const struct net_device_ops *ops;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Don't listen for Ethernet packets anymore.
|
* Don't listen for Ethernet packets anymore.
|
||||||
|
@ -281,6 +291,14 @@ void fcoe_interface_cleanup(struct fcoe_interface *fcoe)
|
||||||
if (fip->spma)
|
if (fip->spma)
|
||||||
dev_unicast_delete(netdev, fip->ctl_src_addr);
|
dev_unicast_delete(netdev, fip->ctl_src_addr);
|
||||||
dev_mc_delete(netdev, FIP_ALL_ENODE_MACS, ETH_ALEN, 0);
|
dev_mc_delete(netdev, FIP_ALL_ENODE_MACS, ETH_ALEN, 0);
|
||||||
|
|
||||||
|
/* Tell the LLD we are done w/ FCoE */
|
||||||
|
ops = netdev->netdev_ops;
|
||||||
|
if (ops->ndo_fcoe_disable) {
|
||||||
|
if (ops->ndo_fcoe_disable(netdev))
|
||||||
|
FCOE_NETDEV_DBG(netdev, "Failed to disable FCoE"
|
||||||
|
" specific feature for LLD.\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue