Merge tag 'ext4_for_linus_stable2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[platform/kernel/linux-starfive.git] / mm / mmap.c
index 2def555..c3c5c1d 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2674,6 +2674,8 @@ cannot_expand:
                error = -EINVAL;
                if (file)
                        goto close_and_free_vma;
+               else if (vma->vm_file)
+                       goto unmap_and_free_vma;
                else
                        goto free_vma;
        }
@@ -2682,6 +2684,8 @@ cannot_expand:
                error = -ENOMEM;
                if (file)
                        goto close_and_free_vma;
+               else if (vma->vm_file)
+                       goto unmap_and_free_vma;
                else
                        goto free_vma;
        }
@@ -2751,7 +2755,7 @@ unmap_and_free_vma:
 
        /* Undo any partial mapping done by a device driver. */
        unmap_region(mm, mas.tree, vma, prev, next, vma->vm_start, vma->vm_end);
-       if (vm_flags & VM_SHARED)
+       if (file && (vm_flags & VM_SHARED))
                mapping_unmap_writable(file->f_mapping);
 free_vma:
        vm_area_free(vma);