|
@@ -957,9 +957,10 @@ static int scsi_eh_abort_cmds(struct list_head *work_q,
|
|
|
"0x%p\n", current->comm,
|
|
|
scmd));
|
|
|
rtn = scsi_try_to_abort_cmd(scmd);
|
|
|
- if (rtn == SUCCESS) {
|
|
|
+ if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
|
|
|
scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD;
|
|
|
if (!scsi_device_online(scmd->device) ||
|
|
|
+ rtn == FAST_IO_FAIL ||
|
|
|
!scsi_eh_tur(scmd)) {
|
|
|
scsi_eh_finish_cmd(scmd, done_q);
|
|
|
}
|
|
@@ -1086,8 +1087,9 @@ static int scsi_eh_bus_device_reset(struct Scsi_Host *shost,
|
|
|
" 0x%p\n", current->comm,
|
|
|
sdev));
|
|
|
rtn = scsi_try_bus_device_reset(bdr_scmd);
|
|
|
- if (rtn == SUCCESS) {
|
|
|
+ if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
|
|
|
if (!scsi_device_online(sdev) ||
|
|
|
+ rtn == FAST_IO_FAIL ||
|
|
|
!scsi_eh_tur(bdr_scmd)) {
|
|
|
list_for_each_entry_safe(scmd, next,
|
|
|
work_q, eh_entry) {
|
|
@@ -1150,10 +1152,11 @@ static int scsi_eh_target_reset(struct Scsi_Host *shost,
|
|
|
"to target %d\n",
|
|
|
current->comm, id));
|
|
|
rtn = scsi_try_target_reset(tgtr_scmd);
|
|
|
- if (rtn == SUCCESS) {
|
|
|
+ if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
|
|
|
list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
|
|
|
if (id == scmd_id(scmd))
|
|
|
if (!scsi_device_online(scmd->device) ||
|
|
|
+ rtn == FAST_IO_FAIL ||
|
|
|
!scsi_eh_tur(tgtr_scmd))
|
|
|
scsi_eh_finish_cmd(scmd,
|
|
|
done_q);
|
|
@@ -1209,10 +1212,11 @@ static int scsi_eh_bus_reset(struct Scsi_Host *shost,
|
|
|
" %d\n", current->comm,
|
|
|
channel));
|
|
|
rtn = scsi_try_bus_reset(chan_scmd);
|
|
|
- if (rtn == SUCCESS) {
|
|
|
+ if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
|
|
|
list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
|
|
|
if (channel == scmd_channel(scmd))
|
|
|
if (!scsi_device_online(scmd->device) ||
|
|
|
+ rtn == FAST_IO_FAIL ||
|
|
|
!scsi_eh_tur(scmd))
|
|
|
scsi_eh_finish_cmd(scmd,
|
|
|
done_q);
|
|
@@ -1246,9 +1250,10 @@ static int scsi_eh_host_reset(struct list_head *work_q,
|
|
|
, current->comm));
|
|
|
|
|
|
rtn = scsi_try_host_reset(scmd);
|
|
|
- if (rtn == SUCCESS) {
|
|
|
+ if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
|
|
|
list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
|
|
|
if (!scsi_device_online(scmd->device) ||
|
|
|
+ rtn == FAST_IO_FAIL ||
|
|
|
(!scsi_eh_try_stu(scmd) && !scsi_eh_tur(scmd)) ||
|
|
|
!scsi_eh_tur(scmd))
|
|
|
scsi_eh_finish_cmd(scmd, done_q);
|