All of lore.kernel.org
 help / color / mirror / Atom feed
From: Su Yue <suy.fnst@cn.fujitsu.com>
To: <linux-btrfs@vger.kernel.org>
Subject: [PATCH 1/5] btrfs-progs: check: return value of check_extent_refs()
Date: Wed, 27 Sep 2017 14:34:36 +0800	[thread overview]
Message-ID: <20170927063440.25961-2-suy.fnst@cn.fujitsu.com> (raw)
In-Reply-To: <20170927063440.25961-1-suy.fnst@cn.fujitsu.com>

In original check mode(without option "--repair"), check_extent_refs()
always returns 0.

Add a variable @error to record status while checking extents.
At the end of check_extent_refs(), let it return -EIO if @error is
nonzero.

Example:
$ btrfs check bad-extent-inline-ref-type.raw
Checking filesystem on bad-extent-inline-ref-type.raw
UUID: 1942d6fe-617b-4499-9982-cc8ffae5447f
checking extents
corrupt extent record: key 29360128 169 16384
ref mismatch on [29360128 16384] extent item 0, found 1
Backref 29360128 parent 5 root 5 not found in extent tree
backpointer mismatch on [29360128 16384]
bad extent [29360128, 29376512), type mismatch with chunk
checking free space cache
checking fs roots
checking csums
checking root refs
found 114688 bytes used, no error found
total csum bytes: 0
total tree bytes: 114688
total fs tree bytes: 32768
total extent tree bytes: 16384
btree space waste bytes: 109471
file data blocks allocated: 0
 referenced 0

Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com>
---
 cmds-check.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/cmds-check.c b/cmds-check.c
index 8aa136df..93b47194 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -10664,6 +10664,7 @@ static int check_extent_refs(struct btrfs_root *root,
 	struct cache_extent *cache;
 	int ret = 0;
 	int had_dups = 0;
+	int error = 0;
 
 	if (repair) {
 		/*
@@ -10807,6 +10808,7 @@ static int check_extent_refs(struct btrfs_root *root,
 			cur_err = 1;
 		}
 
+		error = cur_err;
 		remove_cache_extent(extent_cache, cache);
 		free_all_extent_backrefs(rec);
 		if (!init_extent_tree && repair && (!cur_err || fix))
@@ -10839,7 +10841,10 @@ repair_abort:
 		}
 		return ret;
 	}
-	return 0;
+
+	if (error)
+		error = -EIO;
+	return error;
 }
 
 u64 calc_stripe_length(u64 type, u64 length, int num_stripes)
-- 
2.14.1




  reply	other threads:[~2017-09-27  6:31 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-27  6:34 [PATCH 0/5] btrfs-progs: check: original and lowmem mode fix Su Yue
2017-09-27  6:34 ` Su Yue [this message]
2017-10-05 17:46   ` [PATCH 1/5] btrfs-progs: check: return value of check_extent_refs() David Sterba
2017-10-06  1:38     ` Su Yue
2017-10-06 16:19       ` David Sterba
2017-10-06  1:42     ` Su Yue
2017-09-27  6:34 ` [PATCH 2/5] btrfs-progs: check: call repair_root_items() before any repair Su Yue
2017-09-27  7:24   ` Qu Wenruo
2017-09-27  7:58   ` [PATCH v2 " Su Yue
2017-09-27  8:28   ` [PATCH v3 " Su Yue
2017-09-27  6:34 ` [PATCH 3/5] btrfs-progs: check: error or return value of repair_root_items() Su Yue
2017-09-27  6:34 ` [PATCH 4/5] btrfs-progs: check: check extent_inline_ref in lowmem Su Yue
2017-09-27  6:34 ` [PATCH 5/5] btrfs-progs: fsck-tests: 027/bad_extent_inline_ref_type Su Yue
2017-10-06 16:52 ` [PATCH 0/5] btrfs-progs: check: original and lowmem mode fix David Sterba

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=20170927063440.25961-2-suy.fnst@cn.fujitsu.com \
    --to=suy.fnst@cn.fujitsu.com \
    --cc=linux-btrfs@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.