• Dave Jiang's avatar
    device-dax: fix pmd/pte fault fallback handling · eae72468
    Dave Jiang authored
    commit 0134ed4f upstream.
    
    Jeff Moyer reports:
    
        With a device dax alignment of 4KB or 2MB, I get sigbus when running
        the attached fio job file for the current kernel (4.11.0-rc1+).  If
        I specify an alignment of 1GB, it works.
    
        I turned on debug output, and saw that it was failing in the huge
        fault code.
    
         dax dax1.0: dax_open
         dax dax1.0: dax_mmap
         dax dax1.0: dax_dev_huge_fault: fio: write (0x7f08f0a00000 -
         dax dax1.0: __dax_dev_pud_fault: phys_to_pgoff(0xffffffffcf60
         dax dax1.0: dax_release
    
        fio config for reproduce:
        [global]
        ioengine=dev-dax
        direct=0
        filename=/dev/dax0.0
        bs=2m
    
        [write]
        rw=write
    
        [read]
        stonewall
        rw=read
    
    The driver fails to fallback when taking a fault that is larger than
    the device alignment, or handling a larger fault when a smaller
    mapping is already established. While we could support larger
    mappings for a device with a smaller alignment, that change is
    too large for the immediate fix. The simplest change is to force
    fallback until the fault size matches the alignment.
    
    Fixes: dee41079 ("/dev/dax, core: file operations and dax-mmap")
    Cc: <stable@vger.kernel.org>
    Reported-by: default avatarJeff Moyer <jmoyer@redhat.com>
    Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    eae72468
dax.c 16.8 KB