mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
[SCSI] qla4xxx: fix recovery timer and session unblock race
If qla4xxx is resetting up a session and the recovery timer fires we do not want to just set it to dead, because the dpc thread could have just set it to online and is in the middle of resetting it up. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Cc: David Somayajulu <david.somayajulu@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
bd976f62cd
commit
568d303b5b
1 changed files with 11 additions and 8 deletions
|
@ -124,16 +124,19 @@ static void qla4xxx_recovery_timedout(struct iscsi_cls_session *session)
|
|||
struct ddb_entry *ddb_entry = session->dd_data;
|
||||
struct scsi_qla_host *ha = ddb_entry->ha;
|
||||
|
||||
DEBUG2(printk("scsi%ld: %s: index [%d] port down retry count of (%d) "
|
||||
"secs exhausted, marking device DEAD.\n", ha->host_no,
|
||||
__func__, ddb_entry->fw_ddb_index,
|
||||
ha->port_down_retry_count));
|
||||
if (atomic_read(&ddb_entry->state) != DDB_STATE_ONLINE) {
|
||||
atomic_set(&ddb_entry->state, DDB_STATE_DEAD);
|
||||
|
||||
atomic_set(&ddb_entry->state, DDB_STATE_DEAD);
|
||||
DEBUG2(printk("scsi%ld: %s: index [%d] port down retry count "
|
||||
"of (%d) secs exhausted, marking device DEAD.\n",
|
||||
ha->host_no, __func__, ddb_entry->fw_ddb_index,
|
||||
ha->port_down_retry_count));
|
||||
|
||||
DEBUG2(printk("scsi%ld: %s: scheduling dpc routine - dpc flags = "
|
||||
"0x%lx\n", ha->host_no, __func__, ha->dpc_flags));
|
||||
queue_work(ha->dpc_thread, &ha->dpc_work);
|
||||
DEBUG2(printk("scsi%ld: %s: scheduling dpc routine - dpc "
|
||||
"flags = 0x%lx\n",
|
||||
ha->host_no, __func__, ha->dpc_flags));
|
||||
queue_work(ha->dpc_thread, &ha->dpc_work);
|
||||
}
|
||||
}
|
||||
|
||||
static int qla4xxx_host_get_param(struct Scsi_Host *shost,
|
||||
|
|
Loading…
Reference in a new issue