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 40b01b9bbd
.
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>
This commit is contained in:
committed by
Jens Axboe
parent
89b6e74378
commit
7a85f8896f
@ -2538,7 +2538,7 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
|
||||
}
|
||||
|
||||
qc->tf.command = ATA_CMD_PACKET;
|
||||
qc->nbytes = scsi_bufflen(scmd);
|
||||
qc->nbytes = scsi_bufflen(scmd) + scmd->request->extra_len;
|
||||
|
||||
/* check whether ATAPI DMA is safe */
|
||||
if (!using_pio && ata_check_atapi_dma(qc))
|
||||
@ -2549,7 +2549,7 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
|
||||
* want to set it properly, and for DMA where it is
|
||||
* effectively meaningless.
|
||||
*/
|
||||
nbytes = min(scmd->request->raw_data_len, (unsigned int)63 * 1024);
|
||||
nbytes = min(scmd->request->data_len, (unsigned int)63 * 1024);
|
||||
|
||||
/* Most ATAPI devices which honor transfer chunk size don't
|
||||
* 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)
|
||||
* TODO: find out if we need to do more here to
|
||||
* cover scatter/gather case.
|
||||
*/
|
||||
qc->nbytes = scsi_bufflen(scmd);
|
||||
qc->nbytes = scsi_bufflen(scmd) + scmd->request->extra_len;
|
||||
|
||||
/* request result TF and be quiet about device error */
|
||||
qc->flags |= ATA_QCFLAG_RESULT_TF | ATA_QCFLAG_QUIET;
|
||||
|
Reference in New Issue
Block a user