mirror of https://gitee.com/openkylin/linux.git
[SCSI] aha152x: stop poking at saved scsi_cmnd members
Stop poking into the old_ & co scsi_cmnd fields that should only be used in the EH code. Untested, but this is required to move ahead with the EH fixes. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
4e73ea7b02
commit
5e13cdfa5b
|
@ -551,6 +551,11 @@ struct aha152x_hostdata {
|
|||
struct aha152x_scdata {
|
||||
Scsi_Cmnd *next; /* next sc in queue */
|
||||
struct semaphore *sem; /* semaphore to block on */
|
||||
unsigned char cmd_len;
|
||||
unsigned char cmnd[MAX_COMMAND_SIZE];
|
||||
unsigned short use_sg;
|
||||
unsigned request_bufflen;
|
||||
void *request_buffer;
|
||||
};
|
||||
|
||||
|
||||
|
@ -1006,11 +1011,20 @@ static int aha152x_internal_queue(Scsi_Cmnd *SCpnt, struct semaphore *sem, int p
|
|||
return FAILED;
|
||||
}
|
||||
} else {
|
||||
struct aha152x_scdata *sc;
|
||||
|
||||
SCpnt->host_scribble = kmalloc(sizeof(struct aha152x_scdata), GFP_ATOMIC);
|
||||
if(SCpnt->host_scribble==0) {
|
||||
printk(ERR_LEAD "allocation failed\n", CMDINFO(SCpnt));
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
sc = SCDATA(SCpnt);
|
||||
memcpy(sc->cmnd, SCpnt->cmnd, sizeof(sc->cmnd));
|
||||
sc->request_buffer = SCpnt->request_buffer;
|
||||
sc->request_bufflen = SCpnt->request_bufflen;
|
||||
sc->use_sg = SCpnt->use_sg;
|
||||
sc->cmd_len = SCpnt->cmd_len;
|
||||
}
|
||||
|
||||
SCNEXT(SCpnt) = NULL;
|
||||
|
@ -1565,6 +1579,9 @@ static void busfree_run(struct Scsi_Host *shpnt)
|
|||
#endif
|
||||
|
||||
if(DONE_SC->SCp.phase & check_condition) {
|
||||
struct scsi_cmnd *cmd = HOSTDATA(shpnt)->done_SC;
|
||||
struct aha152x_scdata *sc = SCDATA(cmd);
|
||||
|
||||
#if 0
|
||||
if(HOSTDATA(shpnt)->debug & debug_eh) {
|
||||
printk(ERR_LEAD "received sense: ", CMDINFO(DONE_SC));
|
||||
|
@ -1573,13 +1590,13 @@ static void busfree_run(struct Scsi_Host *shpnt)
|
|||
#endif
|
||||
|
||||
/* restore old command */
|
||||
memcpy((void *) DONE_SC->cmnd, (void *) DONE_SC->data_cmnd, sizeof(DONE_SC->data_cmnd));
|
||||
DONE_SC->request_buffer = DONE_SC->buffer;
|
||||
DONE_SC->request_bufflen = DONE_SC->bufflen;
|
||||
DONE_SC->use_sg = DONE_SC->old_use_sg;
|
||||
DONE_SC->cmd_len = DONE_SC->old_cmd_len;
|
||||
memcpy(cmd->cmnd, sc->cmnd, sizeof(sc->cmnd));
|
||||
cmd->request_buffer = sc->request_buffer;
|
||||
cmd->request_bufflen = sc->request_bufflen;
|
||||
cmd->use_sg = sc->use_sg;
|
||||
cmd->cmd_len = sc->cmd_len;
|
||||
|
||||
DONE_SC->SCp.Status = 0x02;
|
||||
cmd->SCp.Status = 0x02;
|
||||
|
||||
HOSTDATA(shpnt)->commands--;
|
||||
if (!HOSTDATA(shpnt)->commands)
|
||||
|
|
Loading…
Reference in New Issue