xfs: don't assert when on-disk btree pointers are garbage
Don't ASSERT when we encounter bad on-disk btree pointers in the debug check functions. Log the error to leave breadcrumbs and let the upper layers deal with it. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
parent
e63a1008ee
commit
85ae01098c
|
@ -246,16 +246,25 @@ xfs_btree_check_ptr(
|
||||||
int level)
|
int level)
|
||||||
{
|
{
|
||||||
if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
|
if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
|
||||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp,
|
if (xfs_btree_check_lptr(cur, be64_to_cpu((&ptr->l)[index]),
|
||||||
xfs_btree_check_lptr(cur,
|
level))
|
||||||
be64_to_cpu((&ptr->l)[index]), level));
|
return 0;
|
||||||
|
xfs_err(cur->bc_mp,
|
||||||
|
"Inode %llu fork %d: Corrupt btree %d pointer at level %d index %d.",
|
||||||
|
cur->bc_private.b.ip->i_ino,
|
||||||
|
cur->bc_private.b.whichfork, cur->bc_btnum,
|
||||||
|
level, index);
|
||||||
} else {
|
} else {
|
||||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp,
|
if (xfs_btree_check_sptr(cur, be32_to_cpu((&ptr->s)[index]),
|
||||||
xfs_btree_check_sptr(cur,
|
level))
|
||||||
be32_to_cpu((&ptr->s)[index]), level));
|
return 0;
|
||||||
|
xfs_err(cur->bc_mp,
|
||||||
|
"AG %u: Corrupt btree %d pointer at level %d index %d.",
|
||||||
|
cur->bc_private.a.agno, cur->bc_btnum,
|
||||||
|
level, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return -EFSCORRUPTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
Loading…
Reference in New Issue