Commit eccdcd02 authored by Bhanu Prakash Gollapudi's avatar Bhanu Prakash Gollapudi Committed by James Bottomley

[SCSI] bnx2fc: Need not schedule destroy_work from __bnx2fc_destroy

Since it is already called in the right context with rtnl_lock and dev_mutex
held.
Signed-off-by: default avatarBhanu Prakash Gollapudi <bprakash@broadcom.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 1dbf5a37
...@@ -56,7 +56,7 @@ static struct scsi_host_template bnx2fc_shost_template; ...@@ -56,7 +56,7 @@ static struct scsi_host_template bnx2fc_shost_template;
static struct fc_function_template bnx2fc_transport_function; static struct fc_function_template bnx2fc_transport_function;
static struct fc_function_template bnx2fc_vport_xport_function; static struct fc_function_template bnx2fc_vport_xport_function;
static int bnx2fc_create(struct net_device *netdev, enum fip_state fip_mode); static int bnx2fc_create(struct net_device *netdev, enum fip_state fip_mode);
static void __bnx2fc_destroy(struct bnx2fc_interface *interface, bool schedule); static void __bnx2fc_destroy(struct bnx2fc_interface *interface);
static int bnx2fc_destroy(struct net_device *net_device); static int bnx2fc_destroy(struct net_device *net_device);
static int bnx2fc_enable(struct net_device *netdev); static int bnx2fc_enable(struct net_device *netdev);
static int bnx2fc_disable(struct net_device *netdev); static int bnx2fc_disable(struct net_device *netdev);
...@@ -840,7 +840,7 @@ static void bnx2fc_indicate_netevent(void *context, unsigned long event, ...@@ -840,7 +840,7 @@ static void bnx2fc_indicate_netevent(void *context, unsigned long event,
list_for_each_entry_safe(interface, tmp, &if_list, list) { list_for_each_entry_safe(interface, tmp, &if_list, list) {
if (interface->hba != hba) if (interface->hba != hba)
continue; continue;
__bnx2fc_destroy(interface, true); __bnx2fc_destroy(interface);
} }
mutex_unlock(&bnx2fc_dev_lock); mutex_unlock(&bnx2fc_dev_lock);
return; return;
...@@ -1479,20 +1479,15 @@ static void bnx2fc_if_destroy(struct fc_lport *lport) ...@@ -1479,20 +1479,15 @@ static void bnx2fc_if_destroy(struct fc_lport *lport)
scsi_host_put(lport->host); scsi_host_put(lport->host);
} }
static void __bnx2fc_destroy(struct bnx2fc_interface *interface, bool schedule) static void __bnx2fc_destroy(struct bnx2fc_interface *interface)
{ {
struct fc_lport *lport = interface->ctlr.lp; struct fc_lport *lport = interface->ctlr.lp;
struct fcoe_port *port = lport_priv(lport);
bnx2fc_interface_cleanup(interface); bnx2fc_interface_cleanup(interface);
bnx2fc_stop(interface); bnx2fc_stop(interface);
list_del(&interface->list); list_del(&interface->list);
lport = interface->ctlr.lp; lport = interface->ctlr.lp;
bnx2fc_interface_put(interface); bnx2fc_interface_put(interface);
if (schedule)
queue_work(bnx2fc_wq, &port->destroy_work);
else
bnx2fc_if_destroy(lport); bnx2fc_if_destroy(lport);
} }
...@@ -1523,7 +1518,7 @@ static int bnx2fc_destroy(struct net_device *netdev) ...@@ -1523,7 +1518,7 @@ static int bnx2fc_destroy(struct net_device *netdev)
destroy_workqueue(interface->timer_work_queue); destroy_workqueue(interface->timer_work_queue);
__bnx2fc_destroy(interface, false); __bnx2fc_destroy(interface);
netdev_err: netdev_err:
mutex_unlock(&bnx2fc_dev_lock); mutex_unlock(&bnx2fc_dev_lock);
...@@ -2110,7 +2105,7 @@ static void bnx2fc_ulp_exit(struct cnic_dev *dev) ...@@ -2110,7 +2105,7 @@ static void bnx2fc_ulp_exit(struct cnic_dev *dev)
list_for_each_entry_safe(interface, tmp, &if_list, list) list_for_each_entry_safe(interface, tmp, &if_list, list)
/* destroy not called yet, move to quiesced list */ /* destroy not called yet, move to quiesced list */
if (interface->hba == hba) if (interface->hba == hba)
__bnx2fc_destroy(interface, false); __bnx2fc_destroy(interface);
mutex_unlock(&bnx2fc_dev_lock); mutex_unlock(&bnx2fc_dev_lock);
bnx2fc_ulp_stop(hba); bnx2fc_ulp_stop(hba);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment