diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 27938c441b6feb3ec7751bacc7ce902ab653d63a..dd30f22b35e0c904b0fe9cfd4f550b810e1e7c22 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1536,6 +1536,7 @@ static unsigned long set_max_huge_pages(struct hstate *h, unsigned long count,
 	while (min_count < persistent_huge_pages(h)) {
 		if (!free_pool_huge_page(h, nodes_allowed, 0))
 			break;
+		cond_resched_lock(&hugetlb_lock);
 	}
 	while (count < persistent_huge_pages(h)) {
 		if (!adjust_pool_surplus(h, nodes_allowed, 1))