diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2019-01-25 14:43:54 +1100 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2019-01-25 14:43:54 +1100 |
commit | 5463235fb3e113017491fc58b1c44b50dbf512af (patch) | |
tree | 106e27b43f38331f0fb6d0707fe08a8ea4022c30 /kernel/power | |
parent | 20e7994d20fb52d23a2796bef5de282e136d7ffe (diff) | |
parent | fc4d4bfc99dadacb276ab575cd3d4fc4e46e136d (diff) | |
download | linux-next-5463235fb3e113017491fc58b1c44b50dbf512af.tar.gz |
Merge branch 'akpm-current/current'
Diffstat (limited to 'kernel/power')
-rw-r--r-- | kernel/power/snapshot.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index 640b2034edd6..4802b039b89f 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c @@ -1215,14 +1215,16 @@ static struct page *saveable_highmem_page(struct zone *zone, unsigned long pfn) if (!pfn_valid(pfn)) return NULL; - page = pfn_to_page(pfn); - if (page_zone(page) != zone) + page = pfn_to_online_page(pfn); + if (!page || page_zone(page) != zone) return NULL; BUG_ON(!PageHighMem(page)); - if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page) || - PageReserved(page)) + if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page)) + return NULL; + + if (PageReserved(page) || PageOffline(page)) return NULL; if (page_is_guard(page)) @@ -1277,8 +1279,8 @@ static struct page *saveable_page(struct zone *zone, unsigned long pfn) if (!pfn_valid(pfn)) return NULL; - page = pfn_to_page(pfn); - if (page_zone(page) != zone) + page = pfn_to_online_page(pfn); + if (!page || page_zone(page) != zone) return NULL; BUG_ON(PageHighMem(page)); @@ -1286,6 +1288,9 @@ static struct page *saveable_page(struct zone *zone, unsigned long pfn) if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page)) return NULL; + if (PageOffline(page)) + return NULL; + if (PageReserved(page) && (!kernel_page_present(page) || pfn_is_nosave(pfn))) return NULL; |