Commit 5e13cdfa authored by Christoph Hellwig's avatar Christoph Hellwig Committed by James Bottomley

[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: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 4e73ea7b
...@@ -551,6 +551,11 @@ struct aha152x_hostdata { ...@@ -551,6 +551,11 @@ struct aha152x_hostdata {
struct aha152x_scdata { struct aha152x_scdata {
Scsi_Cmnd *next; /* next sc in queue */ Scsi_Cmnd *next; /* next sc in queue */
struct semaphore *sem; /* semaphore to block on */ 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 ...@@ -1006,11 +1011,20 @@ static int aha152x_internal_queue(Scsi_Cmnd *SCpnt, struct semaphore *sem, int p
return FAILED; return FAILED;
} }
} else { } else {
struct aha152x_scdata *sc;
SCpnt->host_scribble = kmalloc(sizeof(struct aha152x_scdata), GFP_ATOMIC); SCpnt->host_scribble = kmalloc(sizeof(struct aha152x_scdata), GFP_ATOMIC);
if(SCpnt->host_scribble==0) { if(SCpnt->host_scribble==0) {
printk(ERR_LEAD "allocation failed\n", CMDINFO(SCpnt)); printk(ERR_LEAD "allocation failed\n", CMDINFO(SCpnt));
return FAILED; 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; SCNEXT(SCpnt) = NULL;
...@@ -1565,6 +1579,9 @@ static void busfree_run(struct Scsi_Host *shpnt) ...@@ -1565,6 +1579,9 @@ static void busfree_run(struct Scsi_Host *shpnt)
#endif #endif
if(DONE_SC->SCp.phase & check_condition) { if(DONE_SC->SCp.phase & check_condition) {
struct scsi_cmnd *cmd = HOSTDATA(shpnt)->done_SC;
struct aha152x_scdata *sc = SCDATA(cmd);
#if 0 #if 0
if(HOSTDATA(shpnt)->debug & debug_eh) { if(HOSTDATA(shpnt)->debug & debug_eh) {
printk(ERR_LEAD "received sense: ", CMDINFO(DONE_SC)); printk(ERR_LEAD "received sense: ", CMDINFO(DONE_SC));
...@@ -1573,13 +1590,13 @@ static void busfree_run(struct Scsi_Host *shpnt) ...@@ -1573,13 +1590,13 @@ static void busfree_run(struct Scsi_Host *shpnt)
#endif #endif
/* restore old command */ /* restore old command */
memcpy((void *) DONE_SC->cmnd, (void *) DONE_SC->data_cmnd, sizeof(DONE_SC->data_cmnd)); memcpy(cmd->cmnd, sc->cmnd, sizeof(sc->cmnd));
DONE_SC->request_buffer = DONE_SC->buffer; cmd->request_buffer = sc->request_buffer;
DONE_SC->request_bufflen = DONE_SC->bufflen; cmd->request_bufflen = sc->request_bufflen;
DONE_SC->use_sg = DONE_SC->old_use_sg; cmd->use_sg = sc->use_sg;
DONE_SC->cmd_len = DONE_SC->old_cmd_len; cmd->cmd_len = sc->cmd_len;
DONE_SC->SCp.Status = 0x02; cmd->SCp.Status = 0x02;
HOSTDATA(shpnt)->commands--; HOSTDATA(shpnt)->commands--;
if (!HOSTDATA(shpnt)->commands) if (!HOSTDATA(shpnt)->commands)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment