From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: sandeen@sandeen.net, darrick.wong@oracle.com
Cc: linux-xfs@vger.kernel.org
Subject: [PATCH 11/11] xfs_scrub: create a new category for unfixable errors
Date: Thu, 05 Sep 2019 20:40:03 -0700 [thread overview]
Message-ID: <156774120361.2645432.13655152725555275236.stgit@magnolia> (raw)
In-Reply-To: <156774113533.2645432.14942831726168941966.stgit@magnolia>
From: Darrick J. Wong <darrick.wong@oracle.com>
There's nothing that xfs_scrub (or XFS) can do about media errors for
data file blocks -- the data are gone. Create a new category for these
unfixable errors so that we don't advise the user to take further action
that won't fix the problem.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
scrub/common.c | 9 ++++++++-
scrub/common.h | 3 +++
scrub/phase4.c | 3 ++-
scrub/phase5.c | 2 +-
scrub/phase6.c | 2 +-
scrub/xfs_scrub.c | 15 +++++++++++++--
scrub/xfs_scrub.h | 1 +
7 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/scrub/common.c b/scrub/common.c
index a814f568..79ec9fd6 100644
--- a/scrub/common.c
+++ b/scrub/common.c
@@ -36,7 +36,8 @@ xfs_scrub_excessive_errors(
bool ret;
pthread_mutex_lock(&ctx->lock);
- ret = ctx->max_errors > 0 && ctx->errors_found >= ctx->max_errors;
+ ret = ctx->max_errors > 0 &&
+ (ctx->unfixable_errors + ctx->errors_found) >= ctx->max_errors;
pthread_mutex_unlock(&ctx->lock);
return ret;
@@ -47,6 +48,10 @@ static struct {
int loglevel;
} err_levels[] = {
[S_ERROR] = { .string = "Error", .loglevel = LOG_ERR },
+ [S_UNFIXABLE] = {
+ .string = "Unfixable error",
+ .loglevel = LOG_ERR
+ },
[S_WARN] = { .string = "Warning", .loglevel = LOG_WARNING },
[S_REPAIR] = { .string = "Repaired", .loglevel = LOG_WARNING },
[S_INFO] = { .string = "Info", .loglevel = LOG_INFO },
@@ -108,6 +113,8 @@ __str_out(
out_record:
if (error) /* A syscall failed */
ctx->runtime_errors++;
+ else if (level == S_UNFIXABLE)
+ ctx->unfixable_errors++;
else if (level == S_ERROR)
ctx->errors_found++;
else if (level == S_WARN)
diff --git a/scrub/common.h b/scrub/common.h
index 1b9ad48f..e8485b4c 100644
--- a/scrub/common.h
+++ b/scrub/common.h
@@ -17,6 +17,7 @@ bool xfs_scrub_excessive_errors(struct scrub_ctx *ctx);
enum error_level {
S_ERROR = 0,
+ S_UNFIXABLE,
S_WARN,
S_REPAIR,
S_INFO,
@@ -40,6 +41,8 @@ void __str_out(struct scrub_ctx *ctx, const char *descr, enum error_level level,
__str_out(ctx, str, S_REPAIR, 0, __FILE__, __LINE__, __VA_ARGS__)
#define record_preen(ctx, str, ...) \
__str_out(ctx, str, S_PREEN, 0, __FILE__, __LINE__, __VA_ARGS__)
+#define str_unfixable_error(ctx, str, ...) \
+ __str_out(ctx, str, S_UNFIXABLE, 0, __FILE__, __LINE__, __VA_ARGS__)
#define dbg_printf(fmt, ...) \
do {if (debug > 1) {printf(fmt, __VA_ARGS__);}} while (0)
diff --git a/scrub/phase4.c b/scrub/phase4.c
index eb30c189..07927036 100644
--- a/scrub/phase4.c
+++ b/scrub/phase4.c
@@ -99,7 +99,8 @@ xfs_process_action_items(
workqueue_destroy(&wq);
pthread_mutex_lock(&ctx->lock);
- if (moveon && ctx->errors_found == 0 && want_fstrim) {
+ if (moveon && ctx->errors_found == 0 && ctx->unfixable_errors == 0 &&
+ want_fstrim) {
fstrim(ctx);
progress_add(1);
}
diff --git a/scrub/phase5.c b/scrub/phase5.c
index 997c88d9..30346fc1 100644
--- a/scrub/phase5.c
+++ b/scrub/phase5.c
@@ -336,7 +336,7 @@ xfs_scan_connections(
bool moveon = true;
bool ret;
- if (ctx->errors_found) {
+ if (ctx->errors_found || ctx->unfixable_errors) {
str_info(ctx, ctx->mntpoint,
_("Filesystem has errors, skipping connectivity checks."));
return true;
diff --git a/scrub/phase6.c b/scrub/phase6.c
index 378ea0fb..c50fb8fb 100644
--- a/scrub/phase6.c
+++ b/scrub/phase6.c
@@ -140,7 +140,7 @@ report_badfile(
bad_length = min(start + length,
br->bmap->bm_physical + br->bmap->bm_length) - start;
- str_error(br->ctx, br->descr,
+ str_unfixable_error(br->ctx, br->descr,
_("media error at data offset %llu length %llu."),
br->bmap->bm_offset + bad_offset, bad_length);
return 0;
diff --git a/scrub/xfs_scrub.c b/scrub/xfs_scrub.c
index 147c114c..aa98caaa 100644
--- a/scrub/xfs_scrub.c
+++ b/scrub/xfs_scrub.c
@@ -515,12 +515,16 @@ report_outcome(
total_errors = ctx->errors_found + ctx->runtime_errors;
- if (total_errors == 0 && ctx->warnings_found == 0) {
+ if (total_errors == 0 &&
+ ctx->unfixable_errors == 0 &&
+ ctx->warnings_found == 0) {
log_info(ctx, _("No errors found."));
return;
}
- if (total_errors == 0) {
+ if (total_errors == 0 && ctx->warnings_found == 0) {
+ /* nothing to report */
+ } else if (total_errors == 0) {
fprintf(stderr, _("%s: warnings found: %llu\n"), ctx->mntpoint,
ctx->warnings_found);
log_warn(ctx, _("warnings found: %llu"), ctx->warnings_found);
@@ -536,6 +540,13 @@ report_outcome(
total_errors, ctx->warnings_found);
}
+ if (ctx->unfixable_errors) {
+ fprintf(stderr, _("%s: unfixable errors found: %llu\n"),
+ ctx->mntpoint, ctx->unfixable_errors);
+ log_err(ctx, _("unfixable errors found: %llu"),
+ ctx->unfixable_errors);
+ }
+
/*
* Don't advise the user to run repair unless we were successful in
* setting up the scrub and we actually saw corruptions. Warnings
diff --git a/scrub/xfs_scrub.h b/scrub/xfs_scrub.h
index 37d78f61..54876acb 100644
--- a/scrub/xfs_scrub.h
+++ b/scrub/xfs_scrub.h
@@ -74,6 +74,7 @@ struct scrub_ctx {
unsigned long long max_errors;
unsigned long long runtime_errors;
unsigned long long errors_found;
+ unsigned long long unfixable_errors;
unsigned long long warnings_found;
unsigned long long inodes_checked;
unsigned long long bytes_checked;
next prev parent reply other threads:[~2019-09-06 3:40 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-06 3:38 [PATCH 00/11] xfs_scrub: fix IO error reporting Darrick J. Wong
2019-09-06 3:39 ` [PATCH 01/11] xfs_scrub: separate media error reporting for attribute forks Darrick J. Wong
2019-09-06 3:39 ` [PATCH 02/11] xfs_scrub: improve reporting of file data media errors Darrick J. Wong
2019-09-06 3:39 ` [PATCH 03/11] xfs_scrub: better reporting of metadata " Darrick J. Wong
2019-09-06 3:39 ` [PATCH 04/11] xfs_scrub: improve reporting of file " Darrick J. Wong
2019-09-06 3:39 ` [PATCH 05/11] xfs_scrub: don't report media errors on unwritten extents Darrick J. Wong
2019-09-06 3:39 ` [PATCH 06/11] xfs_scrub: reduce fsmap activity for media errors Darrick J. Wong
2019-09-06 3:39 ` [PATCH 07/11] xfs_scrub: request fewer bmaps when we can Darrick J. Wong
2019-09-06 3:39 ` [PATCH 08/11] xfs_scrub: fix media verification thread pool size calculations Darrick J. Wong
2019-09-06 3:39 ` [PATCH 09/11] libfrog: clean up platform_nproc Darrick J. Wong
2019-09-06 3:39 ` [PATCH 10/11] xfs_scrub: clean out the nproc global variable Darrick J. Wong
2019-09-06 3:40 ` Darrick J. Wong [this message]
-- strict thread matches above, loose matches on Subject: below --
2019-09-25 21:36 [PATCH 00/11] xfs_scrub: fix IO error reporting Darrick J. Wong
2019-09-25 21:37 ` [PATCH 11/11] xfs_scrub: create a new category for unfixable errors Darrick J. Wong
2019-10-21 19:45 ` Eric Sandeen
2019-10-21 20:29 ` Darrick J. Wong
2019-10-21 20:38 ` Eric Sandeen
2019-08-26 21:31 [PATCH 00/11] xfs_scrub: fix IO error reporting Darrick J. Wong
2019-08-26 21:32 ` [PATCH 11/11] xfs_scrub: create a new category for unfixable errors Darrick J. Wong
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=156774120361.2645432.13655152725555275236.stgit@magnolia \
--to=darrick.wong@oracle.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@sandeen.net \
/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;
as well as URLs for NNTP newsgroup(s).