]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: add pre-content fsnotify hook for DAX faults
authorJosef Bacik <josef@toxicpanda.com>
Fri, 15 Nov 2024 15:30:30 +0000 (10:30 -0500)
committerJan Kara <jack@suse.cz>
Wed, 11 Dec 2024 16:28:41 +0000 (17:28 +0100)
xfs has it's own handling for DAX faults, so we need to add the
pre-content fsnotify hook for this case. Other faults go through
filemap_fault so they're handled properly there.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://patch.msgid.link/9eccdf59a65b72f0a1a5e2f2b9bff8eda2d4f2d9.1731684329.git.josef@toxicpanda.com
fs/xfs/xfs_file.c

index 4a0b7de4f7aedc177ff5abbd4ca9d4c94eaa6658..c488ae26b23d001fcff60de7e1a48ef78b6e5337 100644 (file)
@@ -1443,6 +1443,9 @@ xfs_dax_read_fault(
 
        trace_xfs_read_fault(ip, order);
 
+       ret = filemap_fsnotify_fault(vmf);
+       if (unlikely(ret))
+               return ret;
        xfs_ilock(ip, XFS_MMAPLOCK_SHARED);
        ret = xfs_dax_fault_locked(vmf, order, false);
        xfs_iunlock(ip, XFS_MMAPLOCK_SHARED);
@@ -1471,6 +1474,16 @@ xfs_write_fault(
        vm_fault_t              ret;
 
        trace_xfs_write_fault(ip, order);
+       /*
+        * Usually we get here from ->page_mkwrite callback but in case of DAX
+        * we will get here also for ordinary write fault. Handle HSM
+        * notifications for that case.
+        */
+       if (IS_DAX(inode)) {
+               ret = filemap_fsnotify_fault(vmf);
+               if (unlikely(ret))
+                       return ret;
+       }
 
        sb_start_pagefault(inode->i_sb);
        file_update_time(vmf->vma->vm_file);