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_dir2_data.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_dir2_data.c')
-rw-r--r-- | fs/xfs/xfs_dir2_data.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/xfs/xfs_dir2_data.c b/fs/xfs/xfs_dir2_data.c index 74ae85e2556c..afa4ad523f3f 100644 --- a/fs/xfs/xfs_dir2_data.c +++ b/fs/xfs/xfs_dir2_data.c | |||
@@ -241,7 +241,6 @@ static void | |||
241 | xfs_dir3_data_reada_verify( | 241 | xfs_dir3_data_reada_verify( |
242 | struct xfs_buf *bp) | 242 | struct xfs_buf *bp) |
243 | { | 243 | { |
244 | struct xfs_mount *mp = bp->b_target->bt_mount; | ||
245 | struct xfs_dir2_data_hdr *hdr = bp->b_addr; | 244 | struct xfs_dir2_data_hdr *hdr = bp->b_addr; |
246 | 245 | ||
247 | switch (hdr->magic) { | 246 | switch (hdr->magic) { |
@@ -255,8 +254,8 @@ xfs_dir3_data_reada_verify( | |||
255 | xfs_dir3_data_verify(bp); | 254 | xfs_dir3_data_verify(bp); |
256 | return; | 255 | return; |
257 | default: | 256 | default: |
258 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, hdr); | ||
259 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 257 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
258 | xfs_verifier_error(bp); | ||
260 | break; | 259 | break; |
261 | } | 260 | } |
262 | } | 261 | } |
@@ -267,12 +266,14 @@ xfs_dir3_data_read_verify( | |||
267 | { | 266 | { |
268 | struct xfs_mount *mp = bp->b_target->bt_mount; | 267 | struct xfs_mount *mp = bp->b_target->bt_mount; |
269 | 268 | ||
270 | if ((xfs_sb_version_hascrc(&mp->m_sb) && | 269 | if (xfs_sb_version_hascrc(&mp->m_sb) && |
271 | !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) || | 270 | !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) |
272 | !xfs_dir3_data_verify(bp)) { | 271 | xfs_buf_ioerror(bp, EFSBADCRC); |
273 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 272 | else if (!xfs_dir3_data_verify(bp)) |
274 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 273 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
275 | } | 274 | |
275 | if (bp->b_error) | ||
276 | xfs_verifier_error(bp); | ||
276 | } | 277 | } |
277 | 278 | ||
278 | static void | 279 | static void |
@@ -284,8 +285,8 @@ xfs_dir3_data_write_verify( | |||
284 | struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; | 285 | struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; |
285 | 286 | ||
286 | if (!xfs_dir3_data_verify(bp)) { | 287 | if (!xfs_dir3_data_verify(bp)) { |
287 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | ||
288 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 288 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
289 | xfs_verifier_error(bp); | ||
289 | return; | 290 | return; |
290 | } | 291 | } |
291 | 292 | ||