[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:
parent
6b0efb8516
commit
02cd743bb3
@ -281,6 +281,7 @@ enum task_disposition {
|
|||||||
TASK_IS_ABORTED,
|
TASK_IS_ABORTED,
|
||||||
TASK_IS_AT_LU,
|
TASK_IS_AT_LU,
|
||||||
TASK_IS_NOT_AT_LU,
|
TASK_IS_NOT_AT_LU,
|
||||||
|
TASK_ABORT_FAILED,
|
||||||
};
|
};
|
||||||
|
|
||||||
static enum task_disposition sas_scsi_find_task(struct sas_task *task)
|
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",
|
SAS_DPRINTK("%s: querying task 0x%p\n",
|
||||||
__FUNCTION__, task);
|
__FUNCTION__, task);
|
||||||
res = si->dft->lldd_query_task(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",
|
SAS_DPRINTK("%s: task 0x%p at LU\n",
|
||||||
__FUNCTION__, task);
|
__FUNCTION__, task);
|
||||||
return TASK_IS_AT_LU;
|
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",
|
SAS_DPRINTK("%s: task 0x%p not at LU\n",
|
||||||
__FUNCTION__, task);
|
__FUNCTION__, task);
|
||||||
return TASK_IS_NOT_AT_LU;
|
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;
|
return res;
|
||||||
@ -475,6 +482,7 @@ Again:
|
|||||||
}
|
}
|
||||||
/* fallthrough */
|
/* fallthrough */
|
||||||
case TASK_IS_NOT_AT_LU:
|
case TASK_IS_NOT_AT_LU:
|
||||||
|
case TASK_ABORT_FAILED:
|
||||||
SAS_DPRINTK("task 0x%p is not at LU: I_T recover\n",
|
SAS_DPRINTK("task 0x%p is not at LU: I_T recover\n",
|
||||||
task);
|
task);
|
||||||
tmf_resp = sas_recover_I_T(task->dev);
|
tmf_resp = sas_recover_I_T(task->dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user