diff options
Diffstat (limited to 'drivers/scsi/scsi.c')
-rw-r--r-- | drivers/scsi/scsi.c | 48 |
1 files changed, 1 insertions, 47 deletions
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index 4c1e31334765..a691dda40d2c 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c | |||
@@ -368,7 +368,7 @@ void scsi_log_send(struct scsi_cmnd *cmd) | |||
368 | if (level > 3) { | 368 | if (level > 3) { |
369 | printk(KERN_INFO "buffer = 0x%p, bufflen = %d," | 369 | printk(KERN_INFO "buffer = 0x%p, bufflen = %d," |
370 | " done = 0x%p, queuecommand 0x%p\n", | 370 | " done = 0x%p, queuecommand 0x%p\n", |
371 | cmd->request_buffer, cmd->request_bufflen, | 371 | scsi_sglist(cmd), scsi_bufflen(cmd), |
372 | cmd->done, | 372 | cmd->done, |
373 | cmd->device->host->hostt->queuecommand); | 373 | cmd->device->host->hostt->queuecommand); |
374 | 374 | ||
@@ -1016,52 +1016,6 @@ struct scsi_device *scsi_device_lookup(struct Scsi_Host *shost, | |||
1016 | } | 1016 | } |
1017 | EXPORT_SYMBOL(scsi_device_lookup); | 1017 | EXPORT_SYMBOL(scsi_device_lookup); |
1018 | 1018 | ||
1019 | /** | ||
1020 | * scsi_device_cancel - cancel outstanding IO to this device | ||
1021 | * @sdev: Pointer to struct scsi_device | ||
1022 | * @recovery: Boolean instructing function to recover device or not. | ||
1023 | * | ||
1024 | **/ | ||
1025 | int scsi_device_cancel(struct scsi_device *sdev, int recovery) | ||
1026 | { | ||
1027 | struct scsi_cmnd *scmd; | ||
1028 | LIST_HEAD(active_list); | ||
1029 | struct list_head *lh, *lh_sf; | ||
1030 | unsigned long flags; | ||
1031 | |||
1032 | scsi_device_set_state(sdev, SDEV_CANCEL); | ||
1033 | |||
1034 | spin_lock_irqsave(&sdev->list_lock, flags); | ||
1035 | list_for_each_entry(scmd, &sdev->cmd_list, list) { | ||
1036 | if (scmd->request) { | ||
1037 | /* | ||
1038 | * If we are unable to remove the timer, it means | ||
1039 | * that the command has already timed out or | ||
1040 | * finished. | ||
1041 | */ | ||
1042 | if (!scsi_delete_timer(scmd)) | ||
1043 | continue; | ||
1044 | list_add_tail(&scmd->eh_entry, &active_list); | ||
1045 | } | ||
1046 | } | ||
1047 | spin_unlock_irqrestore(&sdev->list_lock, flags); | ||
1048 | |||
1049 | if (!list_empty(&active_list)) { | ||
1050 | list_for_each_safe(lh, lh_sf, &active_list) { | ||
1051 | scmd = list_entry(lh, struct scsi_cmnd, eh_entry); | ||
1052 | list_del_init(lh); | ||
1053 | if (recovery && | ||
1054 | !scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD)) { | ||
1055 | scmd->result = (DID_ABORT << 16); | ||
1056 | scsi_finish_command(scmd); | ||
1057 | } | ||
1058 | } | ||
1059 | } | ||
1060 | |||
1061 | return 0; | ||
1062 | } | ||
1063 | EXPORT_SYMBOL(scsi_device_cancel); | ||
1064 | |||
1065 | MODULE_DESCRIPTION("SCSI core"); | 1019 | MODULE_DESCRIPTION("SCSI core"); |
1066 | MODULE_LICENSE("GPL"); | 1020 | MODULE_LICENSE("GPL"); |
1067 | 1021 | ||