|
@@ -753,8 +753,14 @@ static struct page *kimage_alloc_page(struct kimage *image,
|
|
|
*old = addr | (*old & ~PAGE_MASK);
|
|
|
|
|
|
/* The old page I have found cannot be a
|
|
|
- * destination page, so return it.
|
|
|
+ * destination page, so return it if it's
|
|
|
+ * gfp_flags honor the ones passed in.
|
|
|
*/
|
|
|
+ if (!(gfp_mask & __GFP_HIGHMEM) &&
|
|
|
+ PageHighMem(old_page)) {
|
|
|
+ kimage_free_pages(old_page);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
addr = old_addr;
|
|
|
page = old_page;
|
|
|
break;
|