summaryrefslogtreecommitdiff
path: root/drivers/scsi/qla2xxx/qla_mbx.c
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2011-03-30 11:46:31 -0700
committerJames Bottomley <James.Bottomley@suse.de>2011-05-01 10:14:17 -0500
commita4f92a32a0fb827f7bd40c69f021cf57d3dc4249 (patch)
treec6a991598b8dca872fd367026d75f0fd9c55361b /drivers/scsi/qla2xxx/qla_mbx.c
parent92dbf273921eb53a9d5b760a8f3b32eefd776b1b (diff)
[SCSI] qla2xxx: Verify login-state has transitioned to PRLI-completed.
Before driver's own internal state is marked as PLOGI/PRLI complete. This additional check closes a window seen with dual-personality initiator/target devices where a driver's PLOGI/PRLI request occurs within the window after the target's PLOGI request has completed, but prior to the target's PRLI arriving and processed by the firmware. Without this additional check, the firmware will return port-information stating that the port neither supports target nor initiator functions, causing the driver to register the rport prematurely to the FC-transport without the proper 'roles' being set. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_mbx.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 32b689061ea7..975aeaae297a 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -1261,11 +1261,12 @@ qla2x00_get_port_database(scsi_qla_host_t *vha, fc_port_t *fcport, uint8_t opt)
/* Check for logged in state. */
if (pd24->current_login_state != PDS_PRLI_COMPLETE &&
pd24->last_login_state != PDS_PRLI_COMPLETE) {
- DEBUG2(printk("%s(%ld): Unable to verify "
- "login-state (%x/%x) for loop_id %x\n",
- __func__, vha->host_no,
- pd24->current_login_state,
- pd24->last_login_state, fcport->loop_id));
+ DEBUG2(qla_printk(KERN_WARNING, ha,
+ "scsi(%ld): Unable to verify login-state (%x/%x) "
+ " - portid=%02x%02x%02x.\n", vha->host_no,
+ pd24->current_login_state, pd24->last_login_state,
+ fcport->d_id.b.domain, fcport->d_id.b.area,
+ fcport->d_id.b.al_pa));
rval = QLA_FUNCTION_FAILED;
goto gpd_error_out;
}
@@ -1289,6 +1290,12 @@ qla2x00_get_port_database(scsi_qla_host_t *vha, fc_port_t *fcport, uint8_t opt)
/* Check for logged in state. */
if (pd->master_state != PD_STATE_PORT_LOGGED_IN &&
pd->slave_state != PD_STATE_PORT_LOGGED_IN) {
+ DEBUG2(qla_printk(KERN_WARNING, ha,
+ "scsi(%ld): Unable to verify login-state (%x/%x) "
+ " - portid=%02x%02x%02x.\n", vha->host_no,
+ pd->master_state, pd->slave_state,
+ fcport->d_id.b.domain, fcport->d_id.b.area,
+ fcport->d_id.b.al_pa));
rval = QLA_FUNCTION_FAILED;
goto gpd_error_out;
}