diff --git a/arch/x86/mm/ioremap_32.c b/arch/x86/mm/ioremap_32.c
index 5273ac4aa96a7e0bfc46a7ae597acb0ee4085603..4d919c37d1d6211d7213a4bb17e5b05d944a7adb 100644
--- a/arch/x86/mm/ioremap_32.c
+++ b/arch/x86/mm/ioremap_32.c
@@ -118,7 +118,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
 	addr = (void __iomem *) area->addr;
 	if (ioremap_page_range((unsigned long)addr, (unsigned long)addr + size,
 			       phys_addr, pgprot)) {
-		vunmap((void __force *) addr);
+		remove_vm_area((void *)(PAGE_MASK & (unsigned long) addr));
 		return NULL;
 	}