diff options
author | andrew.vasquez@qlogic.com <andrew.vasquez@qlogic.com> | 2006-01-20 17:53:13 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2006-01-26 08:16:50 -0500 |
commit | d97994dc1fddcbb8212b745d9c9c9ce96262155c (patch) | |
tree | 860d0034485f06dc8cb52c23efb6fe5252a25c99 /drivers/scsi/qla2xxx/qla_gbl.h | |
parent | 1d12d98d284665c37b75b9538916b5fbb8fcde37 (diff) |
[SCSI] qla2xxx: Correct synchronization issues during rport addition/deletion.
The driver can typically detect port-loss during an
interrupt context (i.e. via interrogation of a status IOCB's
completion status [CS_PORT_LOGGED_OUT]. Due to the calling
requirements of the fc_rport APIs, the driver would defer
removal of the device to the default workqueue. If the
work-item was preceded by an event which caused the port to
obtain visibility (relogin successful, target re-logged into
the topology), deferred removal could inadvertently drop the
rport. The code also no longer defers removal via the
default workqueue, instead opting for use of the driver's
own DPC thread.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_gbl.h')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_gbl.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 32be4c14cccb..0c1ec14f3072 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
@@ -47,6 +47,7 @@ extern int qla2x00_local_device_login(scsi_qla_host_t *, uint16_t); | |||
47 | extern void qla2x00_restart_queues(scsi_qla_host_t *, uint8_t); | 47 | extern void qla2x00_restart_queues(scsi_qla_host_t *, uint8_t); |
48 | 48 | ||
49 | extern void qla2x00_rescan_fcports(scsi_qla_host_t *); | 49 | extern void qla2x00_rescan_fcports(scsi_qla_host_t *); |
50 | extern void qla2x00_update_fcports(scsi_qla_host_t *); | ||
50 | 51 | ||
51 | extern int qla2x00_abort_isp(scsi_qla_host_t *); | 52 | extern int qla2x00_abort_isp(scsi_qla_host_t *); |
52 | 53 | ||
@@ -70,8 +71,8 @@ extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *); | |||
70 | 71 | ||
71 | extern void qla2x00_cmd_timeout(srb_t *); | 72 | extern void qla2x00_cmd_timeout(srb_t *); |
72 | 73 | ||
73 | extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int); | 74 | extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int, int); |
74 | extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *); | 75 | extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *, int); |
75 | 76 | ||
76 | extern void qla2x00_blink_led(scsi_qla_host_t *); | 77 | extern void qla2x00_blink_led(scsi_qla_host_t *); |
77 | 78 | ||