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().
CC: stable@vger.kernel.org Signed-off-by: Li Zhijian lizhijian@cn.fujitsu.com
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