[SCSI] scsi_eh_prep_cmnd should save scmd->underflow
This patch (as1116) fixes a bug in scsi_eh_prep_cmnd() and scsi_eh_restore_cmnd(). These routines are supposed to save any values they change and restore them later, but someone forgot to save & restore scmd->underflow. This fixes part of the problem reported in Bugzilla #9638. [jejb: fix up rejections around DIF/DIX] Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
committed by
James Bottomley
parent
af55ff675a
commit
12265709ac
@@ -667,6 +667,7 @@ void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses,
|
|||||||
ses->sdb = scmd->sdb;
|
ses->sdb = scmd->sdb;
|
||||||
ses->next_rq = scmd->request->next_rq;
|
ses->next_rq = scmd->request->next_rq;
|
||||||
ses->result = scmd->result;
|
ses->result = scmd->result;
|
||||||
|
ses->underflow = scmd->underflow;
|
||||||
ses->prot_op = scmd->prot_op;
|
ses->prot_op = scmd->prot_op;
|
||||||
|
|
||||||
scmd->prot_op = SCSI_PROT_NORMAL;
|
scmd->prot_op = SCSI_PROT_NORMAL;
|
||||||
@@ -727,6 +728,7 @@ void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses)
|
|||||||
scmd->sdb = ses->sdb;
|
scmd->sdb = ses->sdb;
|
||||||
scmd->request->next_rq = ses->next_rq;
|
scmd->request->next_rq = ses->next_rq;
|
||||||
scmd->result = ses->result;
|
scmd->result = ses->result;
|
||||||
|
scmd->underflow = ses->underflow;
|
||||||
scmd->prot_op = ses->prot_op;
|
scmd->prot_op = ses->prot_op;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(scsi_eh_restore_cmnd);
|
EXPORT_SYMBOL(scsi_eh_restore_cmnd);
|
||||||
|
@@ -74,6 +74,7 @@ struct scsi_eh_save {
|
|||||||
/* saved state */
|
/* saved state */
|
||||||
int result;
|
int result;
|
||||||
enum dma_data_direction data_direction;
|
enum dma_data_direction data_direction;
|
||||||
|
unsigned underflow;
|
||||||
unsigned char cmd_len;
|
unsigned char cmd_len;
|
||||||
unsigned char prot_op;
|
unsigned char prot_op;
|
||||||
unsigned char *cmnd;
|
unsigned char *cmnd;
|
||||||
|
Reference in New Issue
Block a user