Re: [PATCH 05/13] mm/frame-vector: Use FOLL_LONGTERM

From: Jason Gunthorpe
Date: Wed Oct 07 2020 - 12:53:22 EST


On Wed, Oct 07, 2020 at 06:44:18PM +0200, Daniel Vetter wrote:
>
> - /*
> - * While get_vaddr_frames() could be used for transient (kernel
> - * controlled lifetime) pinning of memory pages all current
> - * users establish long term (userspace controlled lifetime)
> - * page pinning. Treat get_vaddr_frames() like
> - * get_user_pages_longterm() and disallow it for filesystem-dax
> - * mappings.
> - */
> - if (vma_is_fsdax(vma)) {
> - ret = -EOPNOTSUPP;
> - goto out;
> - }
> -
> - if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) {
> - vec->got_ref = true;
> - vec->is_pfns = false;
> - ret = pin_user_pages_locked(start, nr_frames,
> - gup_flags, (struct page **)(vec->ptrs), &locked);
> - goto out;
> - }

The vm_flags still need to be checked before going into the while
loop. If the break is taken then nothing would check vm_flags

Jason