Commit 33135aa2 authored by Ravi Anand's avatar Ravi Anand Committed by James Bottomley

[SCSI] qla2xxx: Correct loop-in-transition issues

When mulitple initiators are coming up in an FCAL topology.
Signed-off-by: default avatarRavi Anand <ravi.anand@qlogic.com>
Signed-off-by: default avatarAndrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent dcb36ce9
...@@ -147,8 +147,8 @@ qla2x00_initialize_adapter(scsi_qla_host_t *ha) ...@@ -147,8 +147,8 @@ qla2x00_initialize_adapter(scsi_qla_host_t *ha)
* LIP to complete * LIP to complete
*/ */
if (atomic_read(&ha->loop_state) == if (atomic_read(&ha->loop_state) !=
LOOP_DOWN && retry--) { LOOP_READY && retry--) {
goto check_fw_ready_again; goto check_fw_ready_again;
} }
wait_time--; wait_time--;
...@@ -1258,9 +1258,15 @@ qla2x00_configure_hba(scsi_qla_host_t *ha) ...@@ -1258,9 +1258,15 @@ qla2x00_configure_hba(scsi_qla_host_t *ha)
rval = qla2x00_get_adapter_id(ha, rval = qla2x00_get_adapter_id(ha,
&loop_id, &al_pa, &area, &domain, &topo); &loop_id, &al_pa, &area, &domain, &topo);
if (rval != QLA_SUCCESS) { if (rval != QLA_SUCCESS) {
if (LOOP_NOT_READY(ha) || atomic_read(&ha->loop_down_timer) ||
(rval == QLA_COMMAND_ERROR && loop_id == 0x7)) {
DEBUG2(printk("%s(%ld) Loop is in a transition state\n",
__func__, ha->host_no));
} else {
qla_printk(KERN_WARNING, ha, qla_printk(KERN_WARNING, ha,
"ERROR -- Unable to get host loop ID.\n"); "ERROR -- Unable to get host loop ID.\n");
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
}
return (rval); return (rval);
} }
...@@ -1789,7 +1795,7 @@ qla2x00_configure_loop(scsi_qla_host_t *ha) ...@@ -1789,7 +1795,7 @@ qla2x00_configure_loop(scsi_qla_host_t *ha)
} }
if (rval == QLA_SUCCESS && test_bit(RSCN_UPDATE, &flags)) { if (rval == QLA_SUCCESS && test_bit(RSCN_UPDATE, &flags)) {
if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) { if (LOOP_NOT_READY(ha)) {
rval = QLA_FUNCTION_FAILED; rval = QLA_FUNCTION_FAILED;
} else { } else {
rval = qla2x00_configure_fabric(ha); rval = qla2x00_configure_fabric(ha);
...@@ -2362,8 +2368,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha, struct list_head *new_fcports) ...@@ -2362,8 +2368,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha, struct list_head *new_fcports)
if (qla2x00_is_reserved_id(ha, loop_id)) if (qla2x00_is_reserved_id(ha, loop_id))
continue; continue;
if (atomic_read(&ha->loop_down_timer) || if (atomic_read(&ha->loop_down_timer) || LOOP_NOT_READY(ha))
test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
break; break;
if (swl != NULL) { if (swl != NULL) {
......
...@@ -1008,6 +1008,8 @@ qla2x00_get_adapter_id(scsi_qla_host_t *ha, uint16_t *id, uint8_t *al_pa, ...@@ -1008,6 +1008,8 @@ qla2x00_get_adapter_id(scsi_qla_host_t *ha, uint16_t *id, uint8_t *al_pa,
mcp->tov = 30; mcp->tov = 30;
mcp->flags = 0; mcp->flags = 0;
rval = qla2x00_mailbox_command(ha, mcp); rval = qla2x00_mailbox_command(ha, mcp);
if (mcp->mb[0] == MBS_COMMAND_ERROR)
rval = QLA_COMMAND_ERROR;
/* Return data. */ /* Return data. */
*id = mcp->mb[1]; *id = mcp->mb[1];
......
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