diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index ca8bfe5..2a0b5f1 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -227,42 +227,41 @@
  * MEMORY_HOTPLUG depends on SPARSEMEM in mm/Kconfig, so it is
  * OK to have direct references to sparsemem variables in here.
  */
-static int check_page_reservations(unsigned long phys_index)
-{
-	int i;
-	struct page *page;
-
-	page = pfn_to_page(phys_index << PFN_SECTION_SHIFT);
-
-	for (i = 0; i < PAGES_PER_SECTION; i++) {
-		if (PageReserved(page + i))
-			continue;
-
-		printk(KERN_WARNING "section number %ld page number %d "
-			"not reserved, was it already online?\n", phys_index, i);
-			return -EBUSY;
-	}
-
-	return 0;
-}
-
 static int
 memory_block_action(unsigned long phys_index, unsigned long action)
 {
+	int i;
 	unsigned long start_pfn, start_paddr;
 	unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;
-	struct page *page;
+	struct page *first_page;
 	int ret;
 
-	page = pfn_to_page(phys_index << PFN_SECTION_SHIFT);
+	first_page = pfn_to_page(phys_index << PFN_SECTION_SHIFT);
+
+	/*
+	 * The probe routines leave the pages reserved, just
+	 * as the bootmem code does.  Make sure they're still
+	 * that way.
+	 */
+	if (action == MEM_ONLINE) {
+		for (i = 0; i < nr_pages; i++) {
+			if (PageReserved(first_page+i))
+				continue;
+
+			printk(KERN_WARNING "section number %ld page number %d "
+				"not reserved, was it already online?\n",
+				phys_index, i);
+			return -EBUSY;
+		}
+	}
 
 	switch (action) {
 		case MEM_ONLINE:
-			start_pfn = page_to_pfn(page);
+			start_pfn = page_to_pfn(first_page);
 			ret = online_pages(start_pfn, nr_pages);
 			break;
 		case MEM_OFFLINE:
-			start_paddr = page_to_pfn(page) << PAGE_SHIFT;
+			start_paddr = page_to_pfn(first_page) << PAGE_SHIFT;
 			ret = remove_memory(start_paddr,
 					    nr_pages << PAGE_SHIFT);
 			break;
@@ -278,7 +277,7 @@
 static int memory_block_change_state(struct memory_block *mem,
 		unsigned long to_state, unsigned long from_state_req)
 {
-	int i, ret = 0;
+	int ret = 0;
 
 	mutex_lock(&mem->state_mutex);
 
@@ -290,19 +289,6 @@
 	if (to_state == MEM_OFFLINE)
 		mem->state = MEM_GOING_OFFLINE;
 
-	if (to_state == MEM_ONLINE) {
-		/*
-		 * The probe routines leave the pages reserved, just
-		 * as the bootmem code does.  Make sure they're still
-		 * that way.
-		 */
-		for (i = 0; i < sections_per_block; i++) {
-			ret = check_page_reservations(mem->start_section_nr + i);
-			if (ret)
-				return ret;
-		}
-	}
-
 	ret = memory_block_action(mem->start_section_nr, to_state);
 
 	if (ret)
