diff options
| -rw-r--r-- | drivers/scsi/scsi.c | 18 | ||||
| -rw-r--r-- | include/scsi/scsi_cmnd.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index 73994e2ac2cb..dae4f08adde0 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c | |||
| @@ -720,6 +720,24 @@ void scsi_init_cmd_from_req(struct scsi_cmnd *cmd, struct scsi_request *sreq) | |||
| 720 | static DEFINE_PER_CPU(struct list_head, scsi_done_q); | 720 | static DEFINE_PER_CPU(struct list_head, scsi_done_q); |
| 721 | 721 | ||
| 722 | /** | 722 | /** |
| 723 | * scsi_req_abort_cmd -- Request command recovery for the specified command | ||
| 724 | * cmd: pointer to the SCSI command of interest | ||
| 725 | * | ||
| 726 | * This function requests that SCSI Core start recovery for the | ||
| 727 | * command by deleting the timer and adding the command to the eh | ||
| 728 | * queue. It can be called by either LLDDs or SCSI Core. LLDDs who | ||
| 729 | * implement their own error recovery MAY ignore the timeout event if | ||
| 730 | * they generated scsi_req_abort_cmd. | ||
| 731 | */ | ||
| 732 | void scsi_req_abort_cmd(struct scsi_cmnd *cmd) | ||
| 733 | { | ||
| 734 | if (!scsi_delete_timer(cmd)) | ||
| 735 | return; | ||
| 736 | scsi_times_out(cmd); | ||
| 737 | } | ||
| 738 | EXPORT_SYMBOL(scsi_req_abort_cmd); | ||
| 739 | |||
| 740 | /** | ||
| 723 | * scsi_done - Enqueue the finished SCSI command into the done queue. | 741 | * scsi_done - Enqueue the finished SCSI command into the done queue. |
| 724 | * @cmd: The SCSI Command for which a low-level device driver (LLDD) gives | 742 | * @cmd: The SCSI Command for which a low-level device driver (LLDD) gives |
| 725 | * ownership back to SCSI Core -- i.e. the LLDD has finished with it. | 743 | * ownership back to SCSI Core -- i.e. the LLDD has finished with it. |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 1ace1b9fe537..88c6c4da6c05 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
| @@ -151,5 +151,6 @@ extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t); | |||
| 151 | extern void scsi_put_command(struct scsi_cmnd *); | 151 | extern void scsi_put_command(struct scsi_cmnd *); |
| 152 | extern void scsi_io_completion(struct scsi_cmnd *, unsigned int, unsigned int); | 152 | extern void scsi_io_completion(struct scsi_cmnd *, unsigned int, unsigned int); |
| 153 | extern void scsi_finish_command(struct scsi_cmnd *cmd); | 153 | extern void scsi_finish_command(struct scsi_cmnd *cmd); |
| 154 | extern void scsi_req_abort_cmd(struct scsi_cmnd *cmd); | ||
| 154 | 155 | ||
| 155 | #endif /* _SCSI_SCSI_CMND_H */ | 156 | #endif /* _SCSI_SCSI_CMND_H */ |
