From: Eric Sandeen <sandeen@sandeen.net>
To: xfs-oss <xfs@oss.sgi.com>
Subject: [PATCH 6/7] xfs: add xfs_verifier_error()
Date: Mon, 10 Feb 2014 21:14:02 -0600 [thread overview]
Message-ID: <52F9957A.4050301@sandeen.net> (raw)
In-Reply-To: <52F99426.3010409@sandeen.net>
We want to distinguish between corruption and CRC errors.
In addition, the full stack trace on verifier errors
seems less than helpful; it looks more like an oops than
corruption.
Create a new function to specifically alert the user to
verifier errors, which can differentiate between
EFSCORRUPTED and CRC mismatches. It doesn't dump stack
unless the xfs error level is turned up high.
Define a new error message (EFSBADCRC) to clearly identify
CRC errors. (Defined to EILSEQ, bad byte sequence)
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
fs/xfs/xfs_error.c | 22 ++++++++++++++++++++++
fs/xfs/xfs_error.h | 1 +
fs/xfs/xfs_linux.h | 1 +
3 files changed, 24 insertions(+), 0 deletions(-)
V2: Use __builtin_return_address(0) to avoid the macro
with __func__; this can eventually be pushed into the verifiers
themselves to issue a specific warning for each failure.
diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c
index 9995b80..db19133 100644
--- a/fs/xfs/xfs_error.c
+++ b/fs/xfs/xfs_error.c
@@ -178,3 +178,25 @@ xfs_corruption_error(
xfs_error_report(tag, level, mp, filename, linenum, ra);
xfs_alert(mp, "Corruption detected. Unmount and run xfs_repair");
}
+
+/*
+ * Warnings specifically for verifier errors. Differentiate CRC vs. invalid
+ * values, and omit the stack trace unless the error level is tuned high.
+ */
+void
+xfs_verifier_error(
+ struct xfs_buf *bp)
+{
+ struct xfs_mount *mp = bp->b_target->bt_mount;
+
+ xfs_alert(mp,
+"Metadata %s detected at %pF, block 0x%llx. Unmount and run xfs_repair",
+ bp->b_error == EFSBADCRC ? "CRC error" : "corruption",
+ __builtin_return_address(0), bp->b_bn);
+
+ if (xfs_error_level >= XFS_ERRLEVEL_LOW)
+ xfs_hex_dump(bp->b_addr, 64);
+
+ if (xfs_error_level >= XFS_ERRLEVEL_HIGH)
+ xfs_stack_trace();
+}
diff --git a/fs/xfs/xfs_error.h b/fs/xfs/xfs_error.h
index 079a367..c1c57d4 100644
--- a/fs/xfs/xfs_error.h
+++ b/fs/xfs/xfs_error.h
@@ -34,6 +34,7 @@ extern void xfs_error_report(const char *tag, int level, struct xfs_mount *mp,
extern void xfs_corruption_error(const char *tag, int level,
struct xfs_mount *mp, void *p, const char *filename,
int linenum, inst_t *ra);
+extern void xfs_verifier_error(struct xfs_buf *bp);
#define XFS_ERROR_REPORT(e, lvl, mp) \
xfs_error_report(e, lvl, mp, __FILE__, __LINE__, __return_address)
diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
index e8fed74..016ea8d 100644
--- a/fs/xfs/xfs_linux.h
+++ b/fs/xfs/xfs_linux.h
@@ -179,6 +179,7 @@ typedef __uint64_t __psunsigned_t;
#define ENOATTR ENODATA /* Attribute not found */
#define EWRONGFS EINVAL /* Mount with wrong filesystem type */
#define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */
+#define EFSBADCRC EILSEQ /* Bad CRC detected */
#define SYNCHRONIZE() barrier()
#define __return_address __builtin_return_address(0)
-- 1.7.1
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2014-02-11 3:14 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-11 3:08 [PATCH 0/7 V2] xfs: verifier modification series Eric Sandeen
2014-02-11 3:09 ` [PATCH 1/7] xfs: limit superblock corruption errors to actual corruption Eric Sandeen
2014-02-11 3:09 ` [PATCH 2/7] xfs: skip pointless CRC updates after verifier failures Eric Sandeen
2014-02-11 3:10 ` [PATCH 3/7] xfs: Use defines for CRC offsets in all cases Eric Sandeen
2014-02-11 3:11 ` [PATCH 4/7] xfs: add helper for verifying checksums on xfs_bufs Eric Sandeen
2014-02-11 3:12 ` [PATCH 5/7] xfs: add helper for updating " Eric Sandeen
2014-02-11 3:14 ` Eric Sandeen [this message]
2014-02-11 19:54 ` [PATCH 6/7] xfs: add xfs_verifier_error() Eric Sandeen
2014-02-11 22:27 ` Dave Chinner
2014-02-14 3:56 ` Eric Sandeen
2014-02-11 3:15 ` [PATCH 7/7] xfs: modify verifiers to differentiate CRC failures from other errors Eric Sandeen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52F9957A.4050301@sandeen.net \
--to=sandeen@sandeen.net \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox