xfs: report directory tree corruption in the health information
authorDarrick J. Wong <djwong@kernel.org>
Mon, 22 Apr 2024 16:48:21 +0000 (09:48 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 23 Apr 2024 23:55:17 +0000 (16:55 -0700)
Report directories that are the source of corruption in the directory
tree.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_fs.h
fs/xfs/libxfs/xfs_health.h
fs/xfs/scrub/health.c
fs/xfs/xfs_health.c

index 85f2a7e20ac00175ed7b3ea33a5688bed1218648..7ae1912cdbfc24054bc382c90e3f45841d601fae 100644 (file)
@@ -411,6 +411,7 @@ struct xfs_bulkstat {
 #define XFS_BS_SICK_XATTR      (1 << 5)  /* extended attributes */
 #define XFS_BS_SICK_SYMLINK    (1 << 6)  /* symbolic link remote target */
 #define XFS_BS_SICK_PARENT     (1 << 7)  /* parent pointers */
+#define XFS_BS_SICK_DIRTREE    (1 << 8)  /* directory tree structure */
 
 /*
  * Project quota id helpers (previously projid was 16bit only
index 3c64b5f9bd6817af320d86e6839d2933293e7dea..b0edb4288e59297ea5a6a54c67da1d70ea471d0c 100644 (file)
@@ -95,6 +95,7 @@ struct xfs_da_args;
 
 /* Don't propagate sick status to ag health summary during inactivation */
 #define XFS_SICK_INO_FORGET    (1 << 12)
+#define XFS_SICK_INO_DIRTREE   (1 << 13)  /* directory tree structure */
 
 /* Primary evidence of health problems in a given group. */
 #define XFS_SICK_FS_PRIMARY    (XFS_SICK_FS_COUNTERS | \
@@ -125,7 +126,8 @@ struct xfs_da_args;
                                 XFS_SICK_INO_DIR | \
                                 XFS_SICK_INO_XATTR | \
                                 XFS_SICK_INO_SYMLINK | \
-                                XFS_SICK_INO_PARENT)
+                                XFS_SICK_INO_PARENT | \
+                                XFS_SICK_INO_DIRTREE)
 
 #define XFS_SICK_INO_ZAPPED    (XFS_SICK_INO_BMBTD_ZAPPED | \
                                 XFS_SICK_INO_BMBTA_ZAPPED | \
index 9020a6bef7f14ccf97e12f7a64fda26daf5a58a5..b712a8bd34f5435b87c448c0c2b8d399ec2236bf 100644 (file)
@@ -108,6 +108,7 @@ static const struct xchk_health_map type_to_health_flag[XFS_SCRUB_TYPE_NR] = {
        [XFS_SCRUB_TYPE_FSCOUNTERS]     = { XHG_FS,  XFS_SICK_FS_COUNTERS },
        [XFS_SCRUB_TYPE_QUOTACHECK]     = { XHG_FS,  XFS_SICK_FS_QUOTACHECK },
        [XFS_SCRUB_TYPE_NLINKS]         = { XHG_FS,  XFS_SICK_FS_NLINKS },
+       [XFS_SCRUB_TYPE_DIRTREE]        = { XHG_INO, XFS_SICK_INO_DIRTREE },
 };
 
 /* Return the health status mask for this scrub type. */
index b39f959146bc1dca7bb2c70bf6404cd04af08409..10f116d093a225177be3c5222df765aad21fa757 100644 (file)
@@ -470,6 +470,7 @@ static const struct ioctl_sick_map ino_map[] = {
        { XFS_SICK_INO_BMBTA_ZAPPED,    XFS_BS_SICK_BMBTA },
        { XFS_SICK_INO_DIR_ZAPPED,      XFS_BS_SICK_DIR },
        { XFS_SICK_INO_SYMLINK_ZAPPED,  XFS_BS_SICK_SYMLINK },
+       { XFS_SICK_INO_DIRTREE, XFS_BS_SICK_DIRTREE },
        { 0, 0 },
 };