[PATCH v2 16/16] xfs: add pre-content fsnotify hook for write faults

Josef Bacik
2024-08-08T19:28:37Z

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 <josef@toxicpanda.com>
---
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