diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2008-03-04 05:17:11 -0500 |
---|---|---|
committer | Jens Axboe <axboe@carl.home.kernel.dk> | 2008-03-04 05:17:11 -0500 |
commit | 7a85f8896f4b4a4a0249563b92af9e3161a6b467 (patch) | |
tree | 616c62e3c96237e874fc0f47133fbca2160913b5 /drivers/ata/libata-scsi.c | |
parent | 89b6e743788516491846724d7ef89bcac7ac9c99 (diff) |
block: restore the meaning of rq->data_len to the true data length
The meaning of rq->data_len was changed to the length of an allocated
buffer from the true data length. It breaks SG_IO friends and
bsg. This patch restores the meaning of rq->data_len to the true data
length and adds rq->extra_len to store an extended length (due to
drain buffer and padding).
This patch also removes the code to update bio in blk_rq_map_user
introduced by the commit 40b01b9bbdf51ae543a04744283bf2d56c4a6afa.
The commit adjusts bio according to memory alignment
(queue_dma_alignment). However, memory alignment is NOT padding
alignment. This adjustment also breaks SG_IO friends and bsg. Padding
alignment needs to be fixed in a proper way (by a separate patch).
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Jens Axboe <axboe@carl.home.kernel.dk>
Diffstat (limited to 'drivers/ata/libata-scsi.c')
-rw-r--r-- | drivers/ata/libata-scsi.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 7b1f1ee8131d..fe47922dd69e 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -2538,7 +2538,7 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc) | |||
2538 | } | 2538 | } |
2539 | 2539 | ||
2540 | qc->tf.command = ATA_CMD_PACKET; | 2540 | qc->tf.command = ATA_CMD_PACKET; |
2541 | qc->nbytes = scsi_bufflen(scmd); | 2541 | qc->nbytes = scsi_bufflen(scmd) + scmd->request->extra_len; |
2542 | 2542 | ||
2543 | /* check whether ATAPI DMA is safe */ | 2543 | /* check whether ATAPI DMA is safe */ |
2544 | if (!using_pio && ata_check_atapi_dma(qc)) | 2544 | if (!using_pio && ata_check_atapi_dma(qc)) |
@@ -2549,7 +2549,7 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc) | |||
2549 | * want to set it properly, and for DMA where it is | 2549 | * want to set it properly, and for DMA where it is |
2550 | * effectively meaningless. | 2550 | * effectively meaningless. |
2551 | */ | 2551 | */ |
2552 | nbytes = min(scmd->request->raw_data_len, (unsigned int)63 * 1024); | 2552 | nbytes = min(scmd->request->data_len, (unsigned int)63 * 1024); |
2553 | 2553 | ||
2554 | /* Most ATAPI devices which honor transfer chunk size don't | 2554 | /* Most ATAPI devices which honor transfer chunk size don't |
2555 | * behave according to the spec when odd chunk size which | 2555 | * behave according to the spec when odd chunk size which |
@@ -2875,7 +2875,7 @@ static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc) | |||
2875 | * TODO: find out if we need to do more here to | 2875 | * TODO: find out if we need to do more here to |
2876 | * cover scatter/gather case. | 2876 | * cover scatter/gather case. |
2877 | */ | 2877 | */ |
2878 | qc->nbytes = scsi_bufflen(scmd); | 2878 | qc->nbytes = scsi_bufflen(scmd) + scmd->request->extra_len; |
2879 | 2879 | ||
2880 | /* request result TF and be quiet about device error */ | 2880 | /* request result TF and be quiet about device error */ |
2881 | qc->flags |= ATA_QCFLAG_RESULT_TF | ATA_QCFLAG_QUIET; | 2881 | qc->flags |= ATA_QCFLAG_RESULT_TF | ATA_QCFLAG_QUIET; |