[SCSI] libsas: Start I_T recovery if ABORT TASK fails
The EH should fall into I_T recovery (and potentially stronger remedies) if ABORT TASK fails. Signed-off-by: Alexis Bruemmer <alexisb@us.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
Родитель
6b0efb8516
Коммит
02cd743bb3
|
@ -281,6 +281,7 @@ enum task_disposition {
|
|||
TASK_IS_ABORTED,
|
||||
TASK_IS_AT_LU,
|
||||
TASK_IS_NOT_AT_LU,
|
||||
TASK_ABORT_FAILED,
|
||||
};
|
||||
|
||||
static enum task_disposition sas_scsi_find_task(struct sas_task *task)
|
||||
|
@ -331,15 +332,21 @@ static enum task_disposition sas_scsi_find_task(struct sas_task *task)
|
|||
SAS_DPRINTK("%s: querying task 0x%p\n",
|
||||
__FUNCTION__, task);
|
||||
res = si->dft->lldd_query_task(task);
|
||||
if (res == TMF_RESP_FUNC_SUCC) {
|
||||
switch (res) {
|
||||
case TMF_RESP_FUNC_SUCC:
|
||||
SAS_DPRINTK("%s: task 0x%p at LU\n",
|
||||
__FUNCTION__, task);
|
||||
return TASK_IS_AT_LU;
|
||||
} else if (res == TMF_RESP_FUNC_COMPLETE) {
|
||||
case TMF_RESP_FUNC_COMPLETE:
|
||||
SAS_DPRINTK("%s: task 0x%p not at LU\n",
|
||||
__FUNCTION__, task);
|
||||
return TASK_IS_NOT_AT_LU;
|
||||
}
|
||||
case TMF_RESP_FUNC_FAILED:
|
||||
SAS_DPRINTK("%s: task 0x%p failed to abort\n",
|
||||
__FUNCTION__, task);
|
||||
return TASK_ABORT_FAILED;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return res;
|
||||
|
@ -475,6 +482,7 @@ Again:
|
|||
}
|
||||
/* fallthrough */
|
||||
case TASK_IS_NOT_AT_LU:
|
||||
case TASK_ABORT_FAILED:
|
||||
SAS_DPRINTK("task 0x%p is not at LU: I_T recover\n",
|
||||
task);
|
||||
tmf_resp = sas_recover_I_T(task->dev);
|
||||
|
|
Загрузка…
Ссылка в новой задаче