aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFUJITA Tomonori2008-03-04 04:17:11 -0600
committerJens Axboe2008-03-04 04:17:11 -0600
commit7a85f8896f4b4a4a0249563b92af9e3161a6b467 (patch)
tree616c62e3c96237e874fc0f47133fbca2160913b5 /block/blk-map.c
parent89b6e743788516491846724d7ef89bcac7ac9c99 (diff)
downloadkernel-common-7a85f8896f4b4a4a0249563b92af9e3161a6b467.tar.gz
kernel-common-7a85f8896f4b4a4a0249563b92af9e3161a6b467.tar.xz
kernel-common-7a85f8896f4b4a4a0249563b92af9e3161a6b467.zip
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 'block/blk-map.c')
-rw-r--r--block/blk-map.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/block/blk-map.c b/block/blk-map.c
index 09f7fd0bcb7..f5598322954 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -19,7 +19,6 @@ int blk_rq_append_bio(struct request_queue *q, struct request *rq,
19 rq->biotail->bi_next = bio; 19 rq->biotail->bi_next = bio;
20 rq->biotail = bio; 20 rq->biotail = bio;
21 21
22 rq->raw_data_len += bio->bi_size;
23 rq->data_len += bio->bi_size; 22 rq->data_len += bio->bi_size;
24 } 23 }
25 return 0; 24 return 0;
@@ -151,11 +150,8 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq,
151 */ 150 */
152 if (len & queue_dma_alignment(q)) { 151 if (len & queue_dma_alignment(q)) {
153 unsigned int pad_len = (queue_dma_alignment(q) & ~len) + 1; 152 unsigned int pad_len = (queue_dma_alignment(q) & ~len) + 1;
154 struct bio *bio = rq->biotail;
155 153
156 bio->bi_io_vec[bio->bi_vcnt - 1].bv_len += pad_len; 154 rq->extra_len += pad_len;
157 bio->bi_size += pad_len;
158 rq->data_len += pad_len;
159 } 155 }
160 156
161 rq->buffer = rq->data = NULL; 157 rq->buffer = rq->data = NULL;