blob: fb2307fa7ce3da813a02cfbb0f9f1204d19128de [file] [log] [blame]
/*
* Copyright 1996-2004 by Hans Reiser, licensing governed by
* reiserfsprogs/README
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "fsck.h"
#include "util/print.h"
#include "assert.h"
void fsck_info_checkmem (void) {
fprintf(stderr,
"\nThe problem has occurred looks like a hardware problem (perhaps\n"
"memory). Send us the bug report only if the second run dies at\n"
"the same place with the same block number.\n");
}
int fsck_info_ask(reiserfs_filsys_t * fs, char * q,
char * a, int default_answer)
{
if (!fsck_interactive (fs))
return default_answer;
return util_user_confirmed (fsck_progress_file (fs), q, a);
}
void fsck_stage_report (int pass, reiserfs_filsys_t * fs) {
if (pass == FS_CHECK) {
fsck_progress ("There are on the filesystem:\n"
"\tLeaves %lu\n\tInternal nodes %lu\n"
"\tDirectories %lu\n\tOther files %lu\n"
"\tData block pointers %lu (%lu of them are zero)\n"
"\tSafe links %lu\n",
fsck_check_stat (fs)->leaves,
fsck_check_stat (fs)->internals,
fsck_check_stat (fs)->dirs,
fsck_check_stat (fs)->files,
fsck_check_stat (fs)->unfm_pointers,
fsck_check_stat (fs)->zero_unfm_pointers,
fsck_check_stat (fs)->safe);
return;
}
{
if (pass == FS_PASS0)
fsck_progress("\tSelected hash: %s\n",
reiserfs_hash_name(reiserfs_hash_code(fs->hash)));
/* what has been done on pass 0 */
if (pass_0_stat(fs)->dealt_with)
fsck_progress ("\tRead formatted blocks: %lu\n",
pass_0_stat(fs)->dealt_with);
if (pass_0_stat(fs)->leaves)
fsck_progress ("\tRead leaves (corrected/empty/wrong hash): "
"%lu (%lu/%lu/%lu)\n",
pass_0_stat(fs)->leaves,
pass_0_stat(fs)->leaves_corrected,
pass_0_stat(fs)->all_contents_removed,
pass_0_stat(fs)->too_old_leaves);
if (pass_0_stat(fs)->wrong_pointers)
fsck_progress ("\tWrong indirect pointers (zeroed): %lu\n",
pass_0_stat(fs)->wrong_pointers);
}
{
/* what has been done on pass 1 */
if (pass_1_stat(fs)->leaves)
fsck_progress ("\tRead leaves (not inserted): %lu (%lu)\n",
pass_1_stat(fs)->leaves,
pass_1_stat(fs)->uninsertable_leaves);
assert(pass_1_stat(fs)->leaves == pass_1_stat(fs)->inserted_leaves +
pass_1_stat(fs)->uninsertable_leaves);
if (pass_1_stat(fs)->pointed_leaves ||
pass_1_stat(fs)->non_unique_pointers)
{
fsck_progress ("\tDouble indirect pointers to leaves/to "
"unformatted (zeroed): %lu/%lu\n",
pass_1_stat(fs)->pointed_leaves,
pass_1_stat(fs)->non_unique_pointers);
}
}
{
/* what has been done on pass 2 */
if (pass_2_stat(fs)->leaves)
fsck_progress ("\tLeaves inserted item by item: %lu\n",
pass_2_stat(fs)->leaves);
/* FIXME: oid_sharing is the same */
if (pass_2_stat(fs)->relocated && pass == FS_PASS2)
fsck_progress ("\tFiles relocated because of key "
"conflicts with a directory: %lu\n",
pass_2_stat(fs)->relocated);
if (pass_2_stat(fs)->rewritten)
fsck_progress ("\tFiles rewritten: %lu\n",
pass_2_stat(fs)->rewritten);
}
{
/* what has been done on the semantic pass */
if (sem_pass_stat(fs)->regular_files || sem_pass_stat(fs)->directories ||
sem_pass_stat(fs)->symlinks || sem_pass_stat(fs)->others)
{
fsck_progress ("\tFound files/dirs/symlinks/others: "
"%lu/%lu/%lu/%lu\n",
sem_pass_stat(fs)->regular_files,
sem_pass_stat(fs)->directories,
sem_pass_stat(fs)->symlinks,
sem_pass_stat(fs)->others);
}
if (sem_pass_stat(fs)->lost_found)
fsck_progress ("\tLinked to /lost+found (files/dirs): "
"%lu (%lu/%lu)\n",
sem_pass_stat(fs)->lost_found,
sem_pass_stat(fs)->lost_found_files,
sem_pass_stat(fs)->lost_found_dirs);
if (sem_pass_stat(fs)->broken_files)
fsck_progress ("\tBroken file bodies: %lu\n",
sem_pass_stat(fs)->broken_files);
if (sem_pass_stat(fs)->fixed_sizes)
fsck_progress ("\tFiles with fixed size: %lu\n",
sem_pass_stat(fs)->fixed_sizes);
if (sem_pass_stat(fs)->added_sd)
fsck_progress ("\tInserted missed StatDatas: %lu\n",
sem_pass_stat(fs)->added_sd);
if (sem_pass_stat(fs)->empty_lost_dirs)
fsck_progress ("\tEmpty lost dirs (removed): %lu\n",
sem_pass_stat(fs)->empty_lost_dirs);
if (sem_pass_stat(fs)->deleted_entries)
fsck_progress ("\tNames pointing to nowhere (removed): %lu\n",
sem_pass_stat(fs)->deleted_entries);
if (sem_pass_stat(fs)->oid_sharing) {
fsck_progress ("\tObjects having used objectids (files, dirs): "
"%lu (%lu/%lu)\n",
sem_pass_stat(fs)->oid_sharing,
sem_pass_stat(fs)->oid_sharing_files_relocated,
sem_pass_stat(fs)->oid_sharing_dirs_relocated);
assert(pass_2_stat(fs)->relocated ==
sem_pass_stat(fs)->oid_sharing);
}
}
if (pass != FS_CLEANUP && pass != FS_PASS1) {
if (proper_id_map(fs)->count)
fsck_progress ("\tObjectids found: %lu\n",
proper_id_map(fs)->count);
} else {
/* what has been done on the semantic pass */
if (pass_4_stat(fs)->deleted_items)
fsck_progress ("\tDeleted unreachable items: %lu\n",
pass_4_stat(fs)->deleted_items);
}
memset (&fsck_data (fs)->rebuild.pass_u, 0,
sizeof (fsck_data (fs)->rebuild.pass_u));
}