diff --git a/mm/memremap.c b/mm/memremap.c index a638a27d89f5..8d743cbc2964 100644 --- a/mm/memremap.c +++ b/mm/memremap.c @@ -148,10 +148,10 @@ void memunmap_pages(struct dev_pagemap *pgmap) for_each_device_pfn(pfn, pgmap, i) put_page(pfn_to_page(pfn)); wait_for_completion(&pgmap->done); - percpu_ref_exit(&pgmap->ref); for (i = 0; i < pgmap->nr_range; i++) pageunmap_range(pgmap, i); + percpu_ref_exit(&pgmap->ref); WARN_ONCE(pgmap->altmap.alloc, "failed to free all reserved pages\n"); devmap_managed_enable_put(pgmap);