diff options
| author | Hannes Reinecke <hare@suse.de> | 2014-06-13 08:01:45 -0400 |
|---|---|---|
| committer | Christoph Hellwig <hch@lst.de> | 2014-06-24 11:00:12 -0400 |
| commit | a33c070bced8b283e22e8dbae35177a033b810bf (patch) | |
| tree | c10c10d581480bab2376f9529f13aafaea81187e | |
| parent | 8922a908908ff947f1f211e07e2e97f1169ad3cb (diff) | |
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>
| -rw-r--r-- | drivers/scsi/scsi_error.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 55ecf70fe3d9..7e957918f33f 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
| @@ -287,15 +287,15 @@ enum blk_eh_timer_return scsi_times_out(struct request *req) | |||
| 287 | else if (host->hostt->eh_timed_out) | 287 | else if (host->hostt->eh_timed_out) |
| 288 | rtn = host->hostt->eh_timed_out(scmd); | 288 | rtn = host->hostt->eh_timed_out(scmd); |
| 289 | 289 | ||
| 290 | if (rtn == BLK_EH_NOT_HANDLED && !host->hostt->no_async_abort) | 290 | if (rtn == BLK_EH_NOT_HANDLED) { |
| 291 | if (scsi_abort_command(scmd) == SUCCESS) | 291 | if (!host->hostt->no_async_abort && |
| 292 | scsi_abort_command(scmd) == SUCCESS) | ||
| 292 | return BLK_EH_NOT_HANDLED; | 293 | return BLK_EH_NOT_HANDLED; |
| 293 | 294 | ||
| 294 | set_host_byte(scmd, DID_TIME_OUT); | 295 | set_host_byte(scmd, DID_TIME_OUT); |
| 295 | 296 | if (!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD)) | |
| 296 | if (unlikely(rtn == BLK_EH_NOT_HANDLED && | 297 | rtn = BLK_EH_HANDLED; |
| 297 | !scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) | 298 | } |
| 298 | rtn = BLK_EH_HANDLED; | ||
| 299 | 299 | ||
| 300 | return rtn; | 300 | return rtn; |
| 301 | } | 301 | } |
