On Wed, Apr 24, 2019 at 6:37 PM Aneesh Kumar K.V aneesh.kumar@linux.ibm.com wrote:
On 4/24/19 11:43 PM, Dan Williams wrote:
On Wed, Apr 24, 2019 at 10:38 AM Matthew Wilcox willy@infradead.org wrote:
On Wed, Apr 24, 2019 at 10:13:15AM -0700, Dan Williams wrote:
I think unaligned addresses have always been passed to vmf_insert_pfn_pmd(), but nothing cared until this patch. I *think* the only change needed is the following, thoughts?
diff --git a/fs/dax.c b/fs/dax.c index ca0671d55aa6..82aee9a87efa 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -1560,7 +1560,7 @@ static vm_fault_t dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp, }
trace_dax_pmd_insert_mapping(inode, vmf, PMD_SIZE, pfn, entry);
result = vmf_insert_pfn_pmd(vma, vmf->address, vmf->pmd, pfn,
result = vmf_insert_pfn_pmd(vma, pmd_addr, vmf->pmd, pfn, write);
We also call vmf_insert_pfn_pmd() in dax_insert_pfn_mkwrite() -- does that need to change too?
It wasn't clear to me that it was a problem. I think that one already happens to be pmd-aligned.
How about vmf_insert_pfn_pud()?
That is currently not used by fsdax, only devdax, but it does seem that it passes the unaligned fault address rather than the pud aligned address. I'll add that to the proposed fix.