From: Darrick J. Wong <djwong@xxxxxxxxxx> Report directories that are the source of corruption in the directory tree. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- libxfs/xfs_fs.h | 1 + libxfs/xfs_health.h | 4 +++- man/man2/ioctl_xfs_bulkstat.2 | 3 +++ man/man2/ioctl_xfs_fsbulkstat.2 | 3 +++ spaceman/health.c | 4 ++++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/libxfs/xfs_fs.h b/libxfs/xfs_fs.h index 48f38694f12..2499a20f5f7 100644 --- a/libxfs/xfs_fs.h +++ b/libxfs/xfs_fs.h @@ -413,6 +413,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 diff --git a/libxfs/xfs_health.h b/libxfs/xfs_health.h index df07c5877ba..bca1990f71d 100644 --- a/libxfs/xfs_health.h +++ b/libxfs/xfs_health.h @@ -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 | \ diff --git a/man/man2/ioctl_xfs_bulkstat.2 b/man/man2/ioctl_xfs_bulkstat.2 index 3203ca0c5d2..b6d51aa4381 100644 --- a/man/man2/ioctl_xfs_bulkstat.2 +++ b/man/man2/ioctl_xfs_bulkstat.2 @@ -326,6 +326,9 @@ Symbolic link target. .TP .B XFS_BS_SICK_PARENT Parent pointers. +.TP +.B XFS_BS_SICK_DIRTREE +Directory is the source of corruption in the directory tree. .RE .SH ERRORS Error codes can be one of, but are not limited to, the following: diff --git a/man/man2/ioctl_xfs_fsbulkstat.2 b/man/man2/ioctl_xfs_fsbulkstat.2 index 3f059942a21..cd38d2fd6f2 100644 --- a/man/man2/ioctl_xfs_fsbulkstat.2 +++ b/man/man2/ioctl_xfs_fsbulkstat.2 @@ -239,6 +239,9 @@ Symbolic link target. .TP .B XFS_BS_SICK_PARENT Parent pointers. +.TP +.B XFS_BS_SICK_DIRTREE +Directory is the source of corruption in the directory tree. .RE .SH RETURN VALUE On error, \-1 is returned, and diff --git a/spaceman/health.c b/spaceman/health.c index ab5bc074988..8ba78152cb6 100644 --- a/spaceman/health.c +++ b/spaceman/health.c @@ -169,6 +169,10 @@ static const struct flag_map inode_flags[] = { .mask = XFS_BS_SICK_PARENT, .descr = "parent pointers", }, + { + .mask = XFS_BS_SICK_DIRTREE, + .descr = "directory tree structure", + }, {0}, };