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_btree.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_btree.c')
-rw-r--r-- | fs/xfs/xfs_ialloc_btree.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/fs/xfs/xfs_ialloc_btree.c b/fs/xfs/xfs_ialloc_btree.c index 0028c50c1e2b..7e309b11e87d 100644 --- a/fs/xfs/xfs_ialloc_btree.c +++ b/fs/xfs/xfs_ialloc_btree.c | |||
@@ -243,12 +243,14 @@ static void | |||
243 | xfs_inobt_read_verify( | 243 | xfs_inobt_read_verify( |
244 | struct xfs_buf *bp) | 244 | struct xfs_buf *bp) |
245 | { | 245 | { |
246 | if (!(xfs_btree_sblock_verify_crc(bp) && | 246 | if (!xfs_btree_sblock_verify_crc(bp)) |
247 | xfs_inobt_verify(bp))) { | 247 | xfs_buf_ioerror(bp, EFSBADCRC); |
248 | trace_xfs_btree_corrupt(bp, _RET_IP_); | 248 | else if (!xfs_inobt_verify(bp)) |
249 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, | ||
250 | bp->b_target->bt_mount, bp->b_addr); | ||
251 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 249 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
250 | |||
251 | if (bp->b_error) { | ||
252 | trace_xfs_btree_corrupt(bp, _RET_IP_); | ||
253 | xfs_verifier_error(bp); | ||
252 | } | 254 | } |
253 | } | 255 | } |
254 | 256 | ||
@@ -258,9 +260,8 @@ xfs_inobt_write_verify( | |||
258 | { | 260 | { |
259 | if (!xfs_inobt_verify(bp)) { | 261 | if (!xfs_inobt_verify(bp)) { |
260 | trace_xfs_btree_corrupt(bp, _RET_IP_); | 262 | trace_xfs_btree_corrupt(bp, _RET_IP_); |
261 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, | ||
262 | bp->b_target->bt_mount, bp->b_addr); | ||
263 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 263 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
264 | xfs_verifier_error(bp); | ||
264 | return; | 265 | return; |
265 | } | 266 | } |
266 | xfs_btree_sblock_calc_crc(bp); | 267 | xfs_btree_sblock_calc_crc(bp); |