xfs has it's own handling for write faults, so we need to add the
pre-content fsnotify hook for this case.  Reads go through filemap_fault
so they're handled properly there.

Signed-off-by: Josef Bacik <[email protected]>
---
 fs/xfs/xfs_file.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 4cdc54dc9686..585a8c2eea0f 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -1325,14 +1325,28 @@ __xfs_filemap_fault(
        bool                    write_fault)
 {
        struct inode            *inode = file_inode(vmf->vma->vm_file);
+       struct file             *fpin = NULL;
+       vm_fault_t              ret;
 
        trace_xfs_filemap_fault(XFS_I(inode), order, write_fault);
 
-       if (write_fault)
-               return xfs_write_fault(vmf, order);
        if (IS_DAX(inode))
                return xfs_dax_read_fault(vmf, order);
-       return filemap_fault(vmf);
+
+       if (!write_fault)
+               return filemap_fault(vmf);
+
+       ret = filemap_maybe_emit_fsnotify_event(vmf, &fpin);
+       if (unlikely(ret)) {
+               if (fpin)
+                       fput(fpin);
+               return ret;
+       } else if (fpin) {
+               fput(fpin);
+               return VM_FAULT_RETRY;
+       }
+
+       return xfs_write_fault(vmf, order);
 }
 
 static inline bool
-- 
2.43.0


Reply via email to