summaryrefslogtreecommitdiff
path: root/e2fsprogs/e2fsck.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2006-03-08 07:03:27 +0000
committerMike Frysinger <vapier@gentoo.org>2006-03-08 07:03:27 +0000
commit874af85d5eb08b65476f406f6a1e7edc127ac210 (patch)
tree1cb4ee52f1592350dd9c4471b2a334957cc42b5e /e2fsprogs/e2fsck.c
parent0f2dd9f4eb9007bf44aa3f0cf30a35c36fbbd5b2 (diff)
downloadbusybox-w32-874af85d5eb08b65476f406f6a1e7edc127ac210.tar.gz
busybox-w32-874af85d5eb08b65476f406f6a1e7edc127ac210.tar.bz2
busybox-w32-874af85d5eb08b65476f406f6a1e7edc127ac210.zip
import most of e2fsprogs 1.38 updates
Diffstat (limited to 'e2fsprogs/e2fsck.c')
-rw-r--r--e2fsprogs/e2fsck.c173
1 files changed, 92 insertions, 81 deletions
diff --git a/e2fsprogs/e2fsck.c b/e2fsprogs/e2fsck.c
index 18dfd00b6..fb1e772a4 100644
--- a/e2fsprogs/e2fsck.c
+++ b/e2fsprogs/e2fsck.c
@@ -3712,6 +3712,8 @@ err_out:
3712 * @j journal 3712 * @j journal
3713 * @l lost+found 3713 * @l lost+found
3714 * @L is a link 3714 * @L is a link
3715 * @m multiply-claimed
3716 * @n invalid
3715 * @o orphaned 3717 * @o orphaned
3716 * @p problem in 3718 * @p problem in
3717 * @r root inode 3719 * @r root inode
@@ -3749,6 +3751,8 @@ static const char * const abbrevs[] = {
3749 N_("hHTREE @d @i"), 3751 N_("hHTREE @d @i"),
3750 N_("llost+found"), 3752 N_("llost+found"),
3751 N_("Lis a link"), 3753 N_("Lis a link"),
3754 N_("mmultiply-claimed"),
3755 N_("ninvalid"),
3752 N_("oorphaned"), 3756 N_("oorphaned"),
3753 N_("pproblem in"), 3757 N_("pproblem in"),
3754 N_("rroot @i"), 3758 N_("rroot @i"),
@@ -4698,7 +4702,8 @@ static void e2fsck_pass1(e2fsck_t ctx)
4698 if (ctx->progress) 4702 if (ctx->progress)
4699 if ((ctx->progress)(ctx, 1, 0, ctx->fs->group_desc_count)) 4703 if ((ctx->progress)(ctx, 1, 0, ctx->fs->group_desc_count))
4700 return; 4704 return;
4701 if (fs->super->s_wtime < fs->super->s_inodes_count) 4705 if ((fs->super->s_wtime < fs->super->s_inodes_count) ||
4706 (fs->super->s_mtime < fs->super->s_inodes_count))
4702 busted_fs_time = 1; 4707 busted_fs_time = 1;
4703 4708
4704 while (1) { 4709 while (1) {
@@ -5052,6 +5057,11 @@ static void e2fsck_pass1(e2fsck_t ctx)
5052 ctx->flags |= E2F_FLAG_ABORT; 5057 ctx->flags |= E2F_FLAG_ABORT;
5053 return; 5058 return;
5054 } 5059 }
5060 e2fsck_read_inode(ctx, EXT2_RESIZE_INO, inode,
5061 "recreate inode");
5062 inode->i_mtime = time(0);
5063 e2fsck_write_inode(ctx, EXT2_RESIZE_INO, inode,
5064 "recreate inode");
5055 fs->block_map = save_bmap; 5065 fs->block_map = save_bmap;
5056 ctx->flags &= ~E2F_FLAG_RESIZE_INODE; 5066 ctx->flags &= ~E2F_FLAG_RESIZE_INODE;
5057 } 5067 }
@@ -6702,7 +6712,7 @@ static void pass1d(e2fsck_t ctx, char *block_buf)
6702 shared_len = 0; 6712 shared_len = 0;
6703 file_ok = 1; 6713 file_ok = 1;
6704 ino = (ext2_ino_t)VOIDPTR_TO_INT(dnode_getkey(n)); 6714 ino = (ext2_ino_t)VOIDPTR_TO_INT(dnode_getkey(n));
6705 if (ino == EXT2_BAD_INO) 6715 if (ino == EXT2_BAD_INO || ino == EXT2_RESIZE_INO)
6706 continue; 6716 continue;
6707 6717
6708 /* 6718 /*
@@ -10052,7 +10062,7 @@ static const char * const prompt[] = {
10052 N_("Abort"), /* 11 */ 10062 N_("Abort"), /* 11 */
10053 N_("Split"), /* 12 */ 10063 N_("Split"), /* 12 */
10054 N_("Continue"), /* 13 */ 10064 N_("Continue"), /* 13 */
10055 N_("Clone duplicate/bad blocks"), /* 14 */ 10065 N_("Clone multiply-claimed blocks"), /* 14 */
10056 N_("Delete file"), /* 15 */ 10066 N_("Delete file"), /* 15 */
10057 N_("Suppress messages"),/* 16 */ 10067 N_("Suppress messages"),/* 16 */
10058 N_("Unlink"), /* 17 */ 10068 N_("Unlink"), /* 17 */
@@ -10080,7 +10090,7 @@ static const char * const preen_msg[] = {
10080 N_("ABORTED"), /* 11 */ 10090 N_("ABORTED"), /* 11 */
10081 N_("SPLIT"), /* 12 */ 10091 N_("SPLIT"), /* 12 */
10082 N_("CONTINUING"), /* 13 */ 10092 N_("CONTINUING"), /* 13 */
10083 N_("DUPLICATE/BAD BLOCKS CLONED"), /* 14 */ 10093 N_("MULTIPLY-CLAIMED BLOCKS CLONED"), /* 14 */
10084 N_("FILE DELETED"), /* 15 */ 10094 N_("FILE DELETED"), /* 15 */
10085 N_("SUPPRESSED"), /* 16 */ 10095 N_("SUPPRESSED"), /* 16 */
10086 N_("UNLINKED"), /* 17 */ 10096 N_("UNLINKED"), /* 17 */
@@ -10147,12 +10157,11 @@ static const struct e2fsck_problem problem_table[] = {
10147 10157
10148 /* Relocate hint */ 10158 /* Relocate hint */
10149 { PR_0_RELOCATE_HINT, 10159 { PR_0_RELOCATE_HINT,
10150 N_("Note: if there is several inode or block bitmap blocks\n" 10160 N_("Note: if several inode or block bitmap blocks or part\n"
10151 "which require relocation, or one part of the inode table\n" 10161 "of the inode table require relocation, you may wish to try\n"
10152 "which must be moved, you may wish to try running e2fsck\n" 10162 "running e2fsck with the '-b %S' option first. The problem\n"
10153 "with the '-b %S' option first. The problem may lie only\n" 10163 "may lie only with the primary block group descriptors, and\n"
10154 "with the primary block group descriptor, and the backup\n" 10164 "the backup block group descriptors may be OK.\n\n"),
10155 "block group descriptor may be OK.\n\n"),
10156 PROMPT_NONE, PR_PREEN_OK | PR_NOCOLLATE }, 10165 PROMPT_NONE, PR_PREEN_OK | PR_NOCOLLATE },
10157 10166
10158 /* Miscellaneous superblock corruption */ 10167 /* Miscellaneous superblock corruption */
@@ -10167,7 +10176,7 @@ static const struct e2fsck_problem problem_table[] = {
10167 10176
10168 /* Inode count in superblock is incorrect */ 10177 /* Inode count in superblock is incorrect */
10169 { PR_0_INODE_COUNT_WRONG, 10178 { PR_0_INODE_COUNT_WRONG,
10170 N_("@i count in @S is %i, should be %j.\n"), 10179 N_("@i count in @S is %i, @s %j.\n"),
10171 PROMPT_FIX, 0 }, 10180 PROMPT_FIX, 0 },
10172 10181
10173 { PR_0_HURD_CLEAR_FILETYPE, 10182 { PR_0_HURD_CLEAR_FILETYPE,
@@ -10176,7 +10185,7 @@ static const struct e2fsck_problem problem_table[] = {
10176 10185
10177 /* Journal inode is invalid */ 10186 /* Journal inode is invalid */
10178 { PR_0_JOURNAL_BAD_INODE, 10187 { PR_0_JOURNAL_BAD_INODE,
10179 N_("@S has a bad ext3 @j (@i %i).\n"), 10188 N_("@S has an @n ext3 @j (@i %i).\n"),
10180 PROMPT_CLEAR, PR_PREEN_OK }, 10189 PROMPT_CLEAR, PR_PREEN_OK },
10181 10190
10182 /* The external journal has (unsupported) multiple filesystems */ 10191 /* The external journal has (unsupported) multiple filesystems */
@@ -10224,7 +10233,7 @@ static const struct e2fsck_problem problem_table[] = {
10224 10233
10225 /* Journal has data, but recovery flag is clear */ 10234 /* Journal has data, but recovery flag is clear */
10226 { PR_0_JOURNAL_RECOVERY_CLEAR, 10235 { PR_0_JOURNAL_RECOVERY_CLEAR,
10227 N_("ext3 recovery flag clear, but @j has data.\n"), 10236 N_("ext3 recovery flag is clear, but @j has data.\n"),
10228 PROMPT_NONE, 0 }, 10237 PROMPT_NONE, 0 },
10229 10238
10230 /* Ask if we should clear the journal */ 10239 /* Ask if we should clear the journal */
@@ -10269,7 +10278,7 @@ static const struct e2fsck_problem problem_table[] = {
10269 10278
10270 /* Filesystem revision is 0, but feature flags are set */ 10279 /* Filesystem revision is 0, but feature flags are set */
10271 { PR_0_FS_REV_LEVEL, 10280 { PR_0_FS_REV_LEVEL,
10272 "@f has feature flag(s) set, but is a revision 0 @f. ", 10281 N_("@f has feature flag(s) set, but is a revision 0 @f. "),
10273 PROMPT_FIX, PR_PREEN_OK | PR_NO_OK }, 10282 PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
10274 10283
10275 /* Journal superblock has an unknown read-only feature flag set */ 10284 /* Journal superblock has an unknown read-only feature flag set */
@@ -10289,7 +10298,7 @@ static const struct e2fsck_problem problem_table[] = {
10289 10298
10290 /* Moving journal to hidden file */ 10299 /* Moving journal to hidden file */
10291 { PR_0_MOVE_JOURNAL, 10300 { PR_0_MOVE_JOURNAL,
10292 N_("Moving @j from /%s to hidden inode.\n\n"), 10301 N_("Moving @j from /%s to hidden @i.\n\n"),
10293 PROMPT_NONE, 0 }, 10302 PROMPT_NONE, 0 },
10294 10303
10295 /* Error moving journal to hidden file */ 10304 /* Error moving journal to hidden file */
@@ -10299,7 +10308,7 @@ static const struct e2fsck_problem problem_table[] = {
10299 10308
10300 /* Clearing V2 journal superblock */ 10309 /* Clearing V2 journal superblock */
10301 { PR_0_CLEAR_V2_JOURNAL, 10310 { PR_0_CLEAR_V2_JOURNAL,
10302 N_("Found invalid V2 @j @S fields (from V1 journal).\n" 10311 N_("Found @n V2 @j @S fields (from V1 @j).\n"
10303 "Clearing fields beyond the V1 @j @S...\n\n"), 10312 "Clearing fields beyond the V1 @j @S...\n\n"),
10304 PROMPT_NONE, 0 }, 10313 PROMPT_NONE, 0 },
10305 10314
@@ -10316,7 +10325,7 @@ static const struct e2fsck_problem problem_table[] = {
10316 10325
10317 /* Resize_inode not enabled, but resize inode is non-zero */ 10326 /* Resize_inode not enabled, but resize inode is non-zero */
10318 { PR_0_CLEAR_RESIZE_INODE, 10327 { PR_0_CLEAR_RESIZE_INODE,
10319 N_("Resize_@i not enabled, but the resize inode is non-zero. "), 10328 N_("Resize_@i not enabled, but the resize @i is non-zero. "),
10320 PROMPT_CLEAR, 0 }, 10329 PROMPT_CLEAR, 0 },
10321 10330
10322 /* Resize inode invalid */ 10331 /* Resize inode invalid */
@@ -10342,7 +10351,7 @@ static const struct e2fsck_problem problem_table[] = {
10342 10351
10343 /* Reserved inode has bad mode */ 10352 /* Reserved inode has bad mode */
10344 { PR_1_RESERVED_BAD_MODE, 10353 { PR_1_RESERVED_BAD_MODE,
10345 N_("Reserved @i %i %Q has bad mode. "), 10354 N_("Reserved @i %i (%Q) has @n mode. "),
10346 PROMPT_CLEAR, PR_PREEN_OK }, 10355 PROMPT_CLEAR, PR_PREEN_OK },
10347 10356
10348 /* Deleted inode has zero dtime */ 10357 /* Deleted inode has zero dtime */
@@ -10449,9 +10458,8 @@ static const struct e2fsck_problem problem_table[] = {
10449 10458
10450 /* Bad primary block prompt */ 10459 /* Bad primary block prompt */
10451 { PR_1_BAD_PRIMARY_BLOCK_PROMPT, 10460 { PR_1_BAD_PRIMARY_BLOCK_PROMPT,
10452 N_("You can clear the this @b (and hope for the best) from the\n" 10461 N_("You can remove this @b from the bad @b list and hope\n"
10453 "bad @b list and hope that @b is really OK, but there are no\n" 10462 "that the @b is really OK. But there are no guarantees.\n\n"),
10454 "guarantees.\n\n"),
10455 PROMPT_CLEAR, PR_PREEN_NOMSG }, 10463 PROMPT_CLEAR, PR_PREEN_NOMSG },
10456 10464
10457 /* Bad primary superblock */ 10465 /* Bad primary superblock */
@@ -10514,12 +10522,12 @@ static const struct e2fsck_problem problem_table[] = {
10514 10522
10515 /* Error allocating inode bitmap */ 10523 /* Error allocating inode bitmap */
10516 { PR_1_ALLOCATE_IBITMAP_ERROR, 10524 { PR_1_ALLOCATE_IBITMAP_ERROR,
10517 "@A @i @B (%N): %m\n", 10525 N_("@A @i @B (%N): %m\n"),
10518 PROMPT_NONE, PR_FATAL }, 10526 PROMPT_NONE, PR_FATAL },
10519 10527
10520 /* Error allocating block bitmap */ 10528 /* Error allocating block bitmap */
10521 { PR_1_ALLOCATE_BBITMAP_ERROR, 10529 { PR_1_ALLOCATE_BBITMAP_ERROR,
10522 "@A @b @B (%N): %m\n", 10530 N_("@A @b @B (%N): %m\n"),
10523 PROMPT_NONE, PR_FATAL }, 10531 PROMPT_NONE, PR_FATAL },
10524 10532
10525 /* Error allocating icount structure */ 10533 /* Error allocating icount structure */
@@ -10579,17 +10587,17 @@ static const struct e2fsck_problem problem_table[] = {
10579 10587
10580 /* Non-zero size for device, fifo or socket inode */ 10588 /* Non-zero size for device, fifo or socket inode */
10581 { PR_1_SET_NONZSIZE, 10589 { PR_1_SET_NONZSIZE,
10582 "Special (@v/socket/fifo) @i %i has non-zero size. ", 10590 N_("Special (@v/socket/fifo) @i %i has non-zero size. "),
10583 PROMPT_FIX, PR_PREEN_OK }, 10591 PROMPT_FIX, PR_PREEN_OK },
10584 10592
10585 /* Filesystem revision is 0, but feature flags are set */ 10593 /* Filesystem revision is 0, but feature flags are set */
10586 { PR_1_FS_REV_LEVEL, 10594 { PR_1_FS_REV_LEVEL,
10587 "@f has feature flag(s) set, but is a revision 0 @f. ", 10595 N_("@f has feature flag(s) set, but is a revision 0 @f. "),
10588 PROMPT_FIX, PR_PREEN_OK | PR_NO_OK }, 10596 PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
10589 10597
10590 /* Journal inode is not in use, but contains data */ 10598 /* Journal inode is not in use, but contains data */
10591 { PR_1_JOURNAL_INODE_NOT_CLEAR, 10599 { PR_1_JOURNAL_INODE_NOT_CLEAR,
10592 "@j @i is not in use, but contains data. ", 10600 N_("@j @i is not in use, but contains data. "),
10593 PROMPT_CLEAR, PR_PREEN_OK }, 10601 PROMPT_CLEAR, PR_PREEN_OK },
10594 10602
10595 /* Journal has bad mode */ 10603 /* Journal has bad mode */
@@ -10599,7 +10607,7 @@ static const struct e2fsck_problem problem_table[] = {
10599 10607
10600 /* Deal with inodes that were part of orphan linked list */ 10608 /* Deal with inodes that were part of orphan linked list */
10601 { PR_1_LOW_DTIME, 10609 { PR_1_LOW_DTIME,
10602 N_("@i %i was part of the orphaned @i list. "), 10610 N_("@i %i was part of the @o @i list. "),
10603 PROMPT_FIX, PR_LATCH_LOW_DTIME, 0 }, 10611 PROMPT_FIX, PR_LATCH_LOW_DTIME, 0 },
10604 10612
10605 /* Deal with inodes that were part of corrupted orphan linked 10613 /* Deal with inodes that were part of corrupted orphan linked
@@ -10610,7 +10618,7 @@ static const struct e2fsck_problem problem_table[] = {
10610 10618
10611 /* Error allocating refcount structure */ 10619 /* Error allocating refcount structure */
10612 { PR_1_ALLOCATE_REFCOUNT, 10620 { PR_1_ALLOCATE_REFCOUNT,
10613 "@A refcount structure (%N): %m\n", 10621 N_("@A refcount structure (%N): %m\n"),
10614 PROMPT_NONE, PR_FATAL }, 10622 PROMPT_NONE, PR_FATAL },
10615 10623
10616 /* Error reading extended attribute block */ 10624 /* Error reading extended attribute block */
@@ -10630,7 +10638,7 @@ static const struct e2fsck_problem problem_table[] = {
10630 10638
10631 /* Extended attribute reference count incorrect */ 10639 /* Extended attribute reference count incorrect */
10632 { PR_1_EXTATTR_REFCOUNT, 10640 { PR_1_EXTATTR_REFCOUNT,
10633 N_("@a @b %b has reference count %B, should be %N. "), 10641 N_("@a @b %b has reference count %B, @s %N. "),
10634 PROMPT_FIX, 0 }, 10642 PROMPT_FIX, 0 },
10635 10643
10636 /* Error writing Extended Attribute block while fixing refcount */ 10644 /* Error writing Extended Attribute block while fixing refcount */
@@ -10640,12 +10648,12 @@ static const struct e2fsck_problem problem_table[] = {
10640 10648
10641 /* Multiple EA blocks not supported */ 10649 /* Multiple EA blocks not supported */
10642 { PR_1_EA_MULTI_BLOCK, 10650 { PR_1_EA_MULTI_BLOCK,
10643 N_("@a @b %b has h_blocks > 1. "), 10651 N_("@a @b %b has h_@bs > 1. "),
10644 PROMPT_CLEAR, 0}, 10652 PROMPT_CLEAR, 0},
10645 10653
10646 /* Error allocating EA region allocation structure */ 10654 /* Error allocating EA region allocation structure */
10647 { PR_1_EA_ALLOC_REGION, 10655 { PR_1_EA_ALLOC_REGION,
10648 N_("Error allocating @a @b %b. "), 10656 N_("@A @a @b %b. "),
10649 PROMPT_ABORT, 0}, 10657 PROMPT_ABORT, 0},
10650 10658
10651 /* Error EA allocation collision */ 10659 /* Error EA allocation collision */
@@ -10655,12 +10663,12 @@ static const struct e2fsck_problem problem_table[] = {
10655 10663
10656 /* Bad extended attribute name */ 10664 /* Bad extended attribute name */
10657 { PR_1_EA_BAD_NAME, 10665 { PR_1_EA_BAD_NAME,
10658 N_("@a @b %b is corrupt (invalid name). "), 10666 N_("@a @b %b is corrupt (@n name). "),
10659 PROMPT_CLEAR, 0}, 10667 PROMPT_CLEAR, 0},
10660 10668
10661 /* Bad extended attribute value */ 10669 /* Bad extended attribute value */
10662 { PR_1_EA_BAD_VALUE, 10670 { PR_1_EA_BAD_VALUE,
10663 N_("@a @b %b is corrupt (invalid value). "), 10671 N_("@a @b %b is corrupt (@n value). "),
10664 PROMPT_CLEAR, 0}, 10672 PROMPT_CLEAR, 0},
10665 10673
10666 /* Inode too big (latch question) */ 10674 /* Inode too big (latch question) */
@@ -10694,7 +10702,7 @@ static const struct e2fsck_problem problem_table[] = {
10694 10702
10695 /* Invalid root node in HTREE directory */ 10703 /* Invalid root node in HTREE directory */
10696 { PR_1_HTREE_BADROOT, 10704 { PR_1_HTREE_BADROOT,
10697 N_("@h %i has an invalid root node.\n"), 10705 N_("@h %i has an @n root node.\n"),
10698 PROMPT_CLEAR_HTREE, PR_PREEN_OK }, 10706 PROMPT_CLEAR_HTREE, PR_PREEN_OK },
10699 10707
10700 /* Unsupported hash version in HTREE directory */ 10708 /* Unsupported hash version in HTREE directory */
@@ -10725,45 +10733,45 @@ static const struct e2fsck_problem problem_table[] = {
10725 10733
10726 /* invalid inode->i_extra_isize */ 10734 /* invalid inode->i_extra_isize */
10727 { PR_1_EXTRA_ISIZE, 10735 { PR_1_EXTRA_ISIZE,
10728 N_("@i %i has a extra size (%IS) which is invalid\n"), 10736 N_("@i %i has a extra size (%IS) which is @n\n"),
10729 PROMPT_FIX, PR_PREEN_OK }, 10737 PROMPT_FIX, PR_PREEN_OK },
10730 10738
10731 /* invalid ea entry->e_name_len */ 10739 /* invalid ea entry->e_name_len */
10732 { PR_1_ATTR_NAME_LEN, 10740 { PR_1_ATTR_NAME_LEN,
10733 N_("@a in @i %i has a namelen (%N) which is invalid\n"), 10741 N_("@a in @i %i has a namelen (%N) which is @n\n"),
10734 PROMPT_CLEAR, PR_PREEN_OK }, 10742 PROMPT_CLEAR, PR_PREEN_OK },
10735 10743
10736 /* invalid ea entry->e_value_size */ 10744 /* invalid ea entry->e_value_size */
10737 { PR_1_ATTR_VALUE_SIZE, 10745 { PR_1_ATTR_VALUE_SIZE,
10738 N_("@a in @i %i has a value size (%N) which is invalid\n"), 10746 N_("@a in @i %i has a value size (%N) which is @n\n"),
10739 PROMPT_CLEAR, PR_PREEN_OK }, 10747 PROMPT_CLEAR, PR_PREEN_OK },
10740 10748
10741 /* invalid ea entry->e_value_offs */ 10749 /* invalid ea entry->e_value_offs */
10742 { PR_1_ATTR_VALUE_OFFSET, 10750 { PR_1_ATTR_VALUE_OFFSET,
10743 N_("@a in @i %i has a value offset (%N) which is invalid\n"), 10751 N_("@a in @i %i has a value offset (%N) which is @n\n"),
10744 PROMPT_CLEAR, PR_PREEN_OK }, 10752 PROMPT_CLEAR, PR_PREEN_OK },
10745 10753
10746 /* invalid ea entry->e_value_block */ 10754 /* invalid ea entry->e_value_block */
10747 { PR_1_ATTR_VALUE_BLOCK, 10755 { PR_1_ATTR_VALUE_BLOCK,
10748 N_("@a in @i %i has a value block (%N) which is invalid (must be 0)\n"), 10756 N_("@a in @i %i has a value @b (%N) which is @n (must be 0)\n"),
10749 PROMPT_CLEAR, PR_PREEN_OK }, 10757 PROMPT_CLEAR, PR_PREEN_OK },
10750 10758
10751 /* invalid ea entry->e_hash */ 10759 /* invalid ea entry->e_hash */
10752 { PR_1_ATTR_HASH, 10760 { PR_1_ATTR_HASH,
10753 N_("@a in @i %i has a hash (%N) which is invalid (must be 0)\n"), 10761 N_("@a in @i %i has a hash (%N) which is @n (must be 0)\n"),
10754 PROMPT_CLEAR, PR_PREEN_OK }, 10762 PROMPT_CLEAR, PR_PREEN_OK },
10755 10763
10756 /* Pass 1b errors */ 10764 /* Pass 1b errors */
10757 10765
10758 /* Pass 1B: Rescan for duplicate/bad blocks */ 10766 /* Pass 1B: Rescan for duplicate/bad blocks */
10759 { PR_1B_PASS_HEADER, 10767 { PR_1B_PASS_HEADER,
10760 N_("Duplicate @bs found... invoking duplicate @b passes.\n" 10768 N_("\nRunning additional passes to resolve @bs claimed by more than one @i...\n"
10761 "Pass 1B: Rescan for duplicate/bad @bs\n"), 10769 "Pass 1B: Rescanning for @m @bs\n"),
10762 PROMPT_NONE, 0 }, 10770 PROMPT_NONE, 0 },
10763 10771
10764 /* Duplicate/bad block(s) header */ 10772 /* Duplicate/bad block(s) header */
10765 { PR_1B_DUP_BLOCK_HEADER, 10773 { PR_1B_DUP_BLOCK_HEADER,
10766 N_("Duplicate/bad @b(s) in @i %i:"), 10774 N_("@m @b(s) in @i %i:"),
10767 PROMPT_NONE, 0 }, 10775 PROMPT_NONE, 0 },
10768 10776
10769 /* Duplicate/bad block(s) in inode */ 10777 /* Duplicate/bad block(s) in inode */
@@ -10783,7 +10791,7 @@ static const struct e2fsck_problem problem_table[] = {
10783 10791
10784 /* Error allocating inode bitmap */ 10792 /* Error allocating inode bitmap */
10785 { PR_1B_ALLOCATE_IBITMAP_ERROR, 10793 { PR_1B_ALLOCATE_IBITMAP_ERROR,
10786 N_("@A @i @B (inode_dup_map): %m\n"), 10794 N_("@A @i @B (@i_dup_map): %m\n"),
10787 PROMPT_NONE, PR_FATAL }, 10795 PROMPT_NONE, PR_FATAL },
10788 10796
10789 /* Error while iterating over blocks */ 10797 /* Error while iterating over blocks */
@@ -10793,25 +10801,25 @@ static const struct e2fsck_problem problem_table[] = {
10793 10801
10794 /* Error adjusting EA refcount */ 10802 /* Error adjusting EA refcount */
10795 { PR_1B_ADJ_EA_REFCOUNT, 10803 { PR_1B_ADJ_EA_REFCOUNT,
10796 N_("Error addjusting refcount for @a @b %b (@i %i): %m\n"), 10804 N_("Error adjusting refcount for @a @b %b (@i %i): %m\n"),
10797 PROMPT_NONE, 0 }, 10805 PROMPT_NONE, 0 },
10798 10806
10799 10807
10800 /* Pass 1C: Scan directories for inodes with dup blocks. */ 10808 /* Pass 1C: Scan directories for inodes with multiply-claimed blocks. */
10801 { PR_1C_PASS_HEADER, 10809 { PR_1C_PASS_HEADER,
10802 N_("Pass 1C: Scan directories for @is with dup @bs.\n"), 10810 N_("Pass 1C: Scanning directories for @is with @m @bs.\n"),
10803 PROMPT_NONE, 0 }, 10811 PROMPT_NONE, 0 },
10804 10812
10805 10813
10806 /* Pass 1D: Reconciling duplicate blocks */ 10814 /* Pass 1D: Reconciling multiply-claimed blocks */
10807 { PR_1D_PASS_HEADER, 10815 { PR_1D_PASS_HEADER,
10808 N_("Pass 1D: Reconciling duplicate @bs\n"), 10816 N_("Pass 1D: Reconciling @m @bs\n"),
10809 PROMPT_NONE, 0 }, 10817 PROMPT_NONE, 0 },
10810 10818
10811 /* File has duplicate blocks */ 10819 /* File has duplicate blocks */
10812 { PR_1D_DUP_FILE, 10820 { PR_1D_DUP_FILE,
10813 N_("File %Q (@i #%i, mod time %IM) \n" 10821 N_("File %Q (@i #%i, mod time %IM) \n"
10814 " has %B duplicate @b(s), shared with %N file(s):\n"), 10822 " has %B @m @b(s), shared with %N file(s):\n"),
10815 PROMPT_NONE, 0 }, 10823 PROMPT_NONE, 0 },
10816 10824
10817 /* List of files sharing duplicate blocks */ 10825 /* List of files sharing duplicate blocks */
@@ -10826,12 +10834,12 @@ static const struct e2fsck_problem problem_table[] = {
10826 10834
10827 /* Report of how many duplicate/bad inodes */ 10835 /* Report of how many duplicate/bad inodes */
10828 { PR_1D_NUM_DUP_INODES, 10836 { PR_1D_NUM_DUP_INODES,
10829 N_("(There are %N @is containing duplicate/bad @bs.)\n\n"), 10837 N_("(There are %N @is containing @m @bs.)\n\n"),
10830 PROMPT_NONE, 0 }, 10838 PROMPT_NONE, 0 },
10831 10839
10832 /* Duplicated blocks already reassigned or cloned. */ 10840 /* Duplicated blocks already reassigned or cloned. */
10833 { PR_1D_DUP_BLOCKS_DEALT, 10841 { PR_1D_DUP_BLOCKS_DEALT,
10834 N_("Duplicated @bs already reassigned or cloned.\n\n"), 10842 N_("@m @bs already reassigned or cloned.\n\n"),
10835 PROMPT_NONE, 0 }, 10843 PROMPT_NONE, 0 },
10836 10844
10837 /* Clone duplicate/bad blocks? */ 10845 /* Clone duplicate/bad blocks? */
@@ -10855,12 +10863,12 @@ static const struct e2fsck_problem problem_table[] = {
10855 10863
10856 /* Bad inode number for '.' */ 10864 /* Bad inode number for '.' */
10857 { PR_2_BAD_INODE_DOT, 10865 { PR_2_BAD_INODE_DOT,
10858 N_("Bad @i number for '.' in @d @i %i.\n"), 10866 N_("@n @i number for '.' in @d @i %i.\n"),
10859 PROMPT_FIX, 0 }, 10867 PROMPT_FIX, 0 },
10860 10868
10861 /* Directory entry has bad inode number */ 10869 /* Directory entry has bad inode number */
10862 { PR_2_BAD_INO, 10870 { PR_2_BAD_INO,
10863 N_("@E has bad @i #: %Di.\n"), 10871 N_("@E has @n @i #: %Di.\n"),
10864 PROMPT_CLEAR, 0 }, 10872 PROMPT_CLEAR, 0 },
10865 10873
10866 /* Directory entry has deleted or unused inode */ 10874 /* Directory entry has deleted or unused inode */
@@ -10905,12 +10913,12 @@ static const struct e2fsck_problem problem_table[] = {
10905 10913
10906 /* First entry in directory inode doesn't contain '.' */ 10914 /* First entry in directory inode doesn't contain '.' */
10907 { PR_2_1ST_NOT_DOT, 10915 { PR_2_1ST_NOT_DOT,
10908 N_("First @e '%Dn' (inode=%Di) in @d @i %i (%p) @s '.'\n"), 10916 N_("First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"),
10909 PROMPT_FIX, 0 }, 10917 PROMPT_FIX, 0 },
10910 10918
10911 /* Second entry in directory inode doesn't contain '..' */ 10919 /* Second entry in directory inode doesn't contain '..' */
10912 { PR_2_2ND_NOT_DOT_DOT, 10920 { PR_2_2ND_NOT_DOT_DOT,
10913 N_("Second @e '%Dn' (inode=%Di) in @d @i %i @s '..'\n"), 10921 N_("Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"),
10914 PROMPT_FIX, 0 }, 10922 PROMPT_FIX, 0 },
10915 10923
10916 /* i_faddr should be zero */ 10924 /* i_faddr should be zero */
@@ -10940,7 +10948,7 @@ static const struct e2fsck_problem problem_table[] = {
10940 10948
10941 /* inode has bad mode */ 10949 /* inode has bad mode */
10942 { PR_2_BAD_MODE, 10950 { PR_2_BAD_MODE,
10943 N_("@i %i (%Q) has a bad mode (%Im).\n"), 10951 N_("@i %i (%Q) has @n mode (%Im).\n"),
10944 PROMPT_CLEAR, 0 }, 10952 PROMPT_CLEAR, 0 },
10945 10953
10946 /* directory corrupted */ 10954 /* directory corrupted */
@@ -10995,7 +11003,7 @@ static const struct e2fsck_problem problem_table[] = {
10995 11003
10996 /* Final rec_len is wrong */ 11004 /* Final rec_len is wrong */
10997 { PR_2_FINAL_RECLEN, 11005 { PR_2_FINAL_RECLEN,
10998 N_("@E has rec_len of %Dr, should be %N.\n"), 11006 N_("@E has rec_len of %Dr, @s %N.\n"),
10999 PROMPT_FIX, 0 }, 11007 PROMPT_FIX, 0 },
11000 11008
11001 /* Error allocating icount structure */ 11009 /* Error allocating icount structure */
@@ -11050,7 +11058,7 @@ static const struct e2fsck_problem problem_table[] = {
11050 11058
11051 /* Directory filetype incorrect */ 11059 /* Directory filetype incorrect */
11052 { PR_2_BAD_FILETYPE, 11060 { PR_2_BAD_FILETYPE,
11053 N_("@E has an incorrect filetype (was %Dt, should be %N).\n"), 11061 N_("@E has an incorrect filetype (was %Dt, @s %N).\n"),
11054 PROMPT_FIX, 0 }, 11062 PROMPT_FIX, 0 },
11055 11063
11056 /* Directory filetype set on filesystem */ 11064 /* Directory filetype set on filesystem */
@@ -11060,17 +11068,17 @@ static const struct e2fsck_problem problem_table[] = {
11060 11068
11061 /* Directory filename is null */ 11069 /* Directory filename is null */
11062 { PR_2_NULL_NAME, 11070 { PR_2_NULL_NAME,
11063 N_("@E has a zero-length name.\n"), 11071 N_("@E has a @z name.\n"),
11064 PROMPT_CLEAR, 0 }, 11072 PROMPT_CLEAR, 0 },
11065 11073
11066 /* Invalid symlink */ 11074 /* Invalid symlink */
11067 { PR_2_INVALID_SYMLINK, 11075 { PR_2_INVALID_SYMLINK,
11068 N_("Symlink %Q (@i #%i) is invalid.\n"), 11076 N_("Symlink %Q (@i #%i) is @n.\n"),
11069 PROMPT_CLEAR, 0 }, 11077 PROMPT_CLEAR, 0 },
11070 11078
11071 /* i_file_acl (extended attribute block) is bad */ 11079 /* i_file_acl (extended attribute block) is bad */
11072 { PR_2_FILE_ACL_BAD, 11080 { PR_2_FILE_ACL_BAD,
11073 N_("@a @b @F invalid (%If).\n"), 11081 N_("@a @b @F @n (%If).\n"),
11074 PROMPT_CLEAR, 0 }, 11082 PROMPT_CLEAR, 0 },
11075 11083
11076 /* Filesystem contains large files, but has no such flag in sb */ 11084 /* Filesystem contains large files, but has no such flag in sb */
@@ -11100,7 +11108,7 @@ static const struct e2fsck_problem problem_table[] = {
11100 11108
11101 /* Clear invalid HTREE directory */ 11109 /* Clear invalid HTREE directory */
11102 { PR_2_HTREE_CLEAR, 11110 { PR_2_HTREE_CLEAR,
11103 N_("Invalid @h %d (%q). "), PROMPT_CLEAR, 0 }, 11111 N_("@n @h %d (%q). "), PROMPT_CLEAR, 0 },
11104 11112
11105 /* Bad block in htree interior node */ 11113 /* Bad block in htree interior node */
11106 { PR_2_HTREE_BADBLK, 11114 { PR_2_HTREE_BADBLK,
@@ -11109,22 +11117,22 @@ static const struct e2fsck_problem problem_table[] = {
11109 11117
11110 /* Error adjusting EA refcount */ 11118 /* Error adjusting EA refcount */
11111 { PR_2_ADJ_EA_REFCOUNT, 11119 { PR_2_ADJ_EA_REFCOUNT,
11112 N_("Error addjusting refcount for @a @b %b (@i %i): %m\n"), 11120 N_("Error adjusting refcount for @a @b %b (@i %i): %m\n"),
11113 PROMPT_NONE, PR_FATAL }, 11121 PROMPT_NONE, PR_FATAL },
11114 11122
11115 /* Invalid HTREE root node */ 11123 /* Invalid HTREE root node */
11116 { PR_2_HTREE_BAD_ROOT, 11124 { PR_2_HTREE_BAD_ROOT,
11117 N_("@p @h %d: root node is invalid\n"), 11125 N_("@p @h %d: root node is @n\n"),
11118 PROMPT_CLEAR_HTREE, PR_PREEN_OK }, 11126 PROMPT_CLEAR_HTREE, PR_PREEN_OK },
11119 11127
11120 /* Invalid HTREE limit */ 11128 /* Invalid HTREE limit */
11121 { PR_2_HTREE_BAD_LIMIT, 11129 { PR_2_HTREE_BAD_LIMIT,
11122 N_("@p @h %d: node (%B) has bad limit (%N)\n"), 11130 N_("@p @h %d: node (%B) has @n limit (%N)\n"),
11123 PROMPT_CLEAR_HTREE, PR_PREEN_OK }, 11131 PROMPT_CLEAR_HTREE, PR_PREEN_OK },
11124 11132
11125 /* Invalid HTREE count */ 11133 /* Invalid HTREE count */
11126 { PR_2_HTREE_BAD_COUNT, 11134 { PR_2_HTREE_BAD_COUNT,
11127 N_("@p @h %d: node (%B) has bad count (%N)\n"), 11135 N_("@p @h %d: node (%B) has @n count (%N)\n"),
11128 PROMPT_CLEAR_HTREE, PR_PREEN_OK }, 11136 PROMPT_CLEAR_HTREE, PR_PREEN_OK },
11129 11137
11130 /* HTREE interior node has out-of-order hashes in table */ 11138 /* HTREE interior node has out-of-order hashes in table */
@@ -11132,9 +11140,9 @@ static const struct e2fsck_problem problem_table[] = {
11132 N_("@p @h %d: node (%B) has an unordered hash table\n"), 11140 N_("@p @h %d: node (%B) has an unordered hash table\n"),
11133 PROMPT_CLEAR_HTREE, PR_PREEN_OK }, 11141 PROMPT_CLEAR_HTREE, PR_PREEN_OK },
11134 11142
11135 /* Node in HTREE directory has bad depth */ 11143 /* Node in HTREE directory has invalid depth */
11136 { PR_2_HTREE_BAD_DEPTH, 11144 { PR_2_HTREE_BAD_DEPTH,
11137 N_("@p @h %d: node (%B) has bad depth\n"), 11145 N_("@p @h %d: node (%B) has @n depth\n"),
11138 PROMPT_NONE, 0 }, 11146 PROMPT_NONE, 0 },
11139 11147
11140 /* Duplicate directory entry found */ 11148 /* Duplicate directory entry found */
@@ -11236,7 +11244,7 @@ static const struct e2fsck_problem problem_table[] = {
11236 11244
11237 /* Couldn't fix parent directory -- couldn't find it */ 11245 /* Couldn't fix parent directory -- couldn't find it */
11238 { PR_3_FIX_PARENT_NOFIND, 11246 { PR_3_FIX_PARENT_NOFIND,
11239 N_("Couldn't fix parent of @i %i: Couldn't find parent @d entry\n\n"), 11247 N_("Couldn't fix parent of @i %i: Couldn't find parent @d @e\n\n"),
11240 PROMPT_NONE, 0 }, 11248 PROMPT_NONE, 0 },
11241 11249
11242 /* Error allocating inode bitmap */ 11250 /* Error allocating inode bitmap */
@@ -11315,12 +11323,12 @@ static const struct e2fsck_problem problem_table[] = {
11315 11323
11316 /* Unattached zero-length inode */ 11324 /* Unattached zero-length inode */
11317 { PR_4_ZERO_LEN_INODE, 11325 { PR_4_ZERO_LEN_INODE,
11318 "@u @z @i %i. ", 11326 N_("@u @z @i %i. "),
11319 PROMPT_CLEAR, PR_PREEN_OK|PR_NO_OK }, 11327 PROMPT_CLEAR, PR_PREEN_OK|PR_NO_OK },
11320 11328
11321 /* Unattached inode */ 11329 /* Unattached inode */
11322 { PR_4_UNATTACHED_INODE, 11330 { PR_4_UNATTACHED_INODE,
11323 "@u @i %i\n", 11331 N_("@u @i %i\n"),
11324 PROMPT_CONNECT, 0 }, 11332 PROMPT_CONNECT, 0 },
11325 11333
11326 /* Inode ref count wrong */ 11334 /* Inode ref count wrong */
@@ -11332,7 +11340,7 @@ static const struct e2fsck_problem problem_table[] = {
11332 N_("WARNING: PROGRAMMING BUG IN E2FSCK!\n" 11340 N_("WARNING: PROGRAMMING BUG IN E2FSCK!\n"
11333 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n" 11341 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
11334 "@i_link_info[%i] is %N, @i.i_links_count is %Il. " 11342 "@i_link_info[%i] is %N, @i.i_links_count is %Il. "
11335 "They should be the same!\n"), 11343 "They @s the same!\n"),
11336 PROMPT_NONE, 0 }, 11344 PROMPT_NONE, 0 },
11337 11345
11338 /* Pass 5 errors */ 11346 /* Pass 5 errors */
@@ -11430,12 +11438,12 @@ static const struct e2fsck_problem problem_table[] = {
11430 11438
11431 /* Error copying in replacement inode bitmap */ 11439 /* Error copying in replacement inode bitmap */
11432 { PR_5_COPY_IBITMAP_ERROR, 11440 { PR_5_COPY_IBITMAP_ERROR,
11433 "Error copying in replacement @i @B: %m\n", 11441 N_("Error copying in replacement @i @B: %m\n"),
11434 PROMPT_NONE, PR_FATAL }, 11442 PROMPT_NONE, PR_FATAL },
11435 11443
11436 /* Error copying in replacement block bitmap */ 11444 /* Error copying in replacement block bitmap */
11437 { PR_5_COPY_BBITMAP_ERROR, 11445 { PR_5_COPY_BBITMAP_ERROR,
11438 "Error copying in replacement @b @B: %m\n", 11446 N_("Error copying in replacement @b @B: %m\n"),
11439 PROMPT_NONE, PR_FATAL }, 11447 PROMPT_NONE, PR_FATAL },
11440 11448
11441 /* Block range not used, but marked in bitmap */ 11449 /* Block range not used, but marked in bitmap */
@@ -13523,7 +13531,7 @@ static void check_resize_inode(e2fsck_t ctx)
13523 } 13531 }
13524 } 13532 }
13525 13533
13526 /* Read the resizde inode */ 13534 /* Read the resize inode */
13527 pctx.ino = EXT2_RESIZE_INO; 13535 pctx.ino = EXT2_RESIZE_INO;
13528 retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode); 13536 retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
13529 if (retval) { 13537 if (retval) {
@@ -14641,7 +14649,7 @@ static void usage(e2fsck_t ctx)
14641 fprintf(stderr, 14649 fprintf(stderr,
14642 _("Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n" 14650 _("Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
14643 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n" 14651 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
14644 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j ext-journal]\n" 14652 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
14645 "\t\t[-E extended-options] device\n"), 14653 "\t\t[-E extended-options] device\n"),
14646 ctx->program_name); 14654 ctx->program_name);
14647 14655
@@ -14655,7 +14663,7 @@ static void usage(e2fsck_t ctx)
14655 " -v Be verbose\n" 14663 " -v Be verbose\n"
14656 " -b superblock Use alternative superblock\n" 14664 " -b superblock Use alternative superblock\n"
14657 " -B blocksize Force blocksize when looking for superblock\n" 14665 " -B blocksize Force blocksize when looking for superblock\n"
14658 " -j external-journal Set location of the external journal\n" 14666 " -j external_journal Set location of the external journal\n"
14659 " -l bad_blocks_file Add to badblocks list\n" 14667 " -l bad_blocks_file Add to badblocks list\n"
14660 " -L bad_blocks_file Set badblocks list\n" 14668 " -L bad_blocks_file Set badblocks list\n"
14661 )); 14669 ));
@@ -15080,16 +15088,19 @@ static void parse_extended_opts(e2fsck_t ctx, const char *opts)
15080 continue; 15088 continue;
15081 } 15089 }
15082 ctx->ext_attr_ver = ea_ver; 15090 ctx->ext_attr_ver = ea_ver;
15083 } else 15091 } else {
15092 fprintf(stderr, _("Unknown extended option: %s\n"),
15093 token);
15084 extended_usage++; 15094 extended_usage++;
15095 }
15085 } 15096 }
15086 if (extended_usage) { 15097 if (extended_usage) {
15087 bb_error_msg_and_die( 15098 bb_error_msg_and_die(
15088 "Extended options are separated by commas, " 15099 "Extended options are separated by commas, "
15089 "and may take an argument which\n" 15100 "and may take an argument which\n"
15090 "is set off by an equals ('=') sign. " 15101 "is set off by an equals ('=') sign. "
15091 "Valid raid options are:\n" 15102 "Valid extended options are:\n"
15092 "\tea_ver=<ea_version (1 or 2)\n\n"); 15103 "\tea_ver=<ea_version (1 or 2)>\n\n");
15093 } 15104 }
15094} 15105}
15095 15106