X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=mm%2Fbounce.c;h=a2b76a588e348e0d46f2bfed4131af6ac3eea86b;hb=af86d4b0f064413d2f353a41cdc23b7dbff0823d;hp=bd1caaa582b80202330ceb3c428912a1d67436da;hpb=5f3ea37c7716db4e894a480e0c18b24399595b6b;p=safe%2Fjmp%2Flinux-2.6 diff --git a/mm/bounce.c b/mm/bounce.c index bd1caaa..a2b76a5 100644 --- a/mm/bounce.c +++ b/mm/bounce.c @@ -13,10 +13,10 @@ #include #include #include -#include -#include #include +#include + #define POOL_SIZE 64 #define ISA_POOL_SIZE 16 @@ -190,14 +190,19 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig, /* * is destination page below bounce pfn? */ - if (page_to_pfn(page) <= q->bounce_pfn) + if (page_to_pfn(page) <= queue_bounce_pfn(q)) continue; /* * irk, bounce it */ - if (!bio) - bio = bio_alloc(GFP_NOIO, (*bio_orig)->bi_vcnt); + if (!bio) { + unsigned int cnt = (*bio_orig)->bi_vcnt; + + bio = bio_alloc(GFP_NOIO, cnt); + memset(bio->bi_io_vec, 0, cnt * sizeof(struct bio_vec)); + } + to = bio->bi_io_vec + i; @@ -277,7 +282,7 @@ void blk_queue_bounce(struct request_queue *q, struct bio **bio_orig) * don't waste time iterating over bio segments */ if (!(q->bounce_gfp & GFP_DMA)) { - if (q->bounce_pfn >= blk_max_pfn) + if (queue_bounce_pfn(q) >= blk_max_pfn) return; pool = page_pool; } else {