summaryrefslogtreecommitdiff
path: root/drivers/scsi/fcoe/fcoe.h
diff options
context:
space:
mode:
authorRobert Love <robert.w.love@intel.com>2012-02-11 01:18:41 (GMT)
committerJames Bottomley <JBottomley@Parallels.com>2012-02-19 15:25:17 (GMT)
commitccefd23ed2d683ad3c0282280e6e6d0b163ad041 (patch)
treea819e2a95ee58e1ccf7f7537be2407f5d6e7dfd9 /drivers/scsi/fcoe/fcoe.h
parent6f68794c9283bbce3f7c91d3be34cb4f4f6ed960 (diff)
downloadlinux-ccefd23ed2d683ad3c0282280e6e6d0b163ad041.tar.xz
[SCSI] fcoe: Do not switch context in vport_delete callback
Currently all port deletion is routed though the FCoE workqueue (fcoe_wq). When fc_remove_host is called on an N_Port (for example, from fcoe_destroy) the vports are queued into a FC Transport workqueue. fc_remove_host flushes that queue and each vport is passed to fcoe's fcoe_vport_destroy, which simply queues the associated fcoe_ports for later deletion. This queue cannot be flushed within the N_Ports destroy path because of circular locking issues. The result is that the NPIV ports are destroyed after the N_Port, which is reverse of how they are created. This quirk causes fcoe to keep references on the fcoe_interface shared by each of these ports (N_Port and NPIV). Changing the ordering such that NPIV ports are destroyed before the N_Port will allow us to remove reference counting on the fcoe_interface instances. This patch simply allows fcoe_vport_destory to destroy NPIV ports without deferring them to a workqueue context. This ensures that when fc_remove_host is called the NPIV ports will be destroyed first before the N_Port and allows reference counting on the fcoe's fcoe_interface to be remove in a later patch. Signed-off-by: Robert Love <robert.w.love@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/fcoe/fcoe.h')
0 files changed, 0 insertions, 0 deletions