提交 568d303b 编写于 作者: M Mike Christie 提交者: James Bottomley

[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: NMike Christie <michaelc@cs.wisc.edu>
Cc: David Somayajulu <david.somayajulu@qlogic.com>
Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
上级 bd976f62
无相关合并请求
......@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册