[SCSI] qla2xxx: Correct vport-state management issues during ISP-ABORT.
* Use correct 'ha' to mark a device lost from ISR. I/Os will always be returned on the physical-HA. qla2x00_mark_device_lost() should be called with the HA bound to the fcport. * Mark *all* devices lost during ISP-ABORT (bighammer). These fixes correct issues discovered locally where during link-perturbation and heavy vport-I/O fcport/rport states would stray and an rport's scsi-target lost (timed-out). Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
6390d1f33f
commit
a7a28504bf
2 changed files with 6 additions and 4 deletions
|
@ -3251,6 +3251,7 @@ qla2x00_abort_isp(scsi_qla_host_t *ha)
|
|||
{
|
||||
int rval;
|
||||
uint8_t status = 0;
|
||||
scsi_qla_host_t *vha;
|
||||
|
||||
if (ha->flags.online) {
|
||||
ha->flags.online = 0;
|
||||
|
@ -3265,6 +3266,8 @@ qla2x00_abort_isp(scsi_qla_host_t *ha)
|
|||
if (atomic_read(&ha->loop_state) != LOOP_DOWN) {
|
||||
atomic_set(&ha->loop_state, LOOP_DOWN);
|
||||
qla2x00_mark_all_devices_lost(ha, 0);
|
||||
list_for_each_entry(vha, &ha->vp_list, vp_list)
|
||||
qla2x00_mark_all_devices_lost(vha, 0);
|
||||
} else {
|
||||
if (!atomic_read(&ha->loop_down_timer))
|
||||
atomic_set(&ha->loop_down_timer,
|
||||
|
|
|
@ -1184,9 +1184,8 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
|||
atomic_read(&fcport->state)));
|
||||
|
||||
cp->result = DID_BUS_BUSY << 16;
|
||||
if (atomic_read(&fcport->state) == FCS_ONLINE) {
|
||||
qla2x00_mark_device_lost(ha, fcport, 1, 1);
|
||||
}
|
||||
if (atomic_read(&fcport->state) == FCS_ONLINE)
|
||||
qla2x00_mark_device_lost(fcport->ha, fcport, 1, 1);
|
||||
break;
|
||||
|
||||
case CS_RESET:
|
||||
|
@ -1229,7 +1228,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
|||
|
||||
/* Check to see if logout occurred. */
|
||||
if ((le16_to_cpu(sts->status_flags) & SF_LOGOUT_SENT))
|
||||
qla2x00_mark_device_lost(ha, fcport, 1, 1);
|
||||
qla2x00_mark_device_lost(fcport->ha, fcport, 1, 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue