0001
0002
0003
0004
0005
0006 #ifndef __XFS_HEALTH_H__
0007 #define __XFS_HEALTH_H__
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 struct xfs_mount;
0035 struct xfs_perag;
0036 struct xfs_inode;
0037 struct xfs_fsop_geom;
0038
0039
0040 #define XFS_SICK_FS_COUNTERS (1 << 0)
0041 #define XFS_SICK_FS_UQUOTA (1 << 1)
0042 #define XFS_SICK_FS_GQUOTA (1 << 2)
0043 #define XFS_SICK_FS_PQUOTA (1 << 3)
0044
0045
0046 #define XFS_SICK_RT_BITMAP (1 << 0)
0047 #define XFS_SICK_RT_SUMMARY (1 << 1)
0048
0049
0050 #define XFS_SICK_AG_SB (1 << 0)
0051 #define XFS_SICK_AG_AGF (1 << 1)
0052 #define XFS_SICK_AG_AGFL (1 << 2)
0053 #define XFS_SICK_AG_AGI (1 << 3)
0054 #define XFS_SICK_AG_BNOBT (1 << 4)
0055 #define XFS_SICK_AG_CNTBT (1 << 5)
0056 #define XFS_SICK_AG_INOBT (1 << 6)
0057 #define XFS_SICK_AG_FINOBT (1 << 7)
0058 #define XFS_SICK_AG_RMAPBT (1 << 8)
0059 #define XFS_SICK_AG_REFCNTBT (1 << 9)
0060
0061
0062 #define XFS_SICK_INO_CORE (1 << 0)
0063 #define XFS_SICK_INO_BMBTD (1 << 1)
0064 #define XFS_SICK_INO_BMBTA (1 << 2)
0065 #define XFS_SICK_INO_BMBTC (1 << 3)
0066 #define XFS_SICK_INO_DIR (1 << 4)
0067 #define XFS_SICK_INO_XATTR (1 << 5)
0068 #define XFS_SICK_INO_SYMLINK (1 << 6)
0069 #define XFS_SICK_INO_PARENT (1 << 7)
0070
0071
0072 #define XFS_SICK_FS_PRIMARY (XFS_SICK_FS_COUNTERS | \
0073 XFS_SICK_FS_UQUOTA | \
0074 XFS_SICK_FS_GQUOTA | \
0075 XFS_SICK_FS_PQUOTA)
0076
0077 #define XFS_SICK_RT_PRIMARY (XFS_SICK_RT_BITMAP | \
0078 XFS_SICK_RT_SUMMARY)
0079
0080 #define XFS_SICK_AG_PRIMARY (XFS_SICK_AG_SB | \
0081 XFS_SICK_AG_AGF | \
0082 XFS_SICK_AG_AGFL | \
0083 XFS_SICK_AG_AGI | \
0084 XFS_SICK_AG_BNOBT | \
0085 XFS_SICK_AG_CNTBT | \
0086 XFS_SICK_AG_INOBT | \
0087 XFS_SICK_AG_FINOBT | \
0088 XFS_SICK_AG_RMAPBT | \
0089 XFS_SICK_AG_REFCNTBT)
0090
0091 #define XFS_SICK_INO_PRIMARY (XFS_SICK_INO_CORE | \
0092 XFS_SICK_INO_BMBTD | \
0093 XFS_SICK_INO_BMBTA | \
0094 XFS_SICK_INO_BMBTC | \
0095 XFS_SICK_INO_DIR | \
0096 XFS_SICK_INO_XATTR | \
0097 XFS_SICK_INO_SYMLINK | \
0098 XFS_SICK_INO_PARENT)
0099
0100
0101
0102 void xfs_fs_mark_sick(struct xfs_mount *mp, unsigned int mask);
0103 void xfs_fs_mark_healthy(struct xfs_mount *mp, unsigned int mask);
0104 void xfs_fs_measure_sickness(struct xfs_mount *mp, unsigned int *sick,
0105 unsigned int *checked);
0106
0107 void xfs_rt_mark_sick(struct xfs_mount *mp, unsigned int mask);
0108 void xfs_rt_mark_healthy(struct xfs_mount *mp, unsigned int mask);
0109 void xfs_rt_measure_sickness(struct xfs_mount *mp, unsigned int *sick,
0110 unsigned int *checked);
0111
0112 void xfs_ag_mark_sick(struct xfs_perag *pag, unsigned int mask);
0113 void xfs_ag_mark_healthy(struct xfs_perag *pag, unsigned int mask);
0114 void xfs_ag_measure_sickness(struct xfs_perag *pag, unsigned int *sick,
0115 unsigned int *checked);
0116
0117 void xfs_inode_mark_sick(struct xfs_inode *ip, unsigned int mask);
0118 void xfs_inode_mark_healthy(struct xfs_inode *ip, unsigned int mask);
0119 void xfs_inode_measure_sickness(struct xfs_inode *ip, unsigned int *sick,
0120 unsigned int *checked);
0121
0122 void xfs_health_unmount(struct xfs_mount *mp);
0123
0124
0125
0126 static inline bool
0127 xfs_fs_has_sickness(struct xfs_mount *mp, unsigned int mask)
0128 {
0129 unsigned int sick, checked;
0130
0131 xfs_fs_measure_sickness(mp, &sick, &checked);
0132 return sick & mask;
0133 }
0134
0135 static inline bool
0136 xfs_rt_has_sickness(struct xfs_mount *mp, unsigned int mask)
0137 {
0138 unsigned int sick, checked;
0139
0140 xfs_rt_measure_sickness(mp, &sick, &checked);
0141 return sick & mask;
0142 }
0143
0144 static inline bool
0145 xfs_ag_has_sickness(struct xfs_perag *pag, unsigned int mask)
0146 {
0147 unsigned int sick, checked;
0148
0149 xfs_ag_measure_sickness(pag, &sick, &checked);
0150 return sick & mask;
0151 }
0152
0153 static inline bool
0154 xfs_inode_has_sickness(struct xfs_inode *ip, unsigned int mask)
0155 {
0156 unsigned int sick, checked;
0157
0158 xfs_inode_measure_sickness(ip, &sick, &checked);
0159 return sick & mask;
0160 }
0161
0162 static inline bool
0163 xfs_fs_is_healthy(struct xfs_mount *mp)
0164 {
0165 return !xfs_fs_has_sickness(mp, -1U);
0166 }
0167
0168 static inline bool
0169 xfs_rt_is_healthy(struct xfs_mount *mp)
0170 {
0171 return !xfs_rt_has_sickness(mp, -1U);
0172 }
0173
0174 static inline bool
0175 xfs_ag_is_healthy(struct xfs_perag *pag)
0176 {
0177 return !xfs_ag_has_sickness(pag, -1U);
0178 }
0179
0180 static inline bool
0181 xfs_inode_is_healthy(struct xfs_inode *ip)
0182 {
0183 return !xfs_inode_has_sickness(ip, -1U);
0184 }
0185
0186 void xfs_fsop_geom_health(struct xfs_mount *mp, struct xfs_fsop_geom *geo);
0187 void xfs_ag_geom_health(struct xfs_perag *pag, struct xfs_ag_geometry *ageo);
0188 void xfs_bulkstat_health(struct xfs_inode *ip, struct xfs_bulkstat *bs);
0189
0190 #endif