Btrfs-progs, fsck: move root items repair after root rebuilding
If some critical roots are corrupt, reapr_root_items() will fail, this is detected by fsck_tests.sh's extent rebuilding tests. Signed-off-by: Wang Shilong <wangshilong1991@gmail.com> Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
parent
b3375a7e8b
commit
1f728b1a51
32
cmds-check.c
32
cmds-check.c
|
@ -8522,22 +8522,6 @@ int cmd_check(int argc, char **argv)
|
||||||
|
|
||||||
root = info->fs_root;
|
root = info->fs_root;
|
||||||
|
|
||||||
ret = repair_root_items(info);
|
|
||||||
if (ret < 0)
|
|
||||||
goto close_out;
|
|
||||||
if (repair) {
|
|
||||||
fprintf(stderr, "Fixed %d roots.\n", ret);
|
|
||||||
ret = 0;
|
|
||||||
} else if (ret > 0) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Found %d roots with an outdated root item.\n",
|
|
||||||
ret);
|
|
||||||
fprintf(stderr,
|
|
||||||
"Please run a filesystem check with the option --repair to fix them.\n");
|
|
||||||
ret = 1;
|
|
||||||
goto close_out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* repair mode will force us to commit transaction which
|
* repair mode will force us to commit transaction which
|
||||||
* will make us fail to load log tree when mounting.
|
* will make us fail to load log tree when mounting.
|
||||||
|
@ -8636,6 +8620,22 @@ int cmd_check(int argc, char **argv)
|
||||||
if (ret)
|
if (ret)
|
||||||
fprintf(stderr, "Errors found in extent allocation tree or chunk allocation\n");
|
fprintf(stderr, "Errors found in extent allocation tree or chunk allocation\n");
|
||||||
|
|
||||||
|
ret = repair_root_items(info);
|
||||||
|
if (ret < 0)
|
||||||
|
goto close_out;
|
||||||
|
if (repair) {
|
||||||
|
fprintf(stderr, "Fixed %d roots.\n", ret);
|
||||||
|
ret = 0;
|
||||||
|
} else if (ret > 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Found %d roots with an outdated root item.\n",
|
||||||
|
ret);
|
||||||
|
fprintf(stderr,
|
||||||
|
"Please run a filesystem check with the option --repair to fix them.\n");
|
||||||
|
ret = 1;
|
||||||
|
goto close_out;
|
||||||
|
}
|
||||||
|
|
||||||
fprintf(stderr, "checking free space cache\n");
|
fprintf(stderr, "checking free space cache\n");
|
||||||
ret = check_space_cache(root);
|
ret = check_space_cache(root);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
Loading…
Reference in a new issue