xfs: always log corruption errors
Make sure we log something to dmesg whenever we return -EFSCORRUPTED up the call stack. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
@@ -504,6 +504,7 @@ xfs_da3_split(
|
||||
node = oldblk->bp->b_addr;
|
||||
if (node->hdr.info.forw) {
|
||||
if (be32_to_cpu(node->hdr.info.forw) != addblk->blkno) {
|
||||
xfs_buf_corruption_error(oldblk->bp);
|
||||
error = -EFSCORRUPTED;
|
||||
goto out;
|
||||
}
|
||||
@@ -516,6 +517,7 @@ xfs_da3_split(
|
||||
node = oldblk->bp->b_addr;
|
||||
if (node->hdr.info.back) {
|
||||
if (be32_to_cpu(node->hdr.info.back) != addblk->blkno) {
|
||||
xfs_buf_corruption_error(oldblk->bp);
|
||||
error = -EFSCORRUPTED;
|
||||
goto out;
|
||||
}
|
||||
@@ -1541,8 +1543,10 @@ xfs_da3_node_lookup_int(
|
||||
break;
|
||||
}
|
||||
|
||||
if (magic != XFS_DA_NODE_MAGIC && magic != XFS_DA3_NODE_MAGIC)
|
||||
if (magic != XFS_DA_NODE_MAGIC && magic != XFS_DA3_NODE_MAGIC) {
|
||||
xfs_buf_corruption_error(blk->bp);
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
blk->magic = XFS_DA_NODE_MAGIC;
|
||||
|
||||
@@ -1554,15 +1558,18 @@ xfs_da3_node_lookup_int(
|
||||
btree = dp->d_ops->node_tree_p(node);
|
||||
|
||||
/* Tree taller than we can handle; bail out! */
|
||||
if (nodehdr.level >= XFS_DA_NODE_MAXDEPTH)
|
||||
if (nodehdr.level >= XFS_DA_NODE_MAXDEPTH) {
|
||||
xfs_buf_corruption_error(blk->bp);
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
/* Check the level from the root. */
|
||||
if (blkno == args->geo->leafblk)
|
||||
expected_level = nodehdr.level - 1;
|
||||
else if (expected_level != nodehdr.level)
|
||||
else if (expected_level != nodehdr.level) {
|
||||
xfs_buf_corruption_error(blk->bp);
|
||||
return -EFSCORRUPTED;
|
||||
else
|
||||
} else
|
||||
expected_level--;
|
||||
|
||||
max = nodehdr.count;
|
||||
@@ -1612,12 +1619,17 @@ xfs_da3_node_lookup_int(
|
||||
}
|
||||
|
||||
/* We can't point back to the root. */
|
||||
if (blkno == args->geo->leafblk)
|
||||
if (blkno == args->geo->leafblk) {
|
||||
XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW,
|
||||
dp->i_mount);
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
}
|
||||
|
||||
if (expected_level != 0)
|
||||
if (expected_level != 0) {
|
||||
XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, dp->i_mount);
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* A leaf block that ends in the hashval that we are interested in
|
||||
|
Reference in New Issue
Block a user