On Fri, Aug 27, 2021 at 10:45:00PM +0800, Li Zhijian wrote: > Previously, we noticed the one rpma example was failed[1] since 36f30e486d, > where it will use ODP feature to do RDMA WRITE between fsdax files. > > After digging into the code, we found hmm_vma_handle_pte() will still > return EFAULT even though all the its requesting flags has been > fulfilled. That's because a DAX page will be marked as > (_PAGE_SPECIAL | PAGE_DEVMAP) by pte_mkdevmap(). > > [1]: https://github.com/pmem/rpma/issues/1142 > > CC: stable@xxxxxxxxxxxxxxx > Signed-off-by: Li Zhijian <lizhijian@xxxxxxxxxxxxxx> You need to add a Fixes: 405506274922 ("mm/hmm: add missing call to hmm_pte_need_fault in HMM_PFN_SPECIAL handling") > diff --git a/mm/hmm.c b/mm/hmm.c > index fad6be2bf072..4766bdefb6c3 100644 > +++ b/mm/hmm.c > @@ -294,6 +294,12 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr, > if (required_fault) > goto fault; > > + /* > + * just bypass devmap pte such as DAX page when all pfn requested > + * flags(pfn_req_flags) are fulfilled. > + */ > + if (pte_devmap(pte)) > + goto out; I liked your ealier version better where this was added to the pte_special test - logically this is about disambiguating the pte_special and the devmap case as they are different things. Jason