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 /block/blk-map.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 'block/blk-map.c')
-rw-r--r-- | block/blk-map.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/block/blk-map.c b/block/blk-map.c index 09f7fd0bcb73..f5598322954d 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; |