Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1497535
| From | Ross Zwisler <ross.zwisler@linux.intel.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v5 13/17] dax: dax_iomap_fault() needs to call iomap_end() |
| Date | 2016-10-07 23:20 +0200 |
| Message-ID | <spKIG-69y-9@gated-at.bofh.it> (permalink) |
| References | <spKyZ-65z-11@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Currently iomap_end() doesn't do anything for DAX page faults for both ext2
and XFS. ext2_iomap_end() just checks for a write underrun, and
xfs_file_iomap_end() checks to see if it needs to finish a delayed
allocation. However, in the future iomap_end() calls might be needed to
make sure we have balanced allocations, locks, etc. So, add calls to
iomap_end() with appropriate error handling to dax_iomap_fault().
Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Suggested-by: Jan Kara <jack@suse.cz>
---
fs/dax.c | 31 ++++++++++++++++++++++++++++---
1 file changed, 28 insertions(+), 3 deletions(-)
diff --git a/fs/dax.c b/fs/dax.c
index 7689ab0..5e8febe 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1187,7 +1187,7 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
goto unlock_entry;
if (WARN_ON_ONCE(iomap.offset + iomap.length < pos + PAGE_SIZE)) {
error = -EIO; /* fs corruption? */
- goto unlock_entry;
+ goto finish_iomap;
}
sector = dax_iomap_sector(&iomap, pos);
@@ -1209,7 +1209,14 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
}
if (error)
- goto unlock_entry;
+ goto finish_iomap;
+
+ if (ops->iomap_end) {
+ error = ops->iomap_end(inode, pos, PAGE_SIZE,
+ PAGE_SIZE, flags, &iomap);
+ if (error)
+ goto unlock_entry;
+ }
if (!radix_tree_exceptional_entry(entry)) {
vmf->page = entry;
return VM_FAULT_LOCKED;
@@ -1230,8 +1237,15 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
break;
case IOMAP_UNWRITTEN:
case IOMAP_HOLE:
- if (!(vmf->flags & FAULT_FLAG_WRITE))
+ if (!(vmf->flags & FAULT_FLAG_WRITE)) {
+ if (ops->iomap_end) {
+ error = ops->iomap_end(inode, pos, PAGE_SIZE,
+ PAGE_SIZE, flags, &iomap);
+ if (error)
+ goto unlock_entry;
+ }
return dax_load_hole(mapping, entry, vmf);
+ }
/*FALLTHRU*/
default:
WARN_ON_ONCE(1);
@@ -1239,6 +1253,17 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
break;
}
+ finish_iomap:
+ if (ops->iomap_end) {
+ if (error) {
+ /* keep previous error */
+ ops->iomap_end(inode, pos, PAGE_SIZE, PAGE_SIZE, flags,
+ &iomap);
+ } else {
+ error = ops->iomap_end(inode, pos, PAGE_SIZE,
+ PAGE_SIZE, flags, &iomap);
+ }
+ }
unlock_entry:
put_locked_mapping_entry(mapping, vmf->pgoff, entry);
out:
--
2.7.4
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v5 00/17] re-enable DAX PMD support Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:10 +0200
[PATCH v5 07/17] dax: remove the last BUG_ON() from fs/dax.c Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:10 +0200
Re: [PATCH v5 07/17] dax: remove the last BUG_ON() from fs/dax.c Jan Kara <jack@suse.cz> - 2016-10-11 21:00 +0200
[PATCH v5 04/17] ext2: remove support for DAX PMD faults Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
[PATCH v5 01/17] ext4: allow DAX writeback for hole punch Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
[PATCH v5 12/17] dax: add dax_iomap_sector() helper function Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
Re: [PATCH v5 12/17] dax: add dax_iomap_sector() helper function Christoph Hellwig <hch@lst.de> - 2016-10-10 17:50 +0200
Re: [PATCH v5 12/17] dax: add dax_iomap_sector() helper function Jan Kara <jack@suse.cz> - 2016-10-11 20:50 +0200
[PATCH v5 13/17] dax: dax_iomap_fault() needs to call iomap_end() Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
Re: [PATCH v5 13/17] dax: dax_iomap_fault() needs to call iomap_end() Christoph Hellwig <hch@lst.de> - 2016-10-10 18:00 +0200
Re: [PATCH v5 13/17] dax: dax_iomap_fault() needs to call iomap_end() Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-11 00:10 +0200
Re: [PATCH v5 13/17] dax: dax_iomap_fault() needs to call iomap_end() Jan Kara <jack@suse.cz> - 2016-10-11 20:50 +0200
[PATCH v5 16/17] xfs: use struct iomap based DAX PMD fault path Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
Re: [PATCH v5 16/17] xfs: use struct iomap based DAX PMD fault path Jan Kara <jack@suse.cz> - 2016-10-11 20:50 +0200
[PATCH v5 08/17] dax: consistent variable naming for DAX entries Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
[PATCH v5 05/17] ext2: return -EIO on ext2_iomap_end() failure Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
Re: [PATCH v5 05/17] ext2: return -EIO on ext2_iomap_end() failure Jan Kara <jack@suse.cz> - 2016-10-11 21:00 +0200
[PATCH v5 03/17] dax: remove buffer_size_valid() Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
[PATCH v5 09/17] dax: coordinate locking for offsets in PMD range Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
Re: [PATCH v5 09/17] dax: coordinate locking for offsets in PMD range Christoph Hellwig <hch@lst.de> - 2016-10-10 17:50 +0200
Re: [PATCH v5 09/17] dax: coordinate locking for offsets in PMD range Jan Kara <jack@suse.cz> - 2016-10-11 20:50 +0200
Re: [PATCH v5 09/17] dax: coordinate locking for offsets in PMD range Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-11 23:20 +0200
[PATCH v5 02/17] ext4: tell DAX the size of allocation holes Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
[PATCH v5 11/17] dax: correct dax iomap code namespace Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
Re: [PATCH v5 11/17] dax: correct dax iomap code namespace Christoph Hellwig <hch@lst.de> - 2016-10-09 17:30 +0200
[PATCH] dax: correct dax iomap code namespace Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-10 21:10 +0200
Re: [PATCH] dax: correct dax iomap code namespace Dave Chinner <david@fromorbit.com> - 2016-10-10 22:50 +0200
[PATCH v5 17/17] dax: remove "depends on BROKEN" from FS_DAX_PMD Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
[PATCH v5 14/17] dax: move RADIX_DAX_* defines to dax.h Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
Re: [PATCH v5 14/17] dax: move RADIX_DAX_* defines to dax.h Christoph Hellwig <hch@lst.de> - 2016-10-10 18:00 +0200
Re: [PATCH v5 14/17] dax: move RADIX_DAX_* defines to dax.h Jan Kara <jack@suse.cz> - 2016-10-11 20:50 +0200
[PATCH v5 10/17] dax: remove dax_pmd_fault() Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
[PATCH v5 15/17] dax: add struct iomap based DAX PMD support Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-07 23:20 +0200
Re: [PATCH v5 15/17] dax: add struct iomap based DAX PMD support Christoph Hellwig <hch@lst.de> - 2016-10-10 18:00 +0200
Re: [PATCH v5 15/17] dax: add struct iomap based DAX PMD support Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-11 00:10 +0200
Re: [PATCH v5 15/17] dax: add struct iomap based DAX PMD support Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-11 23:50 +0200
Re: [PATCH v5 15/17] dax: add struct iomap based DAX PMD support Jan Kara <jack@suse.cz> - 2016-10-11 21:00 +0200
Re: [PATCH v5 15/17] dax: add struct iomap based DAX PMD support Ross Zwisler <ross.zwisler@linux.intel.com> - 2016-10-12 01:00 +0200
Re: [PATCH v5 15/17] dax: add struct iomap based DAX PMD support Jan Kara <jack@suse.cz> - 2016-10-12 09:50 +0200
csiph-web