aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx
diff options
context:
space:
mode:
authorandrew.vasquez@qlogic.com <andrew.vasquez@qlogic.com>2006-01-20 17:53:19 -0500
committerJames Bottomley <jejb@mulgrave.(none)>2006-01-26 08:17:00 -0500
commit052c40c83b4ca37be226112049b60097cb9961e1 (patch)
treefc6a030f7df137575160dfb8274991a854c3a14d /drivers/scsi/qla2xxx
parentd97994dc1fddcbb8212b745d9c9c9ce96262155c (diff)
[SCSI] qla2xxx: Correct issue where the rport's upcall was not being made after relogin.
A target can LOGO an initiator at any time (i.e. during I/O, due to a controller hicup, or as a simple authentication mechanism after an initial CDB command), when this occurs, the driver attempts to relogin (PLOGI) to the device via the DPC thread. Add code to make the appropriate upcall to the FC transport layer (fc_remote_port_add()) upon successful completion of the PLOGI. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r--drivers/scsi/qla2xxx/qla_gbl.h1
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c3
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c9
3 files changed, 4 insertions, 9 deletions
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 0c1ec14f3072..35266bd5d538 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -51,6 +51,7 @@ extern void qla2x00_update_fcports(scsi_qla_host_t *);
51 51
52extern int qla2x00_abort_isp(scsi_qla_host_t *); 52extern int qla2x00_abort_isp(scsi_qla_host_t *);
53 53
54extern void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *);
54extern void qla2x00_reg_remote_port(scsi_qla_host_t *, fc_port_t *); 55extern void qla2x00_reg_remote_port(scsi_qla_host_t *, fc_port_t *);
55 56
56/* 57/*
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 4c7caece4ca7..16c889261d94 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -32,7 +32,6 @@ static int qla2x00_fw_ready(scsi_qla_host_t *);
32static int qla2x00_configure_hba(scsi_qla_host_t *); 32static int qla2x00_configure_hba(scsi_qla_host_t *);
33static int qla2x00_configure_loop(scsi_qla_host_t *); 33static int qla2x00_configure_loop(scsi_qla_host_t *);
34static int qla2x00_configure_local_loop(scsi_qla_host_t *); 34static int qla2x00_configure_local_loop(scsi_qla_host_t *);
35static void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *);
36static int qla2x00_configure_fabric(scsi_qla_host_t *); 35static int qla2x00_configure_fabric(scsi_qla_host_t *);
37static int qla2x00_find_all_fabric_devs(scsi_qla_host_t *, struct list_head *); 36static int qla2x00_find_all_fabric_devs(scsi_qla_host_t *, struct list_head *);
38static int qla2x00_device_resync(scsi_qla_host_t *); 37static int qla2x00_device_resync(scsi_qla_host_t *);
@@ -2039,7 +2038,7 @@ qla2x00_probe_for_all_luns(scsi_qla_host_t *ha)
2039 * Context: 2038 * Context:
2040 * Kernel context. 2039 * Kernel context.
2041 */ 2040 */
2042static void 2041void
2043qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport) 2042qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport)
2044{ 2043{
2045 uint16_t index; 2044 uint16_t index;
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 089e0f500363..5866a7c706a8 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -2250,13 +2250,8 @@ qla2x00_do_dpc(void *data)
2250 DEBUG(printk("scsi(%ld): port login OK: logged in ID 0x%x\n", 2250 DEBUG(printk("scsi(%ld): port login OK: logged in ID 0x%x\n",
2251 ha->host_no, fcport->loop_id)); 2251 ha->host_no, fcport->loop_id));
2252 2252
2253 fcport->port_login_retry_count = 2253 qla2x00_update_fcport(ha,
2254 ha->port_down_retry_count * PORT_RETRY_TIME; 2254 fcport);
2255 atomic_set(&fcport->state, FCS_ONLINE);
2256 atomic_set(&fcport->port_down_timer,
2257 ha->port_down_retry_count * PORT_RETRY_TIME);
2258
2259 fcport->login_retry = 0;
2260 } else if (status == 1) { 2255 } else if (status == 1) {
2261 set_bit(RELOGIN_NEEDED, &ha->dpc_flags); 2256 set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
2262 /* retry the login again */ 2257 /* retry the login again */