summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorDan Williams2016-02-24 23:02:06 +0100
committerVishal Verma2016-05-17 08:44:13 +0200
commit8b3db9798c689ba2dc509f6ca1a8c7e1c1a3e62a (patch)
tree25681acb8dc6cff08eddf61167d1837c305fa570 /fs
parentblock: Update blkdev_dax_capable() for consistency (diff)
downloadkernel-qcow2-linux-8b3db9798c689ba2dc509f6ca1a8c7e1c1a3e62a.tar.gz
kernel-qcow2-linux-8b3db9798c689ba2dc509f6ca1a8c7e1c1a3e62a.tar.xz
kernel-qcow2-linux-8b3db9798c689ba2dc509f6ca1a8c7e1c1a3e62a.zip
dax: fallback from pmd to pte on error
In preparation for consulting a badblocks list in pmem_direct_access(), teach dax_pmd_fault() to fallback rather than fail immediately upon encountering an error. The thought being that reducing the span of the dax request may avoid the error region. Reviewed-by: Jeff Moyer <jmoyer@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/dax.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/dax.c b/fs/dax.c
index 9bc6624251b4..d602410d8e52 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -855,8 +855,8 @@ int __dax_pmd_fault(struct vm_area_struct *vma, unsigned long address,
long length = dax_map_atomic(bdev, &dax);
if (length < 0) {
- result = VM_FAULT_SIGBUS;
- goto out;
+ dax_pmd_dbg(&bh, address, "dax-error fallback");
+ goto fallback;
}
if (length < PMD_SIZE) {
dax_pmd_dbg(&bh, address, "dax-length too small");