• Dave Jiang's avatar
    device-dax: fix pud fault fallback handling · 70b085b0
    Dave Jiang authored
    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.
    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>
    70b085b0
dax.c 20.4 KB