]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
xfs: don't report metadata inodes to fserror
authorDarrick J. Wong <djwong@kernel.org>
Wed, 18 Feb 2026 23:25:38 +0000 (15:25 -0800)
committerCarlos Maiolino <cem@kernel.org>
Wed, 25 Feb 2026 12:58:49 +0000 (13:58 +0100)
Internal metadata inodes are not exposed to userspace programs, so it
makes no sense to pass them to the fserror functions (aka fsnotify).
Instead, report metadata file problems as general filesystem corruption.

Fixes: 5eb4cb18e445d0 ("xfs: convey metadata health events to the health monitor")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/xfs_health.c

index 169123772cb39b4e7c45b439164319da0b50a6f1..6475159eb9302c09610cac970a6f6c8219cdccd2 100644 (file)
@@ -314,6 +314,18 @@ xfs_rgno_mark_sick(
        xfs_rtgroup_put(rtg);
 }
 
+static inline void xfs_inode_report_fserror(struct xfs_inode *ip)
+{
+       /* Report metadata inodes as general filesystem corruption */
+       if (xfs_is_internal_inode(ip)) {
+               fserror_report_metadata(ip->i_mount->m_super, -EFSCORRUPTED,
+                               GFP_NOFS);
+               return;
+       }
+
+       fserror_report_file_metadata(VFS_I(ip), -EFSCORRUPTED, GFP_NOFS);
+}
+
 /* Mark the unhealthy parts of an inode. */
 void
 xfs_inode_mark_sick(
@@ -339,7 +351,7 @@ xfs_inode_mark_sick(
        inode_state_clear(VFS_I(ip), I_DONTCACHE);
        spin_unlock(&VFS_I(ip)->i_lock);
 
-       fserror_report_file_metadata(VFS_I(ip), -EFSCORRUPTED, GFP_NOFS);
+       xfs_inode_report_fserror(ip);
        if (mask)
                xfs_healthmon_report_inode(ip, XFS_HEALTHMON_SICK, old_mask,
                                mask);
@@ -371,7 +383,7 @@ xfs_inode_mark_corrupt(
        inode_state_clear(VFS_I(ip), I_DONTCACHE);
        spin_unlock(&VFS_I(ip)->i_lock);
 
-       fserror_report_file_metadata(VFS_I(ip), -EFSCORRUPTED, GFP_NOFS);
+       xfs_inode_report_fserror(ip);
        if (mask)
                xfs_healthmon_report_inode(ip, XFS_HEALTHMON_CORRUPT, old_mask,
                                mask);