lkml.org 
[lkml]   [2015]   [Dec]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 7/8] xfs: Support for transparent PUD pages
    On Thu, Dec 24, 2015 at 11:20:36AM -0500, Matthew Wilcox wrote:
    > From: Matthew Wilcox <willy@linux.intel.com>
    >
    > Call into DAX to provide support for PUD pages, just like the PMD cases.
    >
    > Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
    > ---
    > 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@fromorbit.com


    \
     
     \ /
      Last update: 2015-12-31 00:41    [W:3.343 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site