aboutsummaryrefslogtreecommitdiffstats
path: root/mm/bounce.c
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2008-12-23 06:44:19 -0500
committerJens Axboe <jens.axboe@oracle.com>2008-12-29 02:29:52 -0500
commitf735b5eeb9fcbb001e0cf2a5296b19c4bbaec55f (patch)
tree2d260f45b150f8dbf56242bd58372769e6478205 /mm/bounce.c
parenta0ea8622918019ed76c0b85f5d0247809ba05a7c (diff)
bounce: don't rely on a zeroed bio_vec list
__blk_queue_bounce() relies on a zeroed bio_vec list, since it looks up arbitrary indexes in the allocated bio. The block layer only guarentees that added entries are valid, so clear memory after alloc. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'mm/bounce.c')
-rw-r--r--mm/bounce.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/mm/bounce.c b/mm/bounce.c
index bf0cf7c8387b..e590272fe7a8 100644
--- a/mm/bounce.c
+++ b/mm/bounce.c
@@ -198,8 +198,13 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig,
198 /* 198 /*
199 * irk, bounce it 199 * irk, bounce it
200 */ 200 */
201 if (!bio) 201 if (!bio) {
202 bio = bio_alloc(GFP_NOIO, (*bio_orig)->bi_vcnt); 202 unsigned int cnt = (*bio_orig)->bi_vcnt;
203
204 bio = bio_alloc(GFP_NOIO, cnt);
205 memset(bio->bi_io_vec, 0, cnt * sizeof(struct bio_vec));
206 }
207
203 208
204 to = bio->bi_io_vec + i; 209 to = bio->bi_io_vec + i;
205 210