On 11/12/19 12:43 PM, Jason Gunthorpe wrote: ... >> - } >> + ret = get_user_pages_remote(NULL, mm, vaddr, 1, flags | FOLL_LONGTERM, >> + page, vmas, NULL); >> + /* >> + * The lifetime of a vaddr_get_pfn() page pin is >> + * userspace-controlled. In the fs-dax case this could >> + * lead to indefinite stalls in filesystem operations. >> + * Disallow attempts to pin fs-dax pages via this >> + * interface. >> + */ >> + if (ret > 0 && vma_is_fsdax(vmas[0])) { >> + ret = -EOPNOTSUPP; >> + put_page(page[0]); >> } > > AFAIK this chunk is redundant now as it is some hack to emulate > FOLL_LONGTERM? So vmas can be deleted too. Let me first make sure I understand what Dan has in mind for the vma checking, in the other thread... > > Also unclear why this function has this: > > up_read(&mm->mmap_sem); > > if (ret == 1) { > *pfn = page_to_pfn(page[0]); > return 0; > } > > down_read(&mm->mmap_sem); > Yes, that's really odd. It's not good to release and retake the lock anyway in general (without re-checking things), and certainly it is not required to release mmap_sem in order to call page_to_pfn(). I've removed that up_read()/down_read() pair, for v4. thanks, -- John Hubbard NVIDIA