On 2022/2/14 22:48, Naoya Horiguchi wrote: > On Thu, Feb 10, 2022 at 10:17:27PM +0800, Miaohe Lin wrote: >> It's unnecessary to walk the page table when vma_address() return -EFAULT. >> Return early if so to save some cpu cycles. >> >> Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> > > Acked-by: Naoya Horiguchi <naoya.horiguchi@xxxxxxx> Many thanks for your review and Acked-by tag! > > Does this patch fix the real problem rather than just saving cpu cycles? > Without this patch, "address == -EFAULT" seems to make pgd_offset() return > invalid pointer and result in some serious result like general protection fault. I think you're right. We might dereference the invalid pointer in the following pagetable walk and results in general protection fault. > If that's the case, this patch might be worth sending to stable. But I'am not sure vma_address will return -EFAULT for dax pages in the real workload? If so, I will send a v2 with Fixes tag. Thanks again. > > Thanks, > Naoya Horiguchi > >> --- >> mm/memory-failure.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/mm/memory-failure.c b/mm/memory-failure.c >> index b3ff7e99a421..f86819145ea8 100644 >> --- a/mm/memory-failure.c >> +++ b/mm/memory-failure.c >> @@ -315,6 +315,8 @@ static unsigned long dev_pagemap_mapping_shift(struct page *page, >> pmd_t *pmd; >> pte_t *pte; >> >> + if (address == -EFAULT) >> + return 0; >> pgd = pgd_offset(vma->vm_mm, address); >> if (!pgd_present(*pgd)) >> return 0; >> --- >> 2.23.0 >> > . >