diff options
author | Christoph Hellwig <hch@lst.de> | 2006-06-03 07:21:13 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-06-06 11:07:25 -0400 |
commit | 5d5ff44fe6775ccb922fd1f7d478b2ba9ca95068 (patch) | |
tree | d8569caefe1cb5ecced30929ef98d3e1fe642425 /drivers/block | |
parent | e4a082c7c1f9a7b11fece6918e7ee5519b39ac46 (diff) |
[SCSI] fix up request buffer reference in various scsi drivers
Various scsi drivers use scsi_cmnd.buffer and scsi_cmnd.bufflen in their
queuecommand functions. Those fields are internal storage for the
midlayer only and are used to restore the original payload after
request_buffer and request_bufflen have been overwritten for EH. Using
the buffer and bufflen fields means they do very broken things in error
handling.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/cciss_scsi.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c index 597c007fe81b..afdff32f6724 100644 --- a/drivers/block/cciss_scsi.c +++ b/drivers/block/cciss_scsi.c | |||
@@ -578,7 +578,7 @@ complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag) | |||
578 | 578 | ||
579 | if (cmd->use_sg) { | 579 | if (cmd->use_sg) { |
580 | pci_unmap_sg(ctlr->pdev, | 580 | pci_unmap_sg(ctlr->pdev, |
581 | cmd->buffer, cmd->use_sg, | 581 | cmd->request_buffer, cmd->use_sg, |
582 | cmd->sc_data_direction); | 582 | cmd->sc_data_direction); |
583 | } | 583 | } |
584 | else if (cmd->request_bufflen) { | 584 | else if (cmd->request_bufflen) { |
@@ -1210,7 +1210,7 @@ cciss_scatter_gather(struct pci_dev *pdev, | |||
1210 | struct scsi_cmnd *cmd) | 1210 | struct scsi_cmnd *cmd) |
1211 | { | 1211 | { |
1212 | unsigned int use_sg, nsegs=0, len; | 1212 | unsigned int use_sg, nsegs=0, len; |
1213 | struct scatterlist *scatter = (struct scatterlist *) cmd->buffer; | 1213 | struct scatterlist *scatter = (struct scatterlist *) cmd->request_buffer; |
1214 | __u64 addr64; | 1214 | __u64 addr64; |
1215 | 1215 | ||
1216 | /* is it just one virtual address? */ | 1216 | /* is it just one virtual address? */ |
@@ -1232,7 +1232,7 @@ cciss_scatter_gather(struct pci_dev *pdev, | |||
1232 | } /* else, must be a list of virtual addresses.... */ | 1232 | } /* else, must be a list of virtual addresses.... */ |
1233 | else if (cmd->use_sg <= MAXSGENTRIES) { /* not too many addrs? */ | 1233 | else if (cmd->use_sg <= MAXSGENTRIES) { /* not too many addrs? */ |
1234 | 1234 | ||
1235 | use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, | 1235 | use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, |
1236 | cmd->sc_data_direction); | 1236 | cmd->sc_data_direction); |
1237 | 1237 | ||
1238 | for (nsegs=0; nsegs < use_sg; nsegs++) { | 1238 | for (nsegs=0; nsegs < use_sg; nsegs++) { |