diff --git a/mm/memory.c b/mm/memory.c index d10e616d7389..75d7959b835b 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1815,9 +1815,16 @@ static void unmap_single_vma(struct mmu_gather *tlb, if (vma->vm_file) uprobe_munmap(vma, start, end); - if (unlikely(vma->vm_flags & VM_PFNMAP)) + if (unlikely(vma->vm_flags & VM_PFNMAP)) { + if (!mm_wr_locked) + mmap_read_lock(vma->vm_mm); + untrack_pfn(vma, 0, 0, mm_wr_locked); + if (!mm_wr_locked) + mmap_read_unlock(vma->vm_mm); + } + if (start != end) { if (unlikely(is_vm_hugetlb_page(vma))) { /*