summaryrefslogtreecommitdiff
path: root/fs/xfs/xfs_inode.c
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2020-10-25 17:14:40 -0700
committerDarrick J. Wong <darrick.wong@oracle.com>2020-10-26 18:32:15 -0700
commit956393a079620a451990850d8185b78111c33b99 (patch)
tree05f05bf027e3818ab843dba38830f0e912a114a2 /fs/xfs/xfs_inode.c
parent8886e1b679bca7cb424940a5299ec7937b15fe44 (diff)
xfs: report ag header corruption errors to the health tracking system
Whenever we encounter a corrupt AG header, we should report that to the health monitoring system for later reporting. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs/xfs/xfs_inode.c')
-rw-r--r--fs/xfs/xfs_inode.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 2bfbcf28b1bd..bab41ad765bb 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -35,6 +35,7 @@
#include "xfs_log.h"
#include "xfs_bmap_btree.h"
#include "xfs_reflink.h"
+#include "xfs_health.h"
kmem_zone_t *xfs_inode_zone;
@@ -833,6 +834,8 @@ xfs_ialloc(
*/
if ((pip && ino == pip->i_ino) || !xfs_verify_dir_ino(mp, ino)) {
xfs_alert(mp, "Allocated a known in-use inode 0x%llx!", ino);
+ xfs_agno_mark_sick(mp, XFS_INO_TO_AGNO(mp, ino),
+ XFS_SICK_AG_INOBT);
return -EFSCORRUPTED;
}
@@ -2123,6 +2126,7 @@ xfs_iunlink_update_bucket(
*/
if (old_value == new_agino) {
xfs_buf_mark_corrupt(agibp);
+ xfs_agno_mark_sick(tp->t_mountp, agno, XFS_SICK_AG_AGI);
return -EFSCORRUPTED;
}
@@ -2188,6 +2192,7 @@ xfs_iunlink_update_inode(
if (!xfs_verify_agino_or_null(mp, agno, old_value)) {
xfs_inode_verifier_error(ip, -EFSCORRUPTED, __func__, dip,
sizeof(*dip), __this_address);
+ xfs_inode_mark_sick(ip, XFS_SICK_INO_CORE);
error = -EFSCORRUPTED;
goto out;
}
@@ -2202,6 +2207,7 @@ xfs_iunlink_update_inode(
if (next_agino != NULLAGINO) {
xfs_inode_verifier_error(ip, -EFSCORRUPTED, __func__,
dip, sizeof(*dip), __this_address);
+ xfs_inode_mark_sick(ip, XFS_SICK_INO_CORE);
error = -EFSCORRUPTED;
}
goto out;
@@ -2256,6 +2262,7 @@ xfs_iunlink(
if (next_agino == agino ||
!xfs_verify_agino_or_null(mp, agno, next_agino)) {
xfs_buf_mark_corrupt(agibp);
+ xfs_agno_mark_sick(mp, agno, XFS_SICK_AG_AGI);
return -EFSCORRUPTED;
}
@@ -2390,6 +2397,7 @@ xfs_iunlink_map_prev(
XFS_CORRUPTION_ERROR(__func__,
XFS_ERRLEVEL_LOW, mp,
*dipp, sizeof(**dipp));
+ xfs_ag_mark_sick(pag, XFS_SICK_AG_AGI);
error = -EFSCORRUPTED;
return error;
}
@@ -2435,6 +2443,7 @@ xfs_iunlink_remove(
if (!xfs_verify_agino(mp, agno, head_agino)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
agi, sizeof(*agi));
+ xfs_agno_mark_sick(mp, agno, XFS_SICK_AG_AGI);
return -EFSCORRUPTED;
}