| /* |
| * Copyright 1996-2004 by Hans Reiser, licensing governed by |
| * reiserfsprogs/README |
| */ |
| |
| #include "fsck.h" |
| |
| int fsck_user_confirmed(reiserfs_filsys_t fs, char *q, char *a, |
| int default_answer) |
| { |
| if (!fsck_interactive(fs)) |
| return default_answer; |
| |
| return user_confirmed(fsck_progress_file(fs), q, a); |
| } |
| |
| void stage_report(int pass, reiserfs_filsys_t fs) |
| { |
| switch (pass) { |
| case 0: |
| { |
| struct pass0_stat *stat; |
| |
| /* what has been done on pass 0 */ |
| stat = pass_0_stat(fs); |
| fsck_progress |
| ("\tRead blocks (but not data blocks) %lu\n", |
| stat->dealt_with); |
| fsck_progress("\t\tLeaves among those %lu\n", |
| stat->leaves); |
| if (stat->leaves_corrected) |
| fsck_progress("\t\t\t- corrected leaves %lu\n", |
| stat->leaves_corrected); |
| if (stat->all_contents_removed) |
| fsck_progress |
| ("\t\t\t- leaves all contents of which could not be saved and deleted %lu\n", |
| stat->all_contents_removed); |
| if (stat->too_old_leaves) |
| fsck_progress |
| ("\t\t\t- too old leaves %lu (skipped)\n", |
| stat->too_old_leaves); |
| if (stat->wrong_pointers) |
| fsck_progress |
| ("\t\tpointers in indirect items to wrong area %lu (zeroed)\n", |
| stat->wrong_pointers); |
| fsck_progress("\t\tObjectids found %lu\n", |
| proper_id_map(fs)->count); |
| } |
| break; |
| |
| case 1: |
| { |
| struct pass1_stat *stat; |
| |
| /* what has been done on pass 1 */ |
| stat = pass_1_stat(fs); |
| fsck_progress("\t%lu leaves read\n", stat->leaves); |
| fsck_progress("\t\t%lu inserted\n", |
| stat->inserted_leaves); |
| if (stat->pointed_leaves) |
| fsck_progress |
| ("\t\t\t- pointers in indirect items pointing to metadata %lu (zeroed)\n", |
| stat->pointed_leaves); |
| if (stat->saved_items) |
| fsck_progress("\tSaved %lu items\n", |
| stat->saved_items); |
| if (stat->uninsertable_leaves) |
| fsck_progress("\t\t%lu not inserted\n", |
| stat->uninsertable_leaves); |
| if (stat->non_unique_pointers) |
| fsck_progress |
| ("\tnon-unique pointers in indirect items (zeroed) %lu\n", |
| stat->non_unique_pointers); |
| } |
| break; |
| |
| case 2: |
| { |
| struct pass2_stat *stat; |
| |
| /* what has been done on pass 2 */ |
| stat = pass_2_stat(fs); |
| if (stat->leaves) |
| fsck_progress |
| ("\tLeaves inserted item by item %lu\n", |
| stat->leaves); |
| if (stat->safe_non_unique_pointers) |
| fsck_progress("\t%lu \n", |
| stat->safe_non_unique_pointers); |
| if (stat->shared_objectids) |
| fsck_progress("\t%lu shared objectids\n", |
| stat->shared_objectids); |
| if (stat->relocated) |
| fsck_progress |
| ("\tFiles relocated because of key conflicts with a directory %lu\n", |
| stat->relocated); |
| if (stat->rewritten) |
| fsck_progress("\tFiles rewritten %lu\n", |
| stat->rewritten); |
| } |
| break; |
| |
| case 3: /* semantic */ |
| { |
| struct semantic_stat *stat; |
| |
| /* what has been done on the semantic pass */ |
| stat = sem_pass_stat(fs); |
| fsck_progress("\tFiles found: %ld\n", |
| stat->regular_files); |
| fsck_progress("\tDirectories found: %ld\n", |
| stat->directories); |
| if (stat->symlinks) |
| fsck_progress("\tSymlinks found: %ld\n", |
| stat->symlinks); |
| if (stat->others) |
| fsck_progress("\tOthers: %ld\n", stat->others); |
| if (stat->broken_files) |
| fsck_progress |
| ("\tBroken (of files/symlinks/others): %ld\n", |
| stat->broken_files); |
| if (stat->fixed_sizes) |
| fsck_progress("\tFiles with fixed size: %ld\n", |
| stat->fixed_sizes); |
| if (stat->deleted_entries) |
| fsck_progress |
| ("\tNames pointing to nowhere (removed): %ld\n", |
| stat->deleted_entries); |
| if (stat->oid_sharing) |
| fsck_progress |
| ("\tObjects having used objectids: %lu\n", |
| stat->oid_sharing); |
| if (stat->oid_sharing_files_relocated) |
| fsck_progress("\t\tfiles fixed %lu\n", |
| stat-> |
| oid_sharing_files_relocated); |
| if (stat->oid_sharing_dirs_relocated) |
| fsck_progress("\t\tdirs fixed %lu\n", |
| stat->oid_sharing_dirs_relocated); |
| } |
| break; |
| |
| case 0x3a: /* lost+found pass */ |
| { |
| struct lost_found_stat *stat; |
| |
| /* what has been done on the semantic pass */ |
| stat = lost_found_pass_stat(fs); |
| if (stat->lost_found) |
| fsck_progress("\tObjects without names %lu\n", |
| stat->lost_found); |
| if (stat->empty_lost_dirs) |
| fsck_progress("\tEmpty lost dirs removed %lu\n", |
| stat->empty_lost_dirs); |
| if (stat->lost_found_dirs) |
| fsck_progress |
| ("\tDirs linked to /lost+found: %lu\n", |
| stat->lost_found_dirs); |
| if (stat->dir_recovered) |
| fsck_progress |
| ("\t\tDirs without stat data found %lu\n", |
| stat->dir_recovered); |
| |
| if (stat->lost_found_files) |
| fsck_progress |
| ("\tFiles linked to /lost+found %lu\n", |
| stat->lost_found_files); |
| if (stat->oid_sharing) |
| fsck_progress |
| ("\tObjects having used objectids: %lu\n", |
| stat->oid_sharing); |
| if (stat->oid_sharing_files_relocated) |
| fsck_progress("\t\tfiles fixed %lu\n", |
| stat-> |
| oid_sharing_files_relocated); |
| if (stat->oid_sharing_dirs_relocated) |
| fsck_progress("\t\tdirs fixed %lu\n", |
| stat->oid_sharing_dirs_relocated); |
| } |
| break; |
| |
| case 4: /* removing of unreachable */ |
| { |
| struct pass_4_stat *stat; |
| |
| /* what has been done on the semantic pass */ |
| stat = pass_4_stat(fs); |
| if (stat->deleted_items) |
| fsck_progress |
| ("\tDeleted unreachable items %lu\n", |
| stat->deleted_items); |
| } |
| break; |
| |
| case 5: |
| 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); |
| |
| } /* switch */ |
| |
| memset(&fsck_data(fs)->rebuild.pass_u, 0, |
| sizeof(fsck_data(fs)->rebuild.pass_u)); |
| |
| } |