On Sun, Sep 26, 2021 at 09:12:54AM -0700, Nadav Amit wrote: > From: Nadav Amit <namit@xxxxxxxxxx> > > madvise_free_single_vma() currently rechecks that the range fits within > the VMA, adapts it accordingly, and returns -EINVAL if the range is > entirely outside of the VMA. > > The error-code of -EINVAL is incorrect according to the man pages (as it > should have been -ENOMEM), but anyhow the range that is provided to > madvise_free_single_vma() should always be valid. It is set correctly in > do_madvise() and then rechecked in madvise_dontneed_free() is the > mmap-lock is dropped. > > Remove this check. > > Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Minchan Kim <minchan@xxxxxxxxxx> > Cc: Colin Cross <ccross@xxxxxxxxxx> > Cc: Suren Baghdasarya <surenb@xxxxxxxxxx> > Cc: Mike Rapoport <rppt@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Nadav Amit <namit@xxxxxxxxxx> > --- > mm/madvise.c | 8 +------- > 1 file changed, 1 insertion(+), 7 deletions(-) > > diff --git a/mm/madvise.c b/mm/madvise.c > index fe843513a4e8..17e39c70704b 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -716,14 +716,8 @@ static int madvise_free_single_vma(struct vm_area_struct *vma, > if (!vma_is_anonymous(vma)) > return -EINVAL; > > - range.start = max(vma->vm_start, start_addr); > - if (range.start >= vma->vm_end) > - return -EINVAL; > - range.end = min(vma->vm_end, end_addr); > - if (range.end <= vma->vm_start) > - return -EINVAL; How did you test this change? As far as I can see, you leave 'range' uninitialized, but used for walk_page_range() and mmu_notifiers. NAK. > mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm, > - range.start, range.end); > + start_addr, end_addr); > > lru_add_drain(); > tlb_gather_mmu(&tlb, mm); > -- > 2.25.1 > > -- Kirill A. Shutemov