mm/vmalloc: pass VM_USERMAP flags directly to __vmalloc_node_range()
[linux-2.6-block.git] / kernel / power / snapshot.c
index 640b2034edd660da46372b38d8eca7b37bd482fc..4802b039b89f54f60d458405a7db128ff1c09648 100644 (file)
@@ -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;