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)  static DEFINE_PER_CPU(struct list_head, scsi_done_q);  /** + * scsi_req_abort_cmd -- Request command recovery for the specified command + * cmd: pointer to the SCSI command of interest + * + * This function requests that SCSI Core start recovery for the + * command by deleting the timer and adding the command to the eh + * queue.  It can be called by either LLDDs or SCSI Core.  LLDDs who + * implement their own error recovery MAY ignore the timeout event if + * they generated scsi_req_abort_cmd. + */ +void scsi_req_abort_cmd(struct scsi_cmnd *cmd) +{ +	if (!scsi_delete_timer(cmd)) +		return; +	scsi_times_out(cmd); +} +EXPORT_SYMBOL(scsi_req_abort_cmd); + +/**   * scsi_done - Enqueue the finished SCSI command into the done queue.   * @cmd: The SCSI Command for which a low-level device driver (LLDD) gives   * 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);  extern void scsi_put_command(struct scsi_cmnd *);  extern void scsi_io_completion(struct scsi_cmnd *, unsigned int, unsigned int);  extern void scsi_finish_command(struct scsi_cmnd *cmd); +extern void scsi_req_abort_cmd(struct scsi_cmnd *cmd);  #endif /* _SCSI_SCSI_CMND_H */  | 
