xen/balloon: Avoid OOM when requesting highmem
If highmem pages are requested from the balloon on a system without highmem, the implementation of alloc_xenballooned_pages will allocate all available memory trying to find highmem pages to return. Allow low memory to be returned when highmem pages are requested to avoid this loop. Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
Родитель
5f76d7078c
Коммит
72e9cf2ab1
|
@ -501,7 +501,7 @@ EXPORT_SYMBOL_GPL(balloon_set_new_target);
|
|||
* alloc_xenballooned_pages - get pages that have been ballooned out
|
||||
* @nr_pages: Number of pages to get
|
||||
* @pages: pages returned
|
||||
* @highmem: highmem or lowmem pages
|
||||
* @highmem: allow highmem pages
|
||||
* @return 0 on success, error otherwise
|
||||
*/
|
||||
int alloc_xenballooned_pages(int nr_pages, struct page **pages, bool highmem)
|
||||
|
@ -511,7 +511,7 @@ int alloc_xenballooned_pages(int nr_pages, struct page **pages, bool highmem)
|
|||
mutex_lock(&balloon_mutex);
|
||||
while (pgno < nr_pages) {
|
||||
page = balloon_retrieve(highmem);
|
||||
if (page && PageHighMem(page) == highmem) {
|
||||
if (page && (highmem || !PageHighMem(page))) {
|
||||
pages[pgno++] = page;
|
||||
} else {
|
||||
enum bp_state st;
|
||||
|
|
Загрузка…
Ссылка в новой задаче