aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_error.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/scsi_error.c')
-rw-r--r--drivers/scsi/scsi_error.c24
1 files changed, 7 insertions, 17 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 1de30eb83bb0..824b8fc03ce5 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -320,19 +320,11 @@ static int scsi_check_sense(struct scsi_cmnd *scmd)
320 "changed. The Linux SCSI layer does not " 320 "changed. The Linux SCSI layer does not "
321 "automatically adjust these parameters.\n"); 321 "automatically adjust these parameters.\n");
322 322
323 if (scmd->request->cmd_flags & REQ_HARDBARRIER) 323 /*
324 /* 324 * Pass the UA upwards for a determination in the completion
325 * barrier requests should always retry on UA 325 * functions.
326 * otherwise block will get a spurious error 326 */
327 */ 327 return SUCCESS;
328 return NEEDS_RETRY;
329 else
330 /*
331 * for normal (non barrier) commands, pass the
332 * UA upwards for a determination in the
333 * completion functions
334 */
335 return SUCCESS;
336 328
337 /* these three are not supported */ 329 /* these three are not supported */
338 case COPY_ABORTED: 330 case COPY_ABORTED:
@@ -781,17 +773,15 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
781 struct Scsi_Host *shost = sdev->host; 773 struct Scsi_Host *shost = sdev->host;
782 DECLARE_COMPLETION_ONSTACK(done); 774 DECLARE_COMPLETION_ONSTACK(done);
783 unsigned long timeleft; 775 unsigned long timeleft;
784 unsigned long flags;
785 struct scsi_eh_save ses; 776 struct scsi_eh_save ses;
786 int rtn; 777 int rtn;
787 778
788 scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes); 779 scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes);
789 shost->eh_action = &done; 780 shost->eh_action = &done;
790 781
791 spin_lock_irqsave(shost->host_lock, flags);
792 scsi_log_send(scmd); 782 scsi_log_send(scmd);
793 shost->hostt->queuecommand(scmd, scsi_eh_done); 783 scmd->scsi_done = scsi_eh_done;
794 spin_unlock_irqrestore(shost->host_lock, flags); 784 shost->hostt->queuecommand(shost, scmd);
795 785
796 timeleft = wait_for_completion_timeout(&done, timeout); 786 timeleft = wait_for_completion_timeout(&done, timeout);
797 787