summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQu Wenruo <quwenruo@cn.fujitsu.com>2014-12-22 10:53:36 +0800
committerDavid Sterba <dsterba@suse.cz>2015-01-09 19:09:47 +0100
commite960b3f0577390a1c05913f179a444367b036a48 (patch)
treef55d83d89531783595d3b76cff4ceeb4effde21c
parent228a7b3e176dd39c61ab57a8259868dfd60cfd24 (diff)
downloadbtrfs-progs-e960b3f0577390a1c05913f179a444367b036a48.tar.gz
btrfs-progs: Don't increase error count if the inode can be repaired.
The original check_inode_recs() will return -1 if found any error in a inode_record. This is OK for original design since there is almost nothing can repair at that time. However more and more error from nlink mismatch to missing inode item can be repaired in try_repair_inode(), check_inode_recs() should not increase the error count if the inode can be repair. With this patch, repair function for leaf-corruption will not return error if all corruption inode can be recovered. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz>
-rw-r--r--cmds-check.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/cmds-check.c b/cmds-check.c
index e3c5d54..f06e029 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -2308,7 +2308,7 @@ static int check_inode_recs(struct btrfs_root *root,
struct inode_record *rec;
struct inode_backref *backref;
int stage = 0;
- int ret;
+ int ret = 0;
int err = 0;
u64 error = 0;
u64 root_dirid = btrfs_root_dirid(&root->root_item);
@@ -2458,7 +2458,8 @@ static int check_inode_recs(struct btrfs_root *root,
ret = 0;
}
- error++;
+ if (!(repair && ret == 0))
+ error++;
print_inode_error(root, rec);
list_for_each_entry(backref, &rec->backrefs, list) {
if (!backref->found_dir_item)