mirror of https://gitee.com/openkylin/linux.git
[SCSI] scsi_error: Escalate to LUN reset if abort fails
If a command abort fails there is a fair chance that all other aborts will be failing, too. So we should be calling LUN reset directly after the first failed abort and skip aborting the remaining commands. Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
b45620229d
commit
6fd046f960
|
@ -1192,18 +1192,20 @@ static int scsi_eh_abort_cmds(struct list_head *work_q,
|
|||
"0x%p\n", current->comm,
|
||||
scmd));
|
||||
rtn = scsi_try_to_abort_cmd(shost->hostt, scmd);
|
||||
if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
|
||||
scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD;
|
||||
if (rtn == FAST_IO_FAIL)
|
||||
scsi_eh_finish_cmd(scmd, done_q);
|
||||
else
|
||||
list_move_tail(&scmd->eh_entry, &check_list);
|
||||
} else
|
||||
if (rtn == FAILED) {
|
||||
SCSI_LOG_ERROR_RECOVERY(3, printk("%s: aborting"
|
||||
" cmd failed:"
|
||||
"0x%p\n",
|
||||
current->comm,
|
||||
scmd));
|
||||
list_splice_init(&check_list, work_q);
|
||||
return list_empty(work_q);
|
||||
}
|
||||
scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD;
|
||||
if (rtn == FAST_IO_FAIL)
|
||||
scsi_eh_finish_cmd(scmd, done_q);
|
||||
else
|
||||
list_move_tail(&scmd->eh_entry, &check_list);
|
||||
}
|
||||
|
||||
return scsi_eh_test_devices(&check_list, work_q, done_q, 0);
|
||||
|
|
Loading…
Reference in New Issue