diff options
author | Eric Sandeen <sandeen@sandeen.net> | 2014-02-26 23:23:10 -0500 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2014-02-26 23:23:10 -0500 |
commit | ce5028cfe3ca48695b6a128638fe224426d37ebe (patch) | |
tree | e6b62cc91ec0fb74343a3e231d11dd16b55be2b5 /fs/xfs/xfs_ialloc.c | |
parent | db9355c296eb71271bb3807ad4a9d43f6b3c35d3 (diff) |
xfs: modify verifiers to differentiate CRC from other errors
Modify all read & write verifiers to differentiate
between CRC errors and other inconsistencies.
This sets the appropriate error number on bp->b_error,
and then calls xfs_verifier_error() if something went
wrong. That function will issue the appropriate message
to the user.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs/xfs_ialloc.c')
-rw-r--r-- | fs/xfs/xfs_ialloc.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c index 46575860769b..5959b3b4c7c9 100644 --- a/fs/xfs/xfs_ialloc.c +++ b/fs/xfs/xfs_ialloc.c | |||
@@ -1568,18 +1568,17 @@ xfs_agi_read_verify( | |||
1568 | struct xfs_buf *bp) | 1568 | struct xfs_buf *bp) |
1569 | { | 1569 | { |
1570 | struct xfs_mount *mp = bp->b_target->bt_mount; | 1570 | struct xfs_mount *mp = bp->b_target->bt_mount; |
1571 | int agi_ok = 1; | ||
1572 | 1571 | ||
1573 | if (xfs_sb_version_hascrc(&mp->m_sb)) | 1572 | if (xfs_sb_version_hascrc(&mp->m_sb) && |
1574 | agi_ok = xfs_buf_verify_cksum(bp, XFS_AGI_CRC_OFF); | 1573 | !xfs_buf_verify_cksum(bp, XFS_AGI_CRC_OFF)) |
1575 | 1574 | xfs_buf_ioerror(bp, EFSBADCRC); | |
1576 | agi_ok = agi_ok && xfs_agi_verify(bp); | 1575 | else if (XFS_TEST_ERROR(!xfs_agi_verify(bp), mp, |
1577 | 1576 | XFS_ERRTAG_IALLOC_READ_AGI, | |
1578 | if (unlikely(XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI, | 1577 | XFS_RANDOM_IALLOC_READ_AGI)) |
1579 | XFS_RANDOM_IALLOC_READ_AGI))) { | ||
1580 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | ||
1581 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 1578 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
1582 | } | 1579 | |
1580 | if (bp->b_error) | ||
1581 | xfs_verifier_error(bp); | ||
1583 | } | 1582 | } |
1584 | 1583 | ||
1585 | static void | 1584 | static void |
@@ -1590,8 +1589,8 @@ xfs_agi_write_verify( | |||
1590 | struct xfs_buf_log_item *bip = bp->b_fspriv; | 1589 | struct xfs_buf_log_item *bip = bp->b_fspriv; |
1591 | 1590 | ||
1592 | if (!xfs_agi_verify(bp)) { | 1591 | if (!xfs_agi_verify(bp)) { |
1593 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | ||
1594 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 1592 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
1593 | xfs_verifier_error(bp); | ||
1595 | return; | 1594 | return; |
1596 | } | 1595 | } |
1597 | 1596 | ||