diff options
author | Eric Sandeen <sandeen@redhat.com> | 2014-02-18 23:39:35 -0500 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2014-02-18 23:39:35 -0500 |
commit | 5ef11eb0700f806c4671ba33e5befa784a2f70ef (patch) | |
tree | 9746beb7ff88023b83ed8b1a42e2401bbaa0eaa1 /fs/xfs/xfs_sb.c | |
parent | daba5427dad6b260256053f914de2c0b79f7a79f (diff) |
xfs: limit superblock corruption errors to actual corruption
Today, if
xfs_sb_read_verify
xfs_sb_verify
xfs_mount_validate_sb
detects superblock corruption, it'll be extremely noisy, dumping
2 stacks, 2 hexdumps, etc.
This is because we call XFS_CORRUPTION_ERROR in xfs_mount_validate_sb
as well as in xfs_sb_read_verify.
Also, *any* errors in xfs_mount_validate_sb which are not corruption
per se; things like too-big-blocksize, bad version, bad magic, v1 dirs,
rw-incompat etc - things which do not return EFSCORRUPTED - will
still do the whole XFS_CORRUPTION_ERROR spew when xfs_sb_read_verify
sees any error at all. And it suggests to the user that they
should run xfs_repair, even if the root cause of the mount failure
is a simple incompatibility.
I'll submit that the probably-not-corrupted errors don't warrant
this much noise, so this patch removes the warning for anything
other than EFSCORRUPTED returns, and replaces the lower-level
XFS_CORRUPTION_ERROR with an xfs_notice().
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs/xfs_sb.c')
-rw-r--r-- | fs/xfs/xfs_sb.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/xfs/xfs_sb.c b/fs/xfs/xfs_sb.c index 359b19a4df42..1e116794bb66 100644 --- a/fs/xfs/xfs_sb.c +++ b/fs/xfs/xfs_sb.c | |||
@@ -295,8 +295,7 @@ xfs_mount_validate_sb( | |||
295 | sbp->sb_dblocks == 0 || | 295 | sbp->sb_dblocks == 0 || |
296 | sbp->sb_dblocks > XFS_MAX_DBLOCKS(sbp) || | 296 | sbp->sb_dblocks > XFS_MAX_DBLOCKS(sbp) || |
297 | sbp->sb_dblocks < XFS_MIN_DBLOCKS(sbp))) { | 297 | sbp->sb_dblocks < XFS_MIN_DBLOCKS(sbp))) { |
298 | XFS_CORRUPTION_ERROR("SB sanity check failed", | 298 | xfs_notice(mp, "SB sanity check failed"); |
299 | XFS_ERRLEVEL_LOW, mp, sbp); | ||
300 | return XFS_ERROR(EFSCORRUPTED); | 299 | return XFS_ERROR(EFSCORRUPTED); |
301 | } | 300 | } |
302 | 301 | ||
@@ -625,7 +624,7 @@ xfs_sb_read_verify( | |||
625 | 624 | ||
626 | out_error: | 625 | out_error: |
627 | if (error) { | 626 | if (error) { |
628 | if (error != EWRONGFS) | 627 | if (error == EFSCORRUPTED) |
629 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, | 628 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, |
630 | mp, bp->b_addr); | 629 | mp, bp->b_addr); |
631 | xfs_buf_ioerror(bp, error); | 630 | xfs_buf_ioerror(bp, error); |