On Thu, Dec 21, 2017 at 8:30 AM, Jan Kara <jack@xxxxxxx> wrote: > Ext4 needs to pass through error from its iomap handler to the page > fault handler so that it can properly detect ENOSPC and force > transaction commit and retry the fault (and block allocation). Add > argument to dax_iomap_fault() for passing such error. > > Signed-off-by: Jan Kara <jack@xxxxxxx> > --- > fs/dax.c | 9 ++++++--- > fs/ext2/file.c | 2 +- > fs/ext4/file.c | 2 +- > fs/xfs/xfs_file.c | 2 +- > include/linux/dax.h | 2 +- > 5 files changed, 10 insertions(+), 7 deletions(-) > > diff --git a/fs/dax.c b/fs/dax.c > index 95981591977a..f3afa1d6156c 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -1096,7 +1096,7 @@ static bool dax_fault_is_synchronous(unsigned long flags, > } > > static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp, > - const struct iomap_ops *ops) > + int *iomap_errp, const struct iomap_ops *ops) > { > struct vm_area_struct *vma = vmf->vma; > struct address_space *mapping = vma->vm_file->f_mapping; > @@ -1149,6 +1149,8 @@ static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp, > * that we never have to deal with more than a single extent here. > */ > error = ops->iomap_begin(inode, pos, PAGE_SIZE, flags, &iomap); > + if (iomap_errp) > + *iomap_errp = error; Since we already have 'struct iomap' tracking the state of the iomap should we track the error status there as well? I.e. move the on stack allocation of struct iomap to the per-fs dax fault handlers.