scsi_error: set DID_TIME_OUT correctly
Any callbacks in scsi_timeout_out() might return BLK_EH_RESET_TIMER, in which case we should leave the result alone and not set DID_TIME_OUT, as the command didn't actually timeout. Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Ewan D. Milne <emilne@redhat.com>
This commit is contained in:
Родитель
8922a90890
Коммит
a33c070bce
|
@ -287,15 +287,15 @@ enum blk_eh_timer_return scsi_times_out(struct request *req)
|
|||
else if (host->hostt->eh_timed_out)
|
||||
rtn = host->hostt->eh_timed_out(scmd);
|
||||
|
||||
if (rtn == BLK_EH_NOT_HANDLED && !host->hostt->no_async_abort)
|
||||
if (scsi_abort_command(scmd) == SUCCESS)
|
||||
if (rtn == BLK_EH_NOT_HANDLED) {
|
||||
if (!host->hostt->no_async_abort &&
|
||||
scsi_abort_command(scmd) == SUCCESS)
|
||||
return BLK_EH_NOT_HANDLED;
|
||||
|
||||
set_host_byte(scmd, DID_TIME_OUT);
|
||||
|
||||
if (unlikely(rtn == BLK_EH_NOT_HANDLED &&
|
||||
!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD)))
|
||||
rtn = BLK_EH_HANDLED;
|
||||
set_host_byte(scmd, DID_TIME_OUT);
|
||||
if (!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))
|
||||
rtn = BLK_EH_HANDLED;
|
||||
}
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче