]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit
device-dax: fix pud fault fallback handling
authorDave Jiang <dave.jiang@intel.com>
Fri, 10 Mar 2017 20:24:27 +0000 (13:24 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sat, 11 Mar 2017 03:55:53 +0000 (19:55 -0800)
commit70b085b06c4560a69e95607f77bb4c2b2e41943c
treee667d70ececd084f7a365600c596e2d81ec4bcaf
parent0134ed4fb9e78672ee9f7b18007114404c81e63f
device-dax: fix pud fault fallback handling

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: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/dax/dax.c