block: set the bounce_pfn to the actual DMA limit rather than to max memory
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>
This commit is contained in:
parent
4b1977698c
commit
c49825facf
|
@ -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))
|
if (b_pfn < (min_t(u64, 0xffffffffUL, BLK_BOUNCE_HIGH) >> PAGE_SHIFT))
|
||||||
dma = 1;
|
dma = 1;
|
||||||
q->limits.bounce_pfn = max_low_pfn;
|
|
||||||
#else
|
#else
|
||||||
if (b_pfn < blk_max_low_pfn)
|
if (b_pfn < blk_max_low_pfn)
|
||||||
dma = 1;
|
dma = 1;
|
||||||
q->limits.bounce_pfn = b_pfn;
|
|
||||||
#endif
|
#endif
|
||||||
|
q->limits.bounce_pfn = b_pfn;
|
||||||
if (dma) {
|
if (dma) {
|
||||||
init_emergency_isa_pool();
|
init_emergency_isa_pool();
|
||||||
q->bounce_gfp = GFP_NOIO | GFP_DMA;
|
q->bounce_gfp = GFP_NOIO | GFP_DMA;
|
||||||
q->limits.bounce_pfn = b_pfn;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(blk_queue_bounce_limit);
|
EXPORT_SYMBOL(blk_queue_bounce_limit);
|
||||||
|
|
Loading…
Reference in New Issue