if (nocma && is_migrate_cma_page(page))
                        continue;
 
-               if (!PageHWPoison(page))
-                       break;
+               if (PageHWPoison(page))
+                       continue;
+
+               list_move(&page->lru, &h->hugepage_activelist);
+               set_page_refcounted(page);
+               h->free_huge_pages--;
+               h->free_huge_pages_node[nid]--;
+               return page;
        }
 
-       /*
-        * if 'non-isolated free hugepage' not found on the list,
-        * the allocation fails.
-        */
-       if (&h->hugepage_freelists[nid] == &page->lru)
-               return NULL;
-       list_move(&page->lru, &h->hugepage_activelist);
-       set_page_refcounted(page);
-       h->free_huge_pages--;
-       h->free_huge_pages_node[nid]--;
-       return page;
+       return NULL;
 }
 
 static struct page *dequeue_huge_page_nodemask(struct hstate *h, gfp_t gfp_mask, int nid,