diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index d66bc8abe0afd214bd6db006c9a610d9d6a64240..8e3bc949ebcca27fb999022e65cde28ff2bdc710 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1826,7 +1826,8 @@ deferred_grow_zone(struct zone *zone, unsigned int order)
 						 first_deferred_pfn)) {
 		pgdat->first_deferred_pfn = ULONG_MAX;
 		pgdat_resize_unlock(pgdat, &flags);
-		return true;
+		/* Retry only once. */
+		return first_deferred_pfn != ULONG_MAX;
 	}
 
 	/*