Home | History | Annotate | Download | only in e2fsck
      1 /*
      2  * problem.h --- e2fsck problem error codes
      3  *
      4  * Copyright 1996 by Theodore Ts'o
      5  *
      6  * %Begin-Header%
      7  * This file may be redistributed under the terms of the GNU Public
      8  * License.
      9  * %End-Header%
     10  */
     11 
     12 typedef __u32 problem_t;
     13 
     14 struct problem_context {
     15 	errcode_t	errcode;
     16 	ext2_ino_t ino, ino2, dir;
     17 	struct ext2_inode *inode;
     18 	struct ext2_dir_entry *dirent;
     19 	blk64_t	blk, blk2;
     20 	e2_blkcnt_t	blkcount;
     21 	dgrp_t		group;
     22 	__u32		csum1, csum2;
     23 	__u64		num, num2;
     24 	const char *str;
     25 };
     26 
     27 /*
     28  * We define a set of "latch groups"; these are problems which are
     29  * handled as a set.  The user answers once for a particular latch
     30  * group.
     31  */
     32 #define PR_LATCH_MASK	0x0ff0  /* Latch mask */
     33 #define PR_LATCH_BLOCK	0x0010	/* Latch for illegal blocks (pass 1) */
     34 #define PR_LATCH_BBLOCK	0x0020	/* Latch for bad block inode blocks (pass 1) */
     35 #define PR_LATCH_IBITMAP 0x0030 /* Latch for pass 5 inode bitmap proc. */
     36 #define PR_LATCH_BBITMAP 0x0040 /* Latch for pass 5 inode bitmap proc. */
     37 #define PR_LATCH_RELOC	0x0050  /* Latch for superblock relocate hint */
     38 #define PR_LATCH_DBLOCK	0x0060	/* Latch for pass 1b dup block headers */
     39 #define PR_LATCH_LOW_DTIME 0x0070 /* Latch for pass1 orphaned list refugees */
     40 #define PR_LATCH_TOOBIG	0x0080	/* Latch for file to big errors */
     41 #define PR_LATCH_OPTIMIZE_DIR 0x0090 /* Latch for optimize directories */
     42 #define PR_LATCH_BG_CHECKSUM 0x00A0  /* Latch for block group checksums */
     43 #define PR_LATCH_OPTIMIZE_EXT 0x00B0  /* Latch for rebuild extents */
     44 
     45 #define PR_LATCH(x)	((((x) & PR_LATCH_MASK) >> 4) - 1)
     46 
     47 /*
     48  * Latch group descriptor flags
     49  */
     50 #define PRL_YES		0x0001	/* Answer yes */
     51 #define PRL_NO		0x0002	/* Answer no */
     52 #define PRL_LATCHED	0x0004	/* The latch group is latched */
     53 #define PRL_SUPPRESS	0x0008	/* Suppress all latch group questions */
     54 
     55 #define PRL_VARIABLE	0x000f	/* All the flags that need to be reset */
     56 
     57 /*
     58  * Pre-Pass 1 errors
     59  */
     60 
     61 /* Block bitmap for group gggg is not in group */
     62 #define PR_0_BB_NOT_GROUP			0x000001
     63 
     64 /* Inode bitmap for group gggg is not in group */
     65 #define PR_0_IB_NOT_GROUP			0x000002
     66 
     67 /* Inode table for group gggg is not in group.  (block nnnn) */
     68 #define PR_0_ITABLE_NOT_GROUP			0x000003
     69 
     70 /* Superblock corrupt */
     71 #define PR_0_SB_CORRUPT				0x000004
     72 
     73 /* Filesystem size is wrong */
     74 #define PR_0_FS_SIZE_WRONG			0x000005
     75 
     76 /* Fragments not supported */
     77 #define PR_0_NO_FRAGMENTS			0x000006
     78 
     79 /* Superblock blocks_per_group = bbbb, should have been cccc */
     80 #define PR_0_BLOCKS_PER_GROUP			0x000007
     81 
     82 /* Superblock first_data_block = bbbb, should have been cccc */
     83 #define PR_0_FIRST_DATA_BLOCK			0x000008
     84 
     85 /* Filesystem did not have a UUID; generating one */
     86 #define PR_0_ADD_UUID				0x000009
     87 
     88 /* Relocate hint */
     89 #define PR_0_RELOCATE_HINT			0x00000A
     90 
     91 /* Miscellaneous superblock corruption */
     92 #define PR_0_MISC_CORRUPT_SUPER			0x00000B
     93 
     94 /* Error determining physical device size of filesystem */
     95 #define PR_0_GETSIZE_ERROR			0x00000C
     96 
     97 /* Inode count in the superblock incorrect */
     98 #define PR_0_INODE_COUNT_WRONG			0x00000D
     99 
    100 /* The Hurd does not support the filetype feature */
    101 #define PR_0_HURD_CLEAR_FILETYPE		0x00000E
    102 
    103 /* Superblock has an invalid journal (inode inum) */
    104 #define PR_0_JOURNAL_BAD_INODE			0x00000F
    105 
    106 /* External journal has multiple filesystem users (unsupported) */
    107 #define PR_0_JOURNAL_UNSUPP_MULTIFS		0x000010
    108 
    109 /* Can't find external journal */
    110 #define PR_0_CANT_FIND_JOURNAL			0x000011
    111 
    112 /* External journal has bad superblock */
    113 #define PR_0_EXT_JOURNAL_BAD_SUPER		0x000012
    114 
    115 /* Superblock has a bad journal UUID */
    116 #define PR_0_JOURNAL_BAD_UUID			0x000013
    117 
    118 /* Filesystem journal superblock is an unknown type */
    119 #define PR_0_JOURNAL_UNSUPP_SUPER		0x000014
    120 
    121 /* Journal superblock is corrupt */
    122 #define PR_0_JOURNAL_BAD_SUPER			0x000015
    123 
    124 /* Superblock has_journal flag is clear but has a journal */
    125 #define PR_0_JOURNAL_HAS_JOURNAL		0x000016
    126 
    127 /* Superblock needs_recovery flag is set but no journal is present */
    128 #define PR_0_JOURNAL_RECOVER_SET		0x000017
    129 
    130 /* Journal has data, but recovery flag is clear */
    131 #define PR_0_JOURNAL_RECOVERY_CLEAR		0x000018
    132 
    133 /* Ask if we should clear the journal */
    134 #define PR_0_JOURNAL_RESET_JOURNAL		0x000019
    135 
    136 /* Filesystem revision is 0, but feature flags are set */
    137 #define PR_0_FS_REV_LEVEL			0x00001A
    138 
    139 /* Clearing orphan inode */
    140 #define PR_0_ORPHAN_CLEAR_INODE			0x000020
    141 
    142 /* Illegal block found in orphaned inode */
    143 #define PR_0_ORPHAN_ILLEGAL_BLOCK_NUM		0x000021
    144 
    145 /* Already cleared block found in orphaned inode */
    146 #define PR_0_ORPHAN_ALREADY_CLEARED_BLOCK	0x000022
    147 
    148 /* Illegal orphan inode in superblock */
    149 #define PR_0_ORPHAN_ILLEGAL_HEAD_INODE		0x000023
    150 
    151 /* Illegal inode in orphaned inode list */
    152 #define PR_0_ORPHAN_ILLEGAL_INODE		0x000024
    153 
    154 /* Journal has unsupported read-only feature - abort */
    155 #define PR_0_JOURNAL_UNSUPP_ROCOMPAT		0x000025
    156 
    157 /* Journal has unsupported incompatible feature - abort */
    158 #define PR_0_JOURNAL_UNSUPP_INCOMPAT		0x000026
    159 
    160 /* Journal version not supported by this e2fsck */
    161 #define PR_0_JOURNAL_UNSUPP_VERSION		0x000027
    162 
    163 /* Moving journal from /file to hidden inode */
    164 #define	PR_0_MOVE_JOURNAL			0x000028
    165 
    166 /* Error moving journal to hidden file */
    167 #define	PR_0_ERR_MOVE_JOURNAL			0x000029
    168 
    169 /* Found invalid V2 journal superblock fields */
    170 #define PR_0_CLEAR_V2_JOURNAL			0x00002A
    171 
    172 /* Run journal anyway */
    173 #define PR_0_JOURNAL_RUN			0x00002B
    174 
    175 /* Run journal anyway by default */
    176 #define PR_0_JOURNAL_RUN_DEFAULT		0x00002C
    177 
    178 /* Backing up journal inode block information */
    179 #define PR_0_BACKUP_JNL				0x00002D
    180 
    181 /* Filesystem does not have resize_inode enabled, but
    182  * s_reserved_gdt_blocks is nnnn; should be zero */
    183 #define PR_0_NONZERO_RESERVED_GDT_BLOCKS	0x00002E
    184 
    185 /* Resize_inode not enabled, but the resize inode is non-zero */
    186 #define PR_0_CLEAR_RESIZE_INODE			0x00002F
    187 
    188 /* Resize inode not valid */
    189 #define PR_0_RESIZE_INODE_INVALID		0x000030
    190 
    191 /* Superblock last mount time is in the future */
    192 #define PR_0_FUTURE_SB_LAST_MOUNT		0x000031
    193 
    194 /* Superblock last write time is in the future */
    195 #define PR_0_FUTURE_SB_LAST_WRITE		0x000032
    196 
    197 /* Superblock hint for external superblock should be xxxx */
    198 #define PR_0_EXTERNAL_JOURNAL_HINT		0x000033
    199 
    200 /* Adding dirhash hint to filesystem */
    201 #define PR_0_DIRHASH_HINT			0x000034
    202 
    203 /* group descriptor N checksum is invalid, should be yyyy. */
    204 #define PR_0_GDT_CSUM				0x000035
    205 
    206 /* Group descriptor N marked uninitialized without feature set. */
    207 #define PR_0_GDT_UNINIT				0x000036
    208 
    209 /* Block bitmap is not initialised and Inode bitmap is -- NO LONGER USED */
    210 /* #define PR_0_BB_UNINIT_IB_INIT			0x000037 */
    211 
    212 /* Group descriptor N has invalid unused inodes count. */
    213 #define PR_0_GDT_ITABLE_UNUSED			0x000038
    214 
    215 /* Last group block bitmap is uninitialized. */
    216 #define PR_0_BB_UNINIT_LAST			0x000039
    217 
    218 /* Journal transaction was corrupt, replay was aborted */
    219 #define PR_0_JNL_TXN_CORRUPT			0x00003A
    220 
    221 /* The test_fs filesystem flag is set and ext4 is available */
    222 #define PR_0_CLEAR_TESTFS_FLAG			0x00003B
    223 
    224 /* Last mount time is in the future (fudged) */
    225 #define PR_0_FUTURE_SB_LAST_MOUNT_FUDGED	0x00003C
    226 
    227 /* Last write time is in the future (fudged) */
    228 #define PR_0_FUTURE_SB_LAST_WRITE_FUDGED	0x00003D
    229 
    230 /* One or more block group descriptor checksums are invalid (latch) */
    231 #define PR_0_GDT_CSUM_LATCH			0x00003E
    232 
    233 /* Setting free inodes count to right (was wrong) */
    234 #define PR_0_FREE_INODE_COUNT			0x00003F
    235 
    236 /* Setting free blocks count to right (was wrong) */
    237 #define PR_0_FREE_BLOCK_COUNT			0x000040
    238 
    239 /* Making quota inode hidden */
    240 #define	PR_0_HIDE_QUOTA				0x000041
    241 
    242 /* Superblock has invalid MMP block. */
    243 #define PR_0_MMP_INVALID_BLK			0x000042
    244 
    245 /* Superblock has invalid MMP magic. */
    246 #define PR_0_MMP_INVALID_MAGIC			0x000043
    247 
    248 /* Opening file system failed */
    249 #define PR_0_OPEN_FAILED			0x000044
    250 
    251 /* Checking group descriptor failed */
    252 #define PR_0_CHECK_DESC_FAILED			0x000045
    253 
    254 /* Superblock metadata_csum supersedes uninit_bg; both feature
    255  * bits cannot be set simultaneously. */
    256 #define PR_0_META_AND_GDT_CSUM_SET		0x000046
    257 
    258 /* Superblock MMP block checksum does not match MMP block. */
    259 #define PR_0_MMP_CSUM_INVALID			0x000047
    260 
    261 /* Superblock 64bit filesystem needs extents to access the whole disk */
    262 #define PR_0_64BIT_WITHOUT_EXTENTS		0x000048
    263 
    264 /* The first_meta_bg is too big */
    265 #define PR_0_FIRST_META_BG_TOO_BIG		0x000049
    266 
    267 /* External journal superblock checksum does not match superblock */
    268 #define PR_0_EXT_JOURNAL_SUPER_CSUM_INVALID	0x00004A
    269 
    270 /* metadata_csum_seed means nothing without metadata_csum */
    271 #define PR_0_CSUM_SEED_WITHOUT_META_CSUM	0x00004B
    272 
    273 /* Error initializing quota context */
    274 #define PR_0_QUOTA_INIT_CTX			0x00004C
    275 
    276 /* Bad required extra isize in superblock */
    277 #define PR_0_BAD_MIN_EXTRA_ISIZE		0x00004D
    278 
    279 /* Bad desired extra isize in superblock */
    280 #define PR_0_BAD_WANT_EXTRA_ISIZE		0x00004E
    281 
    282 /* Invalid quota inode number */
    283 #define PR_0_INVALID_QUOTA_INO			0x00004F
    284 
    285 /* Inode count in the superblock incorrect */
    286 #define PR_0_INODE_COUNT_BIG			0x000050
    287 
    288 /* Meta_bg and resize_inode are not compatible, remove resize_inode*/
    289 #define PR_0_DISABLE_RESIZE_INODE		0x000051
    290 
    291 /*
    292  * Pass 1 errors
    293  */
    294 
    295 /* Pass 1: Checking inodes, blocks, and sizes */
    296 #define PR_1_PASS_HEADER			0x010000
    297 
    298 /* Root inode is not a directory */
    299 #define PR_1_ROOT_NO_DIR			0x010001
    300 
    301 /* Root inode has dtime set */
    302 #define PR_1_ROOT_DTIME				0x010002
    303 
    304 /* Reserved inode has bad mode */
    305 #define PR_1_RESERVED_BAD_MODE			0x010003
    306 
    307 /* Deleted inode inum has zero dtime */
    308 #define PR_1_ZERO_DTIME				0x010004
    309 
    310 /* Inode inum is in use, but has dtime set */
    311 #define PR_1_SET_DTIME				0x010005
    312 
    313 /* Inode inum is a zero-length directory */
    314 #define PR_1_ZERO_LENGTH_DIR			0x010006
    315 
    316 /* Group block bitmap at block conflicts with some other fs block */
    317 #define PR_1_BB_CONFLICT			0x010007
    318 
    319 /* Group inode bitmap at block conflicts with some other fs block */
    320 #define PR_1_IB_CONFLICT			0x010008
    321 
    322 /* Group inode table at block conflicts with some other fs block */
    323 #define PR_1_ITABLE_CONFLICT			0x010009
    324 
    325 /* Group block bitmap (block) is bad */
    326 #define PR_1_BB_BAD_BLOCK			0x01000A
    327 
    328 /* Group inode bitmap (block) is bad */
    329 #define PR_1_IB_BAD_BLOCK			0x01000B
    330 
    331 /* Inode i_size is small, should be larger */
    332 #define PR_1_BAD_I_SIZE				0x01000C
    333 
    334 /* Inode i_blocks is small, should be larger */
    335 #define PR_1_BAD_I_BLOCKS			0x01000D
    336 
    337 /* Illegal block number in inode */
    338 #define PR_1_ILLEGAL_BLOCK_NUM			0x01000E
    339 
    340 /* Block number overlaps filesystem metadata in inode */
    341 #define PR_1_BLOCK_OVERLAPS_METADATA		0x01000F
    342 
    343 /* Inode has illegal blocks (latch question) */
    344 #define PR_1_INODE_BLOCK_LATCH			0x010010
    345 
    346 /* Too many illegal blocks in inode */
    347 #define	PR_1_TOO_MANY_BAD_BLOCKS		0x010011
    348 
    349 /* Illegal block number in bad block inode */
    350 #define PR_1_BB_ILLEGAL_BLOCK_NUM		0x010012
    351 
    352 /* Bad block inode has illegal blocks (latch question) */
    353 #define PR_1_INODE_BBLOCK_LATCH			0x010013
    354 
    355 /* Duplicate or bad blocks in use! */
    356 #define PR_1_DUP_BLOCKS_PREENSTOP		0x010014
    357 
    358 /* Bad block number used as bad block inode indirect block */
    359 #define PR_1_BBINODE_BAD_METABLOCK		0x010015
    360 
    361 /* Inconsistency can't be fixed prompt */
    362 #define PR_1_BBINODE_BAD_METABLOCK_PROMPT	0x010016
    363 
    364 /* Bad primary block */
    365 #define PR_1_BAD_PRIMARY_BLOCK			0x010017
    366 
    367 /* Bad primary block prompt */
    368 #define PR_1_BAD_PRIMARY_BLOCK_PROMPT		0x010018
    369 
    370 /* The primary superblock block is on the bad block list */
    371 #define PR_1_BAD_PRIMARY_SUPERBLOCK		0x010019
    372 
    373 /* Bad primary block group descriptors */
    374 #define PR_1_BAD_PRIMARY_GROUP_DESCRIPTOR	0x01001A
    375 
    376 /* Warning: Group number's superblock (block) is bad */
    377 #define PR_1_BAD_SUPERBLOCK			0x01001B
    378 
    379 /* Warning: Group number's copy of the group descriptors has a bad block */
    380 #define PR_1_BAD_GROUP_DESCRIPTORS		0x01001C
    381 
    382 /* Block number claimed for no reason in process_bad_blocks */
    383 #define PR_1_PROGERR_CLAIMED_BLOCK		0x01001D
    384 
    385 /* Allocating number contiguous block(s) in block group number */
    386 #define PR_1_RELOC_BLOCK_ALLOCATE		0x01001E
    387 
    388 /* Allocating block buffer for relocating process */
    389 #define PR_1_RELOC_MEMORY_ALLOCATE		0x01001F
    390 
    391 /* Relocating group number's information from X to Y */
    392 #define PR_1_RELOC_FROM_TO			0x010020
    393 
    394 /* Relocating group number's information to X */
    395 #define PR_1_RELOC_TO				0x010021
    396 
    397 /* Warning: could not read block number of relocation process */
    398 #define PR_1_RELOC_READ_ERR			0x010022
    399 
    400 /* Warning: could not write block number of relocation process */
    401 #define PR_1_RELOC_WRITE_ERR			0x010023
    402 
    403 /* Error allocating inode bitmap */
    404 #define PR_1_ALLOCATE_IBITMAP_ERROR		0x010024
    405 
    406 /* Error allocating block bitmap */
    407 #define PR_1_ALLOCATE_BBITMAP_ERROR		0x010025
    408 
    409 /* Error allocating icount link information */
    410 #define PR_1_ALLOCATE_ICOUNT			0x010026
    411 
    412 /* Error allocating directory block array */
    413 #define PR_1_ALLOCATE_DBCOUNT			0x010027
    414 
    415 /* Error while scanning inodes */
    416 #define PR_1_ISCAN_ERROR			0x010028
    417 
    418 /* Error while iterating over blocks in inode */
    419 #define PR_1_BLOCK_ITERATE			0x010029
    420 
    421 /* Error storing inode count information */
    422 #define PR_1_ICOUNT_STORE			0x01002A
    423 
    424 /* Error storing directory block information */
    425 #define PR_1_ADD_DBLOCK				0x01002B
    426 
    427 /* Error reading inode (for clearing) */
    428 #define PR_1_READ_INODE				0x01002C
    429 
    430 /* Suppress messages prompt */
    431 #define PR_1_SUPPRESS_MESSAGES			0x01002D
    432 
    433 /* Imagic number has imagic flag set when fs doesn't support it */
    434 #define PR_1_SET_IMAGIC				0x01002F
    435 
    436 /* Immutable flag set on a device or socket inode */
    437 #define PR_1_SET_IMMUTABLE			0x010030
    438 
    439 /* Compression flag set on a non-compressed filesystem -- no longer used*/
    440 /* #define PR_1_COMPR_SET			0x010031 */
    441 
    442 /* Non-zero size on on device, fifo or socket inode */
    443 #define PR_1_SET_NONZSIZE			0x010032
    444 
    445 /* Filesystem has feature flag(s) set, but is a revision 0 filesystem */
    446 #define PR_1_FS_REV_LEVEL			0x010033
    447 
    448 /* Journal inode is not in use, but contains data */
    449 #define PR_1_JOURNAL_INODE_NOT_CLEAR		0x010034
    450 
    451 /* Journal is not a regular file */
    452 #define PR_1_JOURNAL_BAD_MODE			0x010035
    453 
    454 /* Inode that was part of the orphan list */
    455 #define PR_1_LOW_DTIME				0x010036
    456 
    457 /* Inodes that were part of a corrupted orphan linked list found
    458  * (latch question) */
    459 #define PR_1_ORPHAN_LIST_REFUGEES		0x010037
    460 
    461 /* Error allocating refcount structure */
    462 #define PR_1_ALLOCATE_REFCOUNT			0x010038
    463 
    464 /* Error reading extended attribute block */
    465 #define PR_1_READ_EA_BLOCK			0x010039
    466 
    467 /* Inode number has a bad extended attribute block */
    468 #define PR_1_BAD_EA_BLOCK			0x01003A
    469 
    470 /* Error reading Extended Attribute block while fixing refcount -- abort */
    471 #define PR_1_EXTATTR_READ_ABORT			0x01003B
    472 
    473 /* Extended attribute number has reference count incorrect, should be */
    474 #define PR_1_EXTATTR_REFCOUNT			0x01003C
    475 
    476 /* Error writing Extended Attribute block while fixing refcount */
    477 #define PR_1_EXTATTR_WRITE_ABORT		0x01003D
    478 
    479 /* Extended attribute block has h_blocks > 1 */
    480 #define PR_1_EA_MULTI_BLOCK			0x01003E
    481 
    482 /* Allocating extended attribute region allocation structure */
    483 #define PR_1_EA_ALLOC_REGION_ABORT		0x01003F
    484 
    485 /* Extended Attribute block number is corrupt (allocation collision) */
    486 #define PR_1_EA_ALLOC_COLLISION			0x010040
    487 
    488 /* Extended attribute block number is corrupt (invalid name) */
    489 #define PR_1_EA_BAD_NAME			0x010041
    490 
    491 /* Extended attribute block number is corrupt (invalid value) */
    492 #define PR_1_EA_BAD_VALUE			0x010042
    493 
    494 /* Inode number is too big (latch question) */
    495 #define PR_1_INODE_TOOBIG			0x010043
    496 
    497 /* Problem causes directory to be too big */
    498 #define PR_1_TOOBIG_DIR				0x010044
    499 
    500 /* Problem causes file to be too big */
    501 #define PR_1_TOOBIG_REG				0x010045
    502 
    503 /* Problem causes symlink to be too big */
    504 #define PR_1_TOOBIG_SYMLINK			0x010046
    505 
    506 /* Inode has INDEX_FL flag set on filesystem without htree support  */
    507 #define PR_1_HTREE_SET				0x010047
    508 
    509 /* Inode number has INDEX_FL flag set but is on a directory */
    510 #define PR_1_HTREE_NODIR			0x010048
    511 
    512 /* htree directory has an invalid root node */
    513 #define PR_1_HTREE_BADROOT			0x010049
    514 
    515 /* Htree directory has an unsupported hash version */
    516 #define PR_1_HTREE_HASHV			0x01004A
    517 
    518 /* Htree directory uses an Incompatible htree root node flag */
    519 #define PR_1_HTREE_INCOMPAT			0x01004B
    520 
    521 /* Htree directory has a tree depth which is too big */
    522 #define PR_1_HTREE_DEPTH			0x01004C
    523 
    524 /* Bad block inode has an indirect block number that conflicts with
    525  * filesystem metadata */
    526 #define PR_1_BB_FS_BLOCK			0x01004D
    527 
    528 /* Resize inode (re)creation failed */
    529 #define PR_1_RESIZE_INODE_CREATE		0x01004E
    530 
    531 /* inode has a extra size i_extra_isize which is invalid */
    532 #define PR_1_EXTRA_ISIZE			0x01004F
    533 
    534 /* Extended attribute in inode has a namelen which is invalid */
    535 #define PR_1_ATTR_NAME_LEN			0x010050
    536 
    537 /* Extended attribute in inode has a value offset which is invalid */
    538 #define PR_1_ATTR_VALUE_OFFSET			0x010051
    539 
    540 /* extended attribute in inode has a value block which is invalid */
    541 #define PR_1_ATTR_VALUE_BLOCK			0x010052
    542 
    543 /* extended attribute in inode has a value size which is invalid */
    544 #define PR_1_ATTR_VALUE_SIZE			0x010053
    545 
    546 /* extended attribute in inode has a hash which is invalid */
    547 #define PR_1_ATTR_HASH				0x010054
    548 
    549 /* inode is a type but it looks like it is really a directory */
    550 #define PR_1_TREAT_AS_DIRECTORY			0x010055
    551 
    552 /* Error while reading extent tree in inode */
    553 #define PR_1_READ_EXTENT			0x010056
    554 
    555 /* Failure to iterate extents in inode */
    556 #define PR_1_EXTENT_ITERATE_FAILURE		0x010057
    557 
    558 /* Inode has an invalid extent starting block */
    559 #define PR_1_EXTENT_BAD_START_BLK		0x010058
    560 
    561 /* Inode has an invalid extent that ends beyond filesystem */
    562 #define PR_1_EXTENT_ENDS_BEYOND			0x010059
    563 
    564 /* inode has EXTENTS_FL flag set on filesystem without extents support */
    565 #define PR_1_EXTENTS_SET			0x01005A
    566 
    567 /* inode is in extents format, but superblock is missing EXTENTS feature */
    568 /* inode has extents, superblock missing INCOMPAT_EXTENTS feature */
    569 #define PR_1_EXTENT_FEATURE			0x01005B
    570 
    571 /* inode missing EXTENTS_FL, but is an extent inode */
    572 #define PR_1_UNSET_EXTENT_FL			0x01005C
    573 
    574 /* Fast symlink has EXTENTS_FL set */
    575 #define PR_1_FAST_SYMLINK_EXTENT_FL		0x01005D
    576 
    577 /* Extents are out of order */
    578 #define PR_1_OUT_OF_ORDER_EXTENTS		0x01005E
    579 
    580 /* Extent node header invalid */
    581 #define PR_1_EXTENT_HEADER_INVALID		0x01005F
    582 
    583 /* PR_1_EOFBLOCKS_FL_SET 0x010060 was here */
    584 
    585 /* Failed to convert subcluster block bitmap */
    586 #define PR_1_CONVERT_SUBCLUSTER			0x010061
    587 
    588 /* Quota inode is not a regular file */
    589 #define PR_1_QUOTA_BAD_MODE			0x010062
    590 
    591 /* Quota inode is not in use, but contains data */
    592 #define PR_1_QUOTA_INODE_NOT_CLEAR		0x010063
    593 
    594 /* Quota inode is visible to the user */
    595 #define PR_1_QUOTA_INODE_NOT_HIDDEN		0x010064
    596 
    597 /* The bad block inode looks invalid */
    598 #define PR_1_INVALID_BAD_INODE			0x010065
    599 
    600 /* Extent has zero length extent */
    601 #define PR_1_EXTENT_LENGTH_ZERO			0x010066
    602 
    603 /* inode seems to contain garbage */
    604 #define PR_1_INODE_IS_GARBAGE			0x010067
    605 
    606 /* inode passes checks, but checksum does not match inode */
    607 #define PR_1_INODE_ONLY_CSUM_INVALID		0x010068
    608 
    609 /* Inode extended attribute is corrupt (allocation collision) */
    610 #define PR_1_INODE_EA_ALLOC_COLLISION		0x010069
    611 
    612 /* Inode extent block passes checks, but checksum does not match extent */
    613 #define PR_1_EXTENT_ONLY_CSUM_INVALID		0x01006A
    614 
    615 /* Inode extended attribute block passes checks, but checksum does not
    616  * match block. */
    617 #define PR_1_EA_BLOCK_ONLY_CSUM_INVALID		0x01006C
    618 
    619 /* Interior extent node level number of inode doesn't first node down */
    620 #define PR_1_EXTENT_INDEX_START_INVALID		0x01006D
    621 
    622 /* Inode end of extent exceeds allowed value */
    623 #define PR_1_EXTENT_END_OUT_OF_BOUNDS		0x01006E
    624 
    625 /* inode has INLINE_DATA_FL flag on filesystem without inline data */
    626 #define PR_1_INLINE_DATA_FEATURE		0x01006F
    627 
    628 /* inode has INLINE_DATA_FL flag on filesystem without inline data */
    629 #define PR_1_INLINE_DATA_SET			0x010070
    630 
    631 /* Inode block conflicts with critical metadata, skipping block checks */
    632 #define PR_1_CRITICAL_METADATA_COLLISION	0x010071
    633 
    634 /* Directory inode block <block> should be at block <otherblock> */
    635 #define PR_1_COLLAPSE_DBLOCK			0x010072
    636 
    637 /* Directory inode block <block> should be at block <otherblock> */
    638 #define PR_1_UNINIT_DBLOCK			0x010073
    639 
    640 /* Inode logical block (physical block) violates cluster allocation */
    641 #define PR_1_MISALIGNED_CLUSTER			0x010074
    642 
    643 /* Inode has INLINE_DATA_FL flag but extended attribute not found */
    644 #define PR_1_INLINE_DATA_NO_ATTR		0x010075
    645 
    646 /* Special (device/socket/fifo) file (inode num) has extents
    647  * or inline-data flag set */
    648 #define PR_1_SPECIAL_EXTENTS_IDATA		0x010076
    649 
    650 /* Inode has extent header but inline data flag is set */
    651 #define PR_1_CLEAR_INLINE_DATA_FOR_EXTENT	0x010077
    652 
    653 /* Inode seems to have inline data but extent flag is set */
    654 #define PR_1_CLEAR_EXTENT_FOR_INLINE_DATA	0x010078
    655 
    656 /* Inode seems to have block map but inline data and extent flags set */
    657 #define PR_1_CLEAR_EXTENT_INLINE_DATA_FLAGS	0x010079
    658 
    659 /* Inode has inline data and extent flags but i_block contains junk */
    660 #define PR_1_CLEAR_EXTENT_INLINE_DATA_INODE	0x01007A
    661 
    662 /* Bad block list says the bad block list inode is bad */
    663 #define PR_1_BADBLOCKS_IN_BADBLOCKS		0x01007B
    664 
    665 /* Error allocating extent region allocation structure */
    666 #define PR_1_EXTENT_ALLOC_REGION_ABORT		0x01007C
    667 
    668 /* Inode leaf has a duplicate extent mapping */
    669 #define PR_1_EXTENT_COLLISION			0x01007D
    670 
    671 /* Error allocating memory for encrypted directory list */
    672 #define PR_1_ALLOCATE_ENCRYPTED_DIRLIST		0x01007E
    673 
    674 /* Inode extent tree could be more shallow */
    675 #define PR_1_EXTENT_BAD_MAX_DEPTH		0x01007F
    676 
    677 /* inode num on bigalloc filesystem cannot be block mapped */
    678 #define PR_1_NO_BIGALLOC_BLOCKMAP_FILES		0x010080
    679 
    680 /* Inode has corrupt extent header */
    681 #define PR_1_MISSING_EXTENT_HEADER		0x010081
    682 
    683 /* Timestamp(s) on inode beyond 2310-04-04 are likely pre-1970. */
    684 #define PR_1_EA_TIME_OUT_OF_RANGE		0x010082
    685 
    686 /* Inode has illegal EA value inode */
    687 #define PR_1_ATTR_VALUE_EA_INODE		0x010083
    688 
    689 /* Parent inode has invalid EA entry. EA inode does not have
    690  * EXT4_EA_INODE_FL flag. Delete EA entry? */
    691 #define PR_1_ATTR_NO_EA_INODE_FL		0x010085
    692 
    693 /* EA inode for parent inode does not have EXT4_EA_INODE_FL flag */
    694 #define PR_1_ATTR_SET_EA_INODE_FL		0x010086
    695 
    696 
    697 /*
    698  * Pass 1b errors
    699  */
    700 
    701 /* Pass 1B: Rescan for duplicate/bad blocks */
    702 #define PR_1B_PASS_HEADER	0x011000
    703 
    704 /* Duplicate/bad block(s) header */
    705 #define PR_1B_DUP_BLOCK_HEADER	0x011001
    706 
    707 /* Duplicate/bad block(s) in inode */
    708 #define PR_1B_DUP_BLOCK		0x011002
    709 
    710 /* Duplicate/bad block(s) end */
    711 #define PR_1B_DUP_BLOCK_END	0x011003
    712 
    713 /* Error while scanning inodes */
    714 #define PR_1B_ISCAN_ERROR	0x011004
    715 
    716 /* Error allocating inode bitmap */
    717 #define PR_1B_ALLOCATE_IBITMAP_ERROR 0x011005
    718 
    719 /* Error while iterating over blocks */
    720 #define PR_1B_BLOCK_ITERATE	0x011006
    721 
    722 /* Error adjusting EA refcount */
    723 #define PR_1B_ADJ_EA_REFCOUNT	0x011007
    724 
    725 /* Duplicate/bad block range in inode */
    726 #define PR_1B_DUP_RANGE		0x011008
    727 
    728 /* Pass 1C: Scan directories for inodes with dup blocks. */
    729 #define PR_1C_PASS_HEADER	0x012000
    730 
    731 
    732 /* Pass 1D: Reconciling duplicate blocks */
    733 #define PR_1D_PASS_HEADER	0x013000
    734 
    735 /* File has duplicate blocks */
    736 #define PR_1D_DUP_FILE		0x013001
    737 
    738 /* List of files sharing duplicate blocks */
    739 #define PR_1D_DUP_FILE_LIST	0x013002
    740 
    741 /* File sharing blocks with filesystem metadata  */
    742 #define PR_1D_SHARE_METADATA	0x013003
    743 
    744 /* Report of how many duplicate/bad inodes */
    745 #define PR_1D_NUM_DUP_INODES	0x013004
    746 
    747 /* Duplicated blocks already reassigned or cloned. */
    748 #define PR_1D_DUP_BLOCKS_DEALT	0x013005
    749 
    750 /* Clone duplicate/bad blocks? */
    751 #define PR_1D_CLONE_QUESTION	0x013006
    752 
    753 /* Delete file? */
    754 #define PR_1D_DELETE_QUESTION	0x013007
    755 
    756 /* Couldn't clone file (error) */
    757 #define PR_1D_CLONE_ERROR	0x013008
    758 
    759 /*
    760  * Pass 1e --- rebuilding extent trees
    761  */
    762 /* Pass 1e: Rebuilding extent trees */
    763 #define PR_1E_PASS_HEADER		0x014000
    764 
    765 /* Error rehash directory */
    766 #define PR_1E_OPTIMIZE_EXT_ERR		0x014001
    767 
    768 /* Rebuilding extent trees */
    769 #define PR_1E_OPTIMIZE_EXT_HEADER	0x014002
    770 
    771 /* Rebuilding extent %d */
    772 #define PR_1E_OPTIMIZE_EXT		0x014003
    773 
    774 /* Rebuilding extent tree end */
    775 #define PR_1E_OPTIMIZE_EXT_END		0x014004
    776 
    777 /* Internal error: extent tree depth too large */
    778 #define PR_1E_MAX_EXTENT_TREE_DEPTH	0x014005
    779 
    780 /* Inode extent tree could be shorter */
    781 #define PR_1E_CAN_COLLAPSE_EXTENT_TREE	0x014006
    782 
    783 /* Inode extent tree could be narrower */
    784 #define PR_1E_CAN_NARROW_EXTENT_TREE	0x014007
    785 
    786 /*
    787  * Pass 2 errors
    788  */
    789 
    790 /* Pass 2: Checking directory structure */
    791 #define PR_2_PASS_HEADER	0x020000
    792 
    793 /* Bad inode number for '.' */
    794 #define PR_2_BAD_INODE_DOT	0x020001
    795 
    796 /* Directory entry has bad inode number */
    797 #define PR_2_BAD_INO		0x020002
    798 
    799 /* Directory entry has deleted or unused inode */
    800 #define PR_2_UNUSED_INODE	0x020003
    801 
    802 /* Directory entry is link to '.' */
    803 #define PR_2_LINK_DOT		0x020004
    804 
    805 /* Directory entry points to inode now located in a bad block */
    806 #define PR_2_BB_INODE		0x020005
    807 
    808 /* Directory entry contains a link to a directory */
    809 #define PR_2_LINK_DIR		0x020006
    810 
    811 /* Directory entry contains a link to the root directory */
    812 #define PR_2_LINK_ROOT		0x020007
    813 
    814 /* Directory entry has illegal characters in its name */
    815 #define PR_2_BAD_NAME		0x020008
    816 
    817 /* Missing '.' in directory inode */
    818 #define PR_2_MISSING_DOT	0x020009
    819 
    820 /* Missing '..' in directory inode */
    821 #define PR_2_MISSING_DOT_DOT	0x02000A
    822 
    823 /* First entry in directory inode doesn't contain '.' */
    824 #define PR_2_1ST_NOT_DOT	0x02000B
    825 
    826 /* Second entry in directory inode doesn't contain '..' */
    827 #define PR_2_2ND_NOT_DOT_DOT	0x02000C
    828 
    829 /* i_faddr should be zero */
    830 #define PR_2_FADDR_ZERO		0x02000D
    831 
    832 /* i_file_acl should be zero */
    833 #define PR_2_FILE_ACL_ZERO	0x02000E
    834 
    835 /* i_size_high should be zero */
    836 #define PR_2_DIR_SIZE_HIGH_ZERO	0x02000F
    837 
    838 /* i_frag should be zero */
    839 #define PR_2_FRAG_ZERO		0x020010
    840 
    841 /* i_fsize should be zero */
    842 #define PR_2_FSIZE_ZERO		0x020011
    843 
    844 /* inode has bad mode */
    845 #define PR_2_BAD_MODE		0x020012
    846 
    847 /* directory corrupted */
    848 #define PR_2_DIR_CORRUPTED	0x020013
    849 
    850 /* filename too long */
    851 #define PR_2_FILENAME_LONG	0x020014
    852 
    853 /* Directory inode has a missing block (hole) */
    854 #define PR_2_DIRECTORY_HOLE	0x020015
    855 
    856 /* '.' is not NULL terminated */
    857 #define PR_2_DOT_NULL_TERM	0x020016
    858 
    859 /* '..' is not NULL terminated */
    860 #define PR_2_DOT_DOT_NULL_TERM	0x020017
    861 
    862 /* Illegal character device in inode */
    863 #define PR_2_BAD_CHAR_DEV	0x020018
    864 
    865 /* Illegal block device in inode */
    866 #define PR_2_BAD_BLOCK_DEV	0x020019
    867 
    868 /* Duplicate '.' entry */
    869 #define PR_2_DUP_DOT		0x02001A
    870 
    871 /* Duplicate '..' entry */
    872 #define PR_2_DUP_DOT_DOT	0x02001B
    873 
    874 /* Internal error: couldn't find dir_info */
    875 #define PR_2_NO_DIRINFO		0x02001C
    876 
    877 /* Final rec_len is wrong */
    878 #define PR_2_FINAL_RECLEN	0x02001D
    879 
    880 /* Error allocating icount structure */
    881 #define PR_2_ALLOCATE_ICOUNT	0x02001E
    882 
    883 /* Error iterating over directory blocks */
    884 #define PR_2_DBLIST_ITERATE	0x02001F
    885 
    886 /* Error reading directory block */
    887 #define PR_2_READ_DIRBLOCK	0x020020
    888 
    889 /* Error writing directory block */
    890 #define PR_2_WRITE_DIRBLOCK	0x020021
    891 
    892 /* Error allocating new directory block */
    893 #define PR_2_ALLOC_DIRBOCK	0x020022
    894 
    895 /* Error deallocating inode */
    896 #define PR_2_DEALLOC_INODE	0x020023
    897 
    898 /* Directory entry for '.' is big.  Split? */
    899 #define PR_2_SPLIT_DOT		0x020024
    900 
    901 /* Illegal FIFO */
    902 #define PR_2_BAD_FIFO		0x020025
    903 
    904 /* Illegal socket */
    905 #define PR_2_BAD_SOCKET		0x020026
    906 
    907 /* Directory filetype not set */
    908 #define PR_2_SET_FILETYPE	0x020027
    909 
    910 /* Directory filetype incorrect */
    911 #define PR_2_BAD_FILETYPE	0x020028
    912 
    913 /* Directory filetype set when it shouldn't be */
    914 #define PR_2_CLEAR_FILETYPE	0x020029
    915 
    916 /* Directory filename can't be zero-length  */
    917 #define PR_2_NULL_NAME		0x020030
    918 
    919 /* Invalid symlink */
    920 #define PR_2_INVALID_SYMLINK	0x020031
    921 
    922 /* i_file_acl (extended attribute) is bad */
    923 #define PR_2_FILE_ACL_BAD	0x020032
    924 
    925 /* Filesystem contains large files, but has no such flag in sb */
    926 #define PR_2_FEATURE_LARGE_FILES 0x020033
    927 
    928 /* Node in HTREE directory not referenced */
    929 #define PR_2_HTREE_NOTREF	0x020034
    930 
    931 /* Node in HTREE directory referenced twice */
    932 #define PR_2_HTREE_DUPREF	0x020035
    933 
    934 /* Node in HTREE directory has bad min hash */
    935 #define PR_2_HTREE_MIN_HASH	0x020036
    936 
    937 /* Node in HTREE directory has bad max hash */
    938 #define PR_2_HTREE_MAX_HASH	0x020037
    939 
    940 /* Clear invalid HTREE directory */
    941 #define PR_2_HTREE_CLEAR	0x020038
    942 
    943 /* Clear the htree flag forcibly */
    944 /* #define PR_2_HTREE_FCLR	0x020039 */
    945 
    946 /* Bad block in htree interior node */
    947 #define PR_2_HTREE_BADBLK	0x02003A
    948 
    949 /* Error adjusting EA refcount */
    950 #define PR_2_ADJ_EA_REFCOUNT	0x02003B
    951 
    952 /* Invalid HTREE root node */
    953 #define PR_2_HTREE_BAD_ROOT	0x02003C
    954 
    955 /* Invalid HTREE limit */
    956 #define PR_2_HTREE_BAD_LIMIT	0x02003D
    957 
    958 /* Invalid HTREE count */
    959 #define PR_2_HTREE_BAD_COUNT	0x02003E
    960 
    961 /* HTREE interior node has out-of-order hashes in table */
    962 #define PR_2_HTREE_HASH_ORDER	0x02003F
    963 
    964 /* Node in HTREE directory has bad depth */
    965 #define PR_2_HTREE_BAD_DEPTH	0x020040
    966 
    967 /* Duplicate directory entry found */
    968 #define PR_2_DUPLICATE_DIRENT	0x020041
    969 
    970 /* Non-unique filename found */
    971 #define PR_2_NON_UNIQUE_FILE	0x020042
    972 
    973 /* Duplicate directory entry found */
    974 #define PR_2_REPORT_DUP_DIRENT	0x020043
    975 
    976 /* i_blocks_hi should be zero */
    977 #define PR_2_BLOCKS_HI_ZERO	0x020044
    978 
    979 /* Unexpected HTREE block */
    980 #define PR_2_UNEXPECTED_HTREE_BLOCK	0x020045
    981 
    982 /* Inode found in group where _INODE_UNINIT is set */
    983 #define PR_2_INOREF_BG_INO_UNINIT	0x020046
    984 
    985 /* Inode found in group unused inodes area */
    986 #define PR_2_INOREF_IN_UNUSED		0x020047
    987 
    988 /* i_file_acl_hi should be zero */
    989 #define PR_2_I_FILE_ACL_HI_ZERO		0x020048
    990 
    991 /* htree root node fails checksum */
    992 #define PR_2_HTREE_ROOT_CSUM_INVALID	0x020049
    993 
    994 /* htree node fails checksum */
    995 #define PR_2_HTREE_NODE_CSUM_INVALID	0x02004A
    996 
    997 /* no space in leaf for checksum */
    998 #define PR_2_LEAF_NODE_MISSING_CSUM	0x02004C
    999 
   1000 /* dir leaf node passes checks, but fails checksum */
   1001 #define PR_2_LEAF_NODE_ONLY_CSUM_INVALID	0x02004D
   1002 
   1003 /* bad inline directory size */
   1004 #define PR_2_BAD_INLINE_DIR_SIZE	0x02004E
   1005 
   1006 /* fixing inline dir size failed */
   1007 #define PR_2_FIX_INLINE_DIR_FAILED	0x02004F
   1008 
   1009 /* Encrypted directory entry is too short */
   1010 #define PR_2_BAD_ENCRYPTED_NAME		0x020050
   1011 
   1012 /*
   1013  * Pass 3 errors
   1014  */
   1015 
   1016 /* Pass 3: Checking directory connectivity */
   1017 #define PR_3_PASS_HEADER		0x030000
   1018 
   1019 /* Root inode not allocated */
   1020 #define PR_3_NO_ROOT_INODE		0x030001
   1021 
   1022 /* No room in lost+found */
   1023 #define PR_3_EXPAND_LF_DIR		0x030002
   1024 
   1025 /* Unconnected directory inode */
   1026 #define PR_3_UNCONNECTED_DIR		0x030003
   1027 
   1028 /* /lost+found not found */
   1029 #define PR_3_NO_LF_DIR			0x030004
   1030 
   1031 /* .. entry is incorrect */
   1032 #define PR_3_BAD_DOT_DOT		0x030005
   1033 
   1034 /* Bad or non-existent /lost+found.  Cannot reconnect */
   1035 #define PR_3_NO_LPF			0x030006
   1036 
   1037 /* Could not expand /lost+found */
   1038 #define PR_3_CANT_EXPAND_LPF		0x030007
   1039 
   1040 /* Could not reconnect inode */
   1041 #define PR_3_CANT_RECONNECT		0x030008
   1042 
   1043 /* Error while trying to find /lost+found */
   1044 #define PR_3_ERR_FIND_LPF		0x030009
   1045 
   1046 /* Error in ext2fs_new_block while creating /lost+found */
   1047 #define PR_3_ERR_LPF_NEW_BLOCK		0x03000A
   1048 
   1049 /* Error in ext2fs_new_inode while creating /lost+found */
   1050 #define PR_3_ERR_LPF_NEW_INODE		0x03000B
   1051 
   1052 /* Error in ext2fs_new_dir_block while creating /lost+found */
   1053 #define PR_3_ERR_LPF_NEW_DIR_BLOCK	0x03000C
   1054 
   1055 /* Error while writing directory block for /lost+found */
   1056 #define PR_3_ERR_LPF_WRITE_BLOCK	0x03000D
   1057 
   1058 /* Error while adjusting inode count */
   1059 #define PR_3_ADJUST_INODE		0x03000E
   1060 
   1061 /* Couldn't fix parent directory -- error */
   1062 #define PR_3_FIX_PARENT_ERR		0x03000F
   1063 
   1064 /* Couldn't fix parent directory -- couldn't find it */
   1065 #define PR_3_FIX_PARENT_NOFIND		0x030010
   1066 
   1067 /* Error allocating inode bitmap */
   1068 #define PR_3_ALLOCATE_IBITMAP_ERROR	0x030011
   1069 
   1070 /* Error creating root directory */
   1071 #define PR_3_CREATE_ROOT_ERROR		0x030012
   1072 
   1073 /* Error creating lost and found directory */
   1074 #define PR_3_CREATE_LPF_ERROR		0x030013
   1075 
   1076 /* Root inode is not directory; aborting */
   1077 #define PR_3_ROOT_NOT_DIR_ABORT		0x030014
   1078 
   1079 /* Cannot proceed without a root inode. */
   1080 #define PR_3_NO_ROOT_INODE_ABORT	0x030015
   1081 
   1082 /* Internal error: couldn't find dir_info */
   1083 #define PR_3_NO_DIRINFO			0x030016
   1084 
   1085 /* Lost+found is not a directory */
   1086 #define PR_3_LPF_NOTDIR			0x030017
   1087 
   1088 /* Lost+found has inline data */
   1089 #define PR_3_LPF_INLINE_DATA		0x030018
   1090 
   1091 /* Cannot allocate lost+found */
   1092 #define PR_3_LPF_NO_SPACE		0x030019
   1093 
   1094 /* Insufficient space to recover lost files */
   1095 #define PR_3_NO_SPACE_TO_RECOVER	0x03001A
   1096 
   1097 /* Lost+found is encrypted */
   1098 #define PR_3_LPF_ENCRYPTED		0x03001B
   1099 
   1100 /*
   1101  * Pass 3a --- rehashing directories
   1102  */
   1103 /* Pass 3a: Reindexing directories */
   1104 #define PR_3A_PASS_HEADER		0x031000
   1105 
   1106 /* Error iterating over directories */
   1107 #define PR_3A_OPTIMIZE_ITER		0x031001
   1108 
   1109 /* Error rehash directory */
   1110 #define PR_3A_OPTIMIZE_DIR_ERR		0x031002
   1111 
   1112 /* Rehashing dir header */
   1113 #define PR_3A_OPTIMIZE_DIR_HEADER	0x031003
   1114 
   1115 /* Rehashing directory %d */
   1116 #define PR_3A_OPTIMIZE_DIR		0x031004
   1117 
   1118 /* Rehashing dir end */
   1119 #define PR_3A_OPTIMIZE_DIR_END		0x031005
   1120 
   1121 /* Pass 3B is really just 1E */
   1122 
   1123 /*
   1124  * Pass 4 errors
   1125  */
   1126 
   1127 /* Pass 4: Checking reference counts */
   1128 #define PR_4_PASS_HEADER		0x040000
   1129 
   1130 /* Unattached zero-length inode */
   1131 #define PR_4_ZERO_LEN_INODE		0x040001
   1132 
   1133 /* Unattached inode */
   1134 #define PR_4_UNATTACHED_INODE		0x040002
   1135 
   1136 /* Inode ref count wrong */
   1137 #define PR_4_BAD_REF_COUNT		0x040003
   1138 
   1139 /* Inconsistent inode count information cached */
   1140 #define PR_4_INCONSISTENT_COUNT		0x040004
   1141 
   1142 /* Extended attribute inode ref count wrong */
   1143 #define PR_4_EA_INODE_REF_COUNT		0x040005
   1144 
   1145 /* directory exceeds max links, but no DIR_NLINK feature in superblock */
   1146 #define PR_4_DIR_NLINK_FEATURE		0x040006
   1147 
   1148 /*
   1149  * Pass 5 errors
   1150  */
   1151 
   1152 /* Pass 5: Checking group summary information */
   1153 #define PR_5_PASS_HEADER		0x050000
   1154 
   1155 /* Padding at end of inode bitmap is not set. */
   1156 #define PR_5_INODE_BMAP_PADDING		0x050001
   1157 
   1158 /* Padding at end of block bitmap is not set. */
   1159 #define PR_5_BLOCK_BMAP_PADDING		0x050002
   1160 
   1161 /* Block bitmap differences header */
   1162 #define PR_5_BLOCK_BITMAP_HEADER	0x050003
   1163 
   1164 /* Block not used, but marked in bitmap */
   1165 #define PR_5_BLOCK_UNUSED		0x050004
   1166 
   1167 /* Block used, but not marked used in bitmap */
   1168 #define PR_5_BLOCK_USED			0x050005
   1169 
   1170 /* Block bitmap differences end */
   1171 #define PR_5_BLOCK_BITMAP_END		0x050006
   1172 
   1173 /* Inode bitmap differences header */
   1174 #define PR_5_INODE_BITMAP_HEADER	0x050007
   1175 
   1176 /* Inode not used, but marked in bitmap */
   1177 #define PR_5_INODE_UNUSED		0x050008
   1178 
   1179 /* Inode used, but not marked used in bitmap */
   1180 #define PR_5_INODE_USED			0x050009
   1181 
   1182 /* Inode bitmap differences end */
   1183 #define PR_5_INODE_BITMAP_END		0x05000A
   1184 
   1185 /* Free inodes count for group wrong */
   1186 #define PR_5_FREE_INODE_COUNT_GROUP	0x05000B
   1187 
   1188 /* Directories count for group wrong */
   1189 #define PR_5_FREE_DIR_COUNT_GROUP	0x05000C
   1190 
   1191 /* Free inodes count wrong */
   1192 #define PR_5_FREE_INODE_COUNT		0x05000D
   1193 
   1194 /* Free blocks count for group wrong */
   1195 #define PR_5_FREE_BLOCK_COUNT_GROUP	0x05000E
   1196 
   1197 /* Free blocks count wrong */
   1198 #define PR_5_FREE_BLOCK_COUNT		0x05000F
   1199 
   1200 /* Programming error: bitmap endpoints don't match */
   1201 #define PR_5_BMAP_ENDPOINTS		0x050010
   1202 
   1203 /* Internal error: fudging end of bitmap */
   1204 #define PR_5_FUDGE_BITMAP_ERROR		0x050011
   1205 
   1206 /* Error copying in replacement inode bitmap */
   1207 #define PR_5_COPY_IBITMAP_ERROR		0x050012
   1208 
   1209 /* Error copying in replacement block bitmap */
   1210 #define PR_5_COPY_BBITMAP_ERROR		0x050013
   1211 
   1212 /* Block range not used, but marked in bitmap */
   1213 #define PR_5_BLOCK_RANGE_UNUSED		0x050014
   1214 
   1215 /* Block range used, but not marked used in bitmap */
   1216 #define PR_5_BLOCK_RANGE_USED		0x050015
   1217 
   1218 /* Inode range not used, but marked in bitmap */
   1219 #define PR_5_INODE_RANGE_UNUSED		0x050016
   1220 
   1221 /* Inode range used, but not marked used in bitmap */
   1222 #define PR_5_INODE_RANGE_USED		0x050017
   1223 
   1224 /* Block in use but group is marked BLOCK_UNINIT */
   1225 #define PR_5_BLOCK_UNINIT		0x050018
   1226 
   1227 /* Inode in use but group is marked INODE_UNINIT */
   1228 #define PR_5_INODE_UNINIT		0x050019
   1229 
   1230 /* Inode bitmap checksum does not match */
   1231 #define PR_5_INODE_BITMAP_CSUM_INVALID	0x05001A
   1232 
   1233 /* Block bitmap checksum does not match */
   1234 #define PR_5_BLOCK_BITMAP_CSUM_INVALID	0x05001B
   1235 
   1236 /*
   1237  * Post-Pass 5 errors
   1238  */
   1239 
   1240 /* Recreate the journal if E2F_FLAG_JOURNAL_INODE flag is set */
   1241 #define PR_6_RECREATE_JOURNAL		0x060001
   1242 
   1243 /* Update quota information if it is inconsistent */
   1244 #define PR_6_UPDATE_QUOTAS		0x060002
   1245 
   1246 /* Error setting block group checksum info */
   1247 #define PR_6_SET_BG_CHECKSUM		0x060003
   1248 
   1249 /* Error writing file system info */
   1250 #define PR_6_FLUSH_FILESYSTEM		0x060004
   1251 
   1252 /* Error flushing writes to storage device */
   1253 #define PR_6_IO_FLUSH			0x060005
   1254 
   1255 /* Error updating quota information */
   1256 #define PR_6_WRITE_QUOTAS		0x060006
   1257 
   1258 
   1259 /*
   1260  * Function declarations
   1261  */
   1262 int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx);
   1263 int end_problem_latch(e2fsck_t ctx, int mask);
   1264 int set_latch_flags(int mask, int setflags, int clearflags);
   1265 int get_latch_flags(int mask, int *value);
   1266 void clear_problem_context(struct problem_context *pctx);
   1267 
   1268 /* message.c */
   1269 void print_e2fsck_message(FILE *f, e2fsck_t ctx, const char *msg,
   1270 			  struct problem_context *pctx, int first,
   1271 			  int recurse);
   1272 
   1273