diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index d27e8b968ac35b1d85cb02621f958553e3c12f0b..2e860f431d6b12793ba9afd6207a62fcf90f2c3f 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2615,11 +2615,12 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
 				page = list_last_entry(list, struct page, lru);
 			else
 				page = list_first_entry(list, struct page, lru);
-		} while (page && check_new_pcp(page));
 
-		__dec_zone_state(zone, NR_ALLOC_BATCH);
-		list_del(&page->lru);
-		pcp->count--;
+			__dec_zone_state(zone, NR_ALLOC_BATCH);
+			list_del(&page->lru);
+			pcp->count--;
+
+		} while (check_new_pcp(page));
 	} else {
 		/*
 		 * We most definitely don't want callers attempting to