diff options
| -rw-r--r-- | drivers/scsi/scsi_error.c | 20 | ||||
| -rw-r--r-- | include/scsi/scsi_cmnd.h | 2 |
2 files changed, 11 insertions, 11 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index cbe38e5e7955..7e957918f33f 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
| @@ -131,7 +131,7 @@ scmd_eh_abort_handler(struct work_struct *work) | |||
| 131 | "aborting command %p\n", scmd)); | 131 | "aborting command %p\n", scmd)); |
| 132 | rtn = scsi_try_to_abort_cmd(sdev->host->hostt, scmd); | 132 | rtn = scsi_try_to_abort_cmd(sdev->host->hostt, scmd); |
| 133 | if (rtn == SUCCESS) { | 133 | if (rtn == SUCCESS) { |
| 134 | scmd->result |= DID_TIME_OUT << 16; | 134 | set_host_byte(scmd, DID_TIME_OUT); |
| 135 | if (scsi_host_eh_past_deadline(sdev->host)) { | 135 | if (scsi_host_eh_past_deadline(sdev->host)) { |
| 136 | SCSI_LOG_ERROR_RECOVERY(3, | 136 | SCSI_LOG_ERROR_RECOVERY(3, |
| 137 | scmd_printk(KERN_INFO, scmd, | 137 | scmd_printk(KERN_INFO, scmd, |
| @@ -167,7 +167,7 @@ scmd_eh_abort_handler(struct work_struct *work) | |||
| 167 | scmd_printk(KERN_WARNING, scmd, | 167 | scmd_printk(KERN_WARNING, scmd, |
| 168 | "scmd %p terminate " | 168 | "scmd %p terminate " |
| 169 | "aborted command\n", scmd)); | 169 | "aborted command\n", scmd)); |
| 170 | scmd->result |= DID_TIME_OUT << 16; | 170 | set_host_byte(scmd, DID_TIME_OUT); |
| 171 | scsi_finish_command(scmd); | 171 | scsi_finish_command(scmd); |
| 172 | } | 172 | } |
| 173 | } | 173 | } |
| @@ -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 | scmd->result |= DID_TIME_OUT << 16; | 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 | } |
| @@ -1777,7 +1777,7 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd) | |||
| 1777 | break; | 1777 | break; |
| 1778 | case DID_ABORT: | 1778 | case DID_ABORT: |
| 1779 | if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) { | 1779 | if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) { |
| 1780 | scmd->result |= DID_TIME_OUT << 16; | 1780 | set_host_byte(scmd, DID_TIME_OUT); |
| 1781 | return SUCCESS; | 1781 | return SUCCESS; |
| 1782 | } | 1782 | } |
| 1783 | case DID_NO_CONNECT: | 1783 | case DID_NO_CONNECT: |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 42ed789ebafc..e0ae71098144 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
| @@ -318,7 +318,7 @@ static inline void set_driver_byte(struct scsi_cmnd *cmd, char status) | |||
| 318 | 318 | ||
| 319 | static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd) | 319 | static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd) |
| 320 | { | 320 | { |
| 321 | unsigned int xfer_len = blk_rq_bytes(scmd->request); | 321 | unsigned int xfer_len = scsi_out(scmd)->length; |
| 322 | unsigned int prot_op = scsi_get_prot_op(scmd); | 322 | unsigned int prot_op = scsi_get_prot_op(scmd); |
| 323 | unsigned int sector_size = scmd->device->sector_size; | 323 | unsigned int sector_size = scmd->device->sector_size; |
| 324 | 324 | ||
