On Mon, Apr 08, 2024 at 08:42:21PM +0100, Matthew Wilcox (Oracle) wrote: > The only user of this function calls page_address_in_vma() immediately > after page_mapped_in_vma() calculates it and uses it to return true/false. > Return the address instead, allowing memory-failure to skip the call > to page_address_in_vma(). > > Acked-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> > --- > mm/page_vma_mapped.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c > index 53b8868ede61..48bfc17934cd 100644 > --- a/mm/page_vma_mapped.c > +++ b/mm/page_vma_mapped.c > @@ -319,9 +319,10 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw) > * @page: the page to test > * @vma: the VMA to test > * > - * Returns 1 if the page is mapped into the page tables of the VMA, 0 > - * if the page is not mapped into the page tables of this VMA. Only > - * valid for normal file or anonymous VMAs. > + * Return: The address the page is mapped at if the page is in the range > + * covered by the VMA and present in the page table. If the page is > + * outside the VMA or not present, returns -EFAULT. > + * Only valid for normal file or anonymous VMAs. I am probably missing something here but I am confused. Now we either return -EFAULT or the address. But page_vma_mapped_walk() gets called from collect_procs_anon() like this: if (!page_mapped_in_vma(page, vma)) so that is not gonna work the way we want? Should not that be converted to if (page_mapped_in_vma(page, vma) == -EFAULT) ? -- Oscar Salvador SUSE Labs