block: set the bounce_pfn to the actual DMA limit rather than to max memory
authorMalahal Naineni <malahal@us.ibm.com>
Fri, 24 Sep 2010 18:25:49 +0000 (20:25 +0200)
committerJens Axboe <jaxboe@fusionio.com>
Fri, 24 Sep 2010 18:27:16 +0000 (20:27 +0200)
The bounce_pfn of the request queue in 64 bit systems is set to the
current max_low_pfn. Adding more memory later makes this incorrect.
Memory allocated beyond this boot time max_low_pfn appear to require
bounce buffers (bounce buffers are actually not allocated but used in
calculating segments that may result in "over max segments limit"
errors).

Signed-off-by: Malahal Naineni <malahal@us.ibm.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
block/blk-settings.c

index f8f2ddf20613701bf4a8130c305bceff09863178..f47af5031eaae2006905a7a3da0d479e78824032 100644 (file)
@@ -214,16 +214,14 @@ void blk_queue_bounce_limit(struct request_queue *q, u64 dma_mask)
         */
        if (b_pfn < (min_t(u64, 0xffffffffUL, BLK_BOUNCE_HIGH) >> PAGE_SHIFT))
                dma = 1;
-       q->limits.bounce_pfn = max_low_pfn;
 #else
        if (b_pfn < blk_max_low_pfn)
                dma = 1;
-       q->limits.bounce_pfn = b_pfn;
 #endif
+       q->limits.bounce_pfn = b_pfn;
        if (dma) {
                init_emergency_isa_pool();
                q->bounce_gfp = GFP_NOIO | GFP_DMA;
-               q->limits.bounce_pfn = b_pfn;
        }
 }
 EXPORT_SYMBOL(blk_queue_bounce_limit);