From eb4e4dbfeadbe827d6a725d27460836d9b3616ec Mon Sep 17 00:00:00 2001 From: Su Yue Date: Wed, 27 Sep 2017 14:34:36 +0800 Subject: [PATCH] btrfs-progs: check: return value of check_extent_refs In original check mode (without option --repair), check_extent_refs() always returns 0. Add a variable @err to record status while checking extents. At the end of check_extent_refs(), let it return -EIO if @err is non-zero. The test fsck/006-bad-root-items will fail after this patch and fixed by the following patches. 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 [ add note about the failing test, rename variable to err ] Signed-off-by: David Sterba --- cmds-check.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmds-check.c b/cmds-check.c index c236349..e0f4257 100644 --- a/cmds-check.c +++ b/cmds-check.c @@ -10829,6 +10829,7 @@ static int check_extent_refs(struct btrfs_root *root, struct cache_extent *cache; int ret = 0; int had_dups = 0; + int err = 0; if (repair) { /* @@ -10972,6 +10973,7 @@ static int check_extent_refs(struct btrfs_root *root, cur_err = 1; } + err = cur_err; remove_cache_extent(extent_cache, cache); free_all_extent_backrefs(rec); if (!init_extent_tree && repair && (!cur_err || fix)) @@ -11004,7 +11006,10 @@ repair_abort: } return ret; } - return 0; + + if (err) + err = -EIO; + return err; } u64 calc_stripe_length(u64 type, u64 length, int num_stripes) -- 2.7.4