X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=mm%2Fbounce.c;h=a2b76a588e348e0d46f2bfed4131af6ac3eea86b;hb=78074cfc6e5054d736a2adb144c0e0dcc301c14a;hp=06722c4030584382478d7c447ad35f96fe856dd6;hpb=36144077bce9f89763ce994bc631cbd1c9db7785;p=safe%2Fjmp%2Flinux-2.6 diff --git a/mm/bounce.c b/mm/bounce.c index 06722c4..a2b76a5 100644 --- a/mm/bounce.c +++ b/mm/bounce.c @@ -13,9 +13,10 @@ #include #include #include -#include #include +#include + #define POOL_SIZE 64 #define ISA_POOL_SIZE 16 @@ -189,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; @@ -222,7 +228,7 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig, if (!bio) return; - blk_add_trace_bio(q, *bio_orig, BLK_TA_BOUNCE); + trace_block_bio_bounce(q, *bio_orig); /* * at least one page was bounced, fill in possible non-highmem @@ -276,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 {