Commit 3bcfeaf9 authored by David Vrabel's avatar David Vrabel Committed by Jens Axboe

block: initialize the bounce pool if high memory may be added later

init_emergency_pool() does not create the page pool for bouncing block
requests if the current count of high pages is zero.  If high memory
may be added later (either via memory hotplug or a balloon driver in a
virtualized system) then a oops occurs if a request with a high page
need bouncing because the pool does not exist.

So, always create the pool if memory hotplug is enabled and change the
test so it's valid even if all high pages are currently in the balloon
(the balloon drivers adjust totalhigh_pages but not max_pfn).
Signed-off-by: default avatarDavid Vrabel <>
Signed-off-by: default avatarJens Axboe <>
parent c9a929dd
......@@ -14,6 +14,7 @@
#include <linux/init.h>
#include <linux/hash.h>
#include <linux/highmem.h>
#include <linux/bootmem.h>
#include <asm/tlbflush.h>
#include <trace/events/block.h>
......@@ -26,12 +27,10 @@ static mempool_t *page_pool, *isa_page_pool;
static __init int init_emergency_pool(void)
struct sysinfo i;
if (!i.totalhigh)
if (max_pfn <= max_low_pfn)
return 0;
page_pool = mempool_create_page_pool(POOL_SIZE, 0);
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment