|
@@ -1672,8 +1672,14 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
|
|
|
vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
|
|
|
|
|
|
err = track_pfn_vma_new(vma, prot, pfn, PAGE_ALIGN(size));
|
|
|
- if (err)
|
|
|
+ if (err) {
|
|
|
+ /*
|
|
|
+ * To indicate that track_pfn related cleanup is not
|
|
|
+ * needed from higher level routine calling unmap_vmas
|
|
|
+ */
|
|
|
+ vma->vm_flags &= ~(VM_IO | VM_RESERVED | VM_PFNMAP);
|
|
|
return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
BUG_ON(addr >= end);
|
|
|
pfn -= addr >> PAGE_SHIFT;
|