diff options
author | Kukjin Kim <kgene.kim@samsung.com> | 2014-05-30 13:36:49 -0400 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2014-05-30 13:36:49 -0400 |
commit | fced6dee29f6fb143fe16ea90331176ff77e6120 (patch) | |
tree | 5b6e57e7a757adc2a6518ce291a4d2914397b917 /drivers/scsi/scsi_error.c | |
parent | bfed1074f213051e94648bfad0d0611a16d81366 (diff) | |
parent | be1f7c8d7e2bc8b8c76846aa6f276e8d2ef8975a (diff) |
Merge branch 'v3.16-next/cleanup-samsung' into v3.16-next/platform-exynos
Diffstat (limited to 'drivers/scsi/scsi_error.c')
-rw-r--r-- | drivers/scsi/scsi_error.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 771c16bfdbac..f17aa7aa7879 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
@@ -189,6 +189,7 @@ scsi_abort_command(struct scsi_cmnd *scmd) | |||
189 | /* | 189 | /* |
190 | * Retry after abort failed, escalate to next level. | 190 | * Retry after abort failed, escalate to next level. |
191 | */ | 191 | */ |
192 | scmd->eh_eflags &= ~SCSI_EH_ABORT_SCHEDULED; | ||
192 | SCSI_LOG_ERROR_RECOVERY(3, | 193 | SCSI_LOG_ERROR_RECOVERY(3, |
193 | scmd_printk(KERN_INFO, scmd, | 194 | scmd_printk(KERN_INFO, scmd, |
194 | "scmd %p previous abort failed\n", scmd)); | 195 | "scmd %p previous abort failed\n", scmd)); |
@@ -920,10 +921,12 @@ void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses, | |||
920 | ses->prot_op = scmd->prot_op; | 921 | ses->prot_op = scmd->prot_op; |
921 | 922 | ||
922 | scmd->prot_op = SCSI_PROT_NORMAL; | 923 | scmd->prot_op = SCSI_PROT_NORMAL; |
924 | scmd->eh_eflags = 0; | ||
923 | scmd->cmnd = ses->eh_cmnd; | 925 | scmd->cmnd = ses->eh_cmnd; |
924 | memset(scmd->cmnd, 0, BLK_MAX_CDB); | 926 | memset(scmd->cmnd, 0, BLK_MAX_CDB); |
925 | memset(&scmd->sdb, 0, sizeof(scmd->sdb)); | 927 | memset(&scmd->sdb, 0, sizeof(scmd->sdb)); |
926 | scmd->request->next_rq = NULL; | 928 | scmd->request->next_rq = NULL; |
929 | scmd->result = 0; | ||
927 | 930 | ||
928 | if (sense_bytes) { | 931 | if (sense_bytes) { |
929 | scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE, | 932 | scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE, |
@@ -1157,6 +1160,15 @@ int scsi_eh_get_sense(struct list_head *work_q, | |||
1157 | __func__)); | 1160 | __func__)); |
1158 | break; | 1161 | break; |
1159 | } | 1162 | } |
1163 | if (status_byte(scmd->result) != CHECK_CONDITION) | ||
1164 | /* | ||
1165 | * don't request sense if there's no check condition | ||
1166 | * status because the error we're processing isn't one | ||
1167 | * that has a sense code (and some devices get | ||
1168 | * confused by sense requests out of the blue) | ||
1169 | */ | ||
1170 | continue; | ||
1171 | |||
1160 | SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd, | 1172 | SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd, |
1161 | "%s: requesting sense\n", | 1173 | "%s: requesting sense\n", |
1162 | current->comm)); | 1174 | current->comm)); |