On Thu, Dec 24, 2015 at 11:20:36AM -0500, Matthew Wilcox wrote: > From: Matthew Wilcox <willy@xxxxxxxxxxxxxxx> > > Call into DAX to provide support for PUD pages, just like the PMD cases. > > Signed-off-by: Matthew Wilcox <willy@xxxxxxxxxxxxxxx> > --- > fs/xfs/xfs_file.c | 33 +++++++++++++++++++++++++++++++++ > fs/xfs/xfs_trace.h | 1 + > 2 files changed, 34 insertions(+) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index f5392ab..a81b942 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -1600,6 +1600,38 @@ xfs_filemap_pmd_fault( > return ret; > } > > +STATIC int > +xfs_filemap_pud_fault( > + struct vm_area_struct *vma, > + unsigned long addr, > + pud_t *pud, > + unsigned int flags) > +{ > + struct inode *inode = file_inode(vma->vm_file); > + struct xfs_inode *ip = XFS_I(inode); > + int ret; > + > + if (!IS_DAX(inode)) > + return VM_FAULT_FALLBACK; > + > + trace_xfs_filemap_pud_fault(ip); > + > + if (flags & FAULT_FLAG_WRITE) { > + sb_start_pagefault(inode->i_sb); > + file_update_time(vma->vm_file); > + } > + > + xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED); > + ret = __dax_pud_fault(vma, addr, pud, flags, xfs_get_blocks_dax_fault, > + NULL); > + xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED); > + > + if (flags & FAULT_FLAG_WRITE) > + sb_end_pagefault(inode->i_sb); > + > + return ret; > +} > + > /* > * pfn_mkwrite was originally inteneded to ensure we capture time stamp > * updates on write faults. In reality, it's need to serialise against > @@ -1637,6 +1669,7 @@ xfs_filemap_pfn_mkwrite( > static const struct vm_operations_struct xfs_file_vm_ops = { > .fault = xfs_filemap_fault, > .pmd_fault = xfs_filemap_pmd_fault, > + .pud_fault = xfs_filemap_pud_fault, This is getting silly - we now have 3 different page fault handlers that all do exactly the same thing. Please abstract this so that the page/pmd/pud is transparent and gets passed through to the generic handler code that then handles the differences between page/pmd/pud internally. This, after all, is the original reason that the ->fault handler was introduced.... Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>