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:
parent
8922a90890
commit
a33c070bce
@ -287,15 +287,15 @@ enum blk_eh_timer_return scsi_times_out(struct request *req)
|
|||||||
else if (host->hostt->eh_timed_out)
|
else if (host->hostt->eh_timed_out)
|
||||||
rtn = host->hostt->eh_timed_out(scmd);
|
rtn = host->hostt->eh_timed_out(scmd);
|
||||||
|
|
||||||
if (rtn == BLK_EH_NOT_HANDLED && !host->hostt->no_async_abort)
|
if (rtn == BLK_EH_NOT_HANDLED) {
|
||||||
if (scsi_abort_command(scmd) == SUCCESS)
|
if (!host->hostt->no_async_abort &&
|
||||||
|
scsi_abort_command(scmd) == SUCCESS)
|
||||||
return BLK_EH_NOT_HANDLED;
|
return BLK_EH_NOT_HANDLED;
|
||||||
|
|
||||||
set_host_byte(scmd, DID_TIME_OUT);
|
set_host_byte(scmd, DID_TIME_OUT);
|
||||||
|
if (!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))
|
||||||
if (unlikely(rtn == BLK_EH_NOT_HANDLED &&
|
rtn = BLK_EH_HANDLED;
|
||||||
!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD)))
|
}
|
||||||
rtn = BLK_EH_HANDLED;
|
|
||||||
|
|
||||||
return rtn;
|
return rtn;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user