summaryrefslogtreecommitdiffstats
path: root/e2fsck/problem.h
blob: b47b0c630c67bbb96f66b9730ad6851cb39e827b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
/*
 * problem.h --- e2fsck problem error codes
 *
 * Copyright 1996 by Theodore Ts'o
 *
 * %Begin-Header%
 * This file may be redistributed under the terms of the GNU Public
 * License.
 * %End-Header%
 */

typedef __u32 problem_t;

struct problem_context {
	errcode_t	errcode;
	ext2_ino_t ino, ino2, dir;
	struct ext2_inode *inode;
	struct ext2_dir_entry *dirent;
	blk64_t	blk, blk2;
	e2_blkcnt_t	blkcount;
	dgrp_t		group;
	__u32		csum1, csum2;
	__u64		num, num2;
	const char *str;
};

/*
 * We define a set of "latch groups"; these are problems which are
 * handled as a set.  The user answers once for a particular latch
 * group.
 */
#define PR_LATCH_MASK	0x0ff0  /* Latch mask */
#define PR_LATCH_BLOCK	0x0010	/* Latch for illegal blocks (pass 1) */
#define PR_LATCH_BBLOCK	0x0020	/* Latch for bad block inode blocks (pass 1) */
#define PR_LATCH_IBITMAP 0x0030 /* Latch for pass 5 inode bitmap proc. */
#define PR_LATCH_BBITMAP 0x0040 /* Latch for pass 5 inode bitmap proc. */
#define PR_LATCH_RELOC	0x0050  /* Latch for superblock relocate hint */
#define PR_LATCH_DBLOCK	0x0060	/* Latch for pass 1b dup block headers */
#define PR_LATCH_LOW_DTIME 0x0070 /* Latch for pass1 orphaned list refugees */
#define PR_LATCH_TOOBIG	0x0080	/* Latch for file to big errors */
#define PR_LATCH_OPTIMIZE_DIR 0x0090 /* Latch for optimize directories */
#define PR_LATCH_BG_CHECKSUM 0x00A0  /* Latch for block group checksums */
#define PR_LATCH_OPTIMIZE_EXT 0x00B0  /* Latch for rebuild extents */

#define PR_LATCH(x)	((((x) & PR_LATCH_MASK) >> 4) - 1)

/*
 * Latch group descriptor flags
 */
#define PRL_YES		0x0001	/* Answer yes */
#define PRL_NO		0x0002	/* Answer no */
#define PRL_LATCHED	0x0004	/* The latch group is latched */
#define PRL_SUPPRESS	0x0008	/* Suppress all latch group questions */

#define PRL_VARIABLE	0x000f	/* All the flags that need to be reset */

/*
 * Pre-Pass 1 errors
 */

/* Block bitmap for group gggg is not in group */
#define PR_0_BB_NOT_GROUP			0x000001

/* Inode bitmap for group gggg is not in group */
#define PR_0_IB_NOT_GROUP			0x000002

/* Inode table for group gggg is not in group.  (block nnnn) */
#define PR_0_ITABLE_NOT_GROUP			0x000003

/* Superblock corrupt */
#define PR_0_SB_CORRUPT				0x000004

/* Filesystem size is wrong */
#define PR_0_FS_SIZE_WRONG			0x000005

/* Fragments not supported */
#define PR_0_NO_FRAGMENTS			0x000006

/* Superblock blocks_per_group = bbbb, should have been cccc */
#define PR_0_BLOCKS_PER_GROUP			0x000007

/* Superblock first_data_block = bbbb, should have been cccc */
#define PR_0_FIRST_DATA_BLOCK			0x000008

/* Filesystem did not have a UUID; generating one */
#define PR_0_ADD_UUID				0x000009

/* Relocate hint */
#define PR_0_RELOCATE_HINT			0x00000A

/* Miscellaneous superblock corruption */
#define PR_0_MISC_CORRUPT_SUPER			0x00000B

/* Error determining physical device size of filesystem */
#define PR_0_GETSIZE_ERROR			0x00000C

/* Inode count in the superblock incorrect */
#define PR_0_INODE_COUNT_WRONG			0x00000D

/* The Hurd does not support the filetype feature */
#define PR_0_HURD_CLEAR_FILETYPE		0x00000E

/* Superblock has an invalid journal (inode inum) */
#define PR_0_JOURNAL_BAD_INODE			0x00000F

/* External journal has multiple filesystem users (unsupported) */
#define PR_0_JOURNAL_UNSUPP_MULTIFS		0x000010

/* Can't find external journal */
#define PR_0_CANT_FIND_JOURNAL			0x000011

/* External journal has bad superblock */
#define PR_0_EXT_JOURNAL_BAD_SUPER		0x000012

/* Superblock has a bad journal UUID */
#define PR_0_JOURNAL_BAD_UUID			0x000013

/* Filesystem journal superblock is an unknown type */
#define PR_0_JOURNAL_UNSUPP_SUPER		0x000014

/* Journal superblock is corrupt */
#define PR_0_JOURNAL_BAD_SUPER			0x000015

/* Superblock has_journal flag is clear but has a journal */
#define PR_0_JOURNAL_HAS_JOURNAL		0x000016

/* Superblock needs_recovery flag is set but no journal is present */
#define PR_0_JOURNAL_RECOVER_SET		0x000017

/* Journal has data, but recovery flag is clear */
#define PR_0_JOURNAL_RECOVERY_CLEAR		0x000018

/* Ask if we should clear the journal */
#define PR_0_JOURNAL_RESET_JOURNAL		0x000019

/* Filesystem revision is 0, but feature flags are set */
#define PR_0_FS_REV_LEVEL			0x00001A

/* Clearing orphan inode */
#define PR_0_ORPHAN_CLEAR_INODE			0x000020

/* Illegal block found in orphaned inode */
#define PR_0_ORPHAN_ILLEGAL_BLOCK_NUM		0x000021

/* Already cleared block found in orphaned inode */
#define PR_0_ORPHAN_ALREADY_CLEARED_BLOCK	0x000022

/* Illegal orphan inode in superblock */
#define PR_0_ORPHAN_ILLEGAL_HEAD_INODE		0x000023

/* Illegal inode in orphaned inode list */
#define PR_0_ORPHAN_ILLEGAL_INODE		0x000024

/* Journal has unsupported read-only feature - abort */
#define PR_0_JOURNAL_UNSUPP_ROCOMPAT		0x000025

/* Journal has unsupported incompatible feature - abort */
#define PR_0_JOURNAL_UNSUPP_INCOMPAT		0x000026

/* Journal version not supported by this e2fsck */
#define PR_0_JOURNAL_UNSUPP_VERSION		0x000027

/* Moving journal from /file to hidden inode */
#define	PR_0_MOVE_JOURNAL			0x000028

/* Error moving journal to hidden file */
#define	PR_0_ERR_MOVE_JOURNAL			0x000029

/* Found invalid V2 journal superblock fields */
#define PR_0_CLEAR_V2_JOURNAL			0x00002A

/* Run journal anyway */
#define PR_0_JOURNAL_RUN			0x00002B

/* Run journal anyway by default */
#define PR_0_JOURNAL_RUN_DEFAULT		0x00002C

/* Backing up journal inode block information */
#define PR_0_BACKUP_JNL				0x00002D

/* Filesystem does not have resize_inode enabled, but
 * s_reserved_gdt_blocks is nnnn; should be zero */
#define PR_0_NONZERO_RESERVED_GDT_BLOCKS	0x00002E

/* Resize_inode not enabled, but the resize inode is non-zero */
#define PR_0_CLEAR_RESIZE_INODE			0x00002F

/* Resize inode not valid */
#define PR_0_RESIZE_INODE_INVALID		0x000030

/* Superblock last mount time is in the future */
#define PR_0_FUTURE_SB_LAST_MOUNT		0x000031

/* Superblock last write time is in the future */
#define PR_0_FUTURE_SB_LAST_WRITE		0x000032

/* Superblock hint for external superblock should be xxxx */
#define PR_0_EXTERNAL_JOURNAL_HINT		0x000033

/* Adding dirhash hint to filesystem */
#define PR_0_DIRHASH_HINT			0x000034

/* group descriptor N checksum is invalid, should be yyyy. */
#define PR_0_GDT_CSUM				0x000035

/* Group descriptor N marked uninitialized without feature set. */
#define PR_0_GDT_UNINIT				0x000036

/* Block bitmap is not initialised and Inode bitmap is -- NO LONGER USED */
/* #define PR_0_BB_UNINIT_IB_INIT			0x000037 */

/* Group descriptor N has invalid unused inodes count. */
#define PR_0_GDT_ITABLE_UNUSED			0x000038

/* Last group block bitmap is uninitialized. */
#define PR_0_BB_UNINIT_LAST			0x000039

/* Journal transaction was corrupt, replay was aborted */
#define PR_0_JNL_TXN_CORRUPT			0x00003A

/* The test_fs filesystem flag is set and ext4 is available */
#define PR_0_CLEAR_TESTFS_FLAG			0x00003B

/* Last mount time is in the future (fudged) */
#define PR_0_FUTURE_SB_LAST_MOUNT_FUDGED	0x00003C

/* Last write time is in the future (fudged) */
#define PR_0_FUTURE_SB_LAST_WRITE_FUDGED	0x00003D

/* One or more block group descriptor checksums are invalid (latch) */
#define PR_0_GDT_CSUM_LATCH			0x00003E

/* Setting free inodes count to right (was wrong) */
#define PR_0_FREE_INODE_COUNT			0x00003F

/* Setting free blocks count to right (was wrong) */
#define PR_0_FREE_BLOCK_COUNT			0x000040

/* Making quota inode hidden */
#define	PR_0_HIDE_QUOTA				0x000041

/* Superblock has invalid MMP block. */
#define PR_0_MMP_INVALID_BLK			0x000042

/* Superblock has invalid MMP magic. */
#define PR_0_MMP_INVALID_MAGIC			0x000043

/* Opening file system failed */
#define PR_0_OPEN_FAILED			0x000044

/* Checking group descriptor failed */
#define PR_0_CHECK_DESC_FAILED			0x000045

/* Superblock metadata_csum supersedes uninit_bg; both feature
 * bits cannot be set simultaneously. */
#define PR_0_META_AND_GDT_CSUM_SET		0x000046

/* Superblock MMP block checksum does not match MMP block. */
#define PR_0_MMP_CSUM_INVALID			0x000047

/* Superblock 64bit filesystem needs extents to access the whole disk */
#define PR_0_64BIT_WITHOUT_EXTENTS		0x000048

/* The first_meta_bg is too big */
#define PR_0_FIRST_META_BG_TOO_BIG		0x000049

/* External journal superblock checksum does not match superblock */
#define PR_0_EXT_JOURNAL_SUPER_CSUM_INVALID	0x00004A

/* metadata_csum_seed means nothing without metadata_csum */
#define PR_0_CSUM_SEED_WITHOUT_META_CSUM	0x00004B

/* Error initializing quota context */
#define PR_0_QUOTA_INIT_CTX			0x00004C

/* Bad required extra isize in superblock */
#define PR_0_BAD_MIN_EXTRA_ISIZE		0x00004D

/* Bad desired extra isize in superblock */
#define PR_0_BAD_WANT_EXTRA_ISIZE		0x00004E

/* Invalid quota inode number */
#define PR_0_INVALID_QUOTA_INO			0x00004F

/* Inode count in the superblock incorrect */
#define PR_0_INODE_COUNT_BIG			0x000050

/* Meta_bg and resize_inode are not compatible, remove resize_inode*/
#define PR_0_DISABLE_RESIZE_INODE		0x000051

/* Orphan file contains holes */
#define PR_0_ORPHAN_FILE_HOLE			0x000052

/* Orphan file block has wrong magic */
#define PR_0_ORPHAN_FILE_BAD_MAGIC		0x000053

/* Orphan file block has wrong checksum */
#define PR_0_ORPHAN_FILE_BAD_CHECKSUM		0x000054

/* Orphan file size isn't multiple of blocks size */
#define PR_0_ORPHAN_FILE_WRONG_SIZE		0x000055

/*
 * Pass 1 errors
 */

/* Pass 1: Checking inodes, blocks, and sizes */
#define PR_1_PASS_HEADER			0x010000

/* Root inode is not a directory */
#define PR_1_ROOT_NO_DIR			0x010001

/* Root inode has dtime set */
#define PR_1_ROOT_DTIME				0x010002

/* Reserved inode has bad mode */
#define PR_1_RESERVED_BAD_MODE			0x010003

/* Deleted inode inum has zero dtime */
#define PR_1_ZERO_DTIME				0x010004

/* Inode inum is in use, but has dtime set */
#define PR_1_SET_DTIME				0x010005

/* Inode inum is a zero-length directory */
#define PR_1_ZERO_LENGTH_DIR			0x010006

/* Group block bitmap at block conflicts with some other fs block */
#define PR_1_BB_CONFLICT			0x010007

/* Group inode bitmap at block conflicts with some other fs block */
#define PR_1_IB_CONFLICT			0x010008

/* Group inode table at block conflicts with some other fs block */
#define PR_1_ITABLE_CONFLICT			0x010009

/* Group block bitmap (block) is bad */
#define PR_1_BB_BAD_BLOCK			0x01000A

/* Group inode bitmap (block) is bad */
#define PR_1_IB_BAD_BLOCK			0x01000B

/* Inode i_size is small, should be larger */
#define PR_1_BAD_I_SIZE				0x01000C

/* Inode i_blocks is small, should be larger */
#define PR_1_BAD_I_BLOCKS			0x01000D

/* Illegal block number in inode */
#define PR_1_ILLEGAL_BLOCK_NUM			0x01000E

/* Block number overlaps filesystem metadata in inode */
#define PR_1_BLOCK_OVERLAPS_METADATA		0x01000F

/* Inode has illegal blocks (latch question) */
#define PR_1_INODE_BLOCK_LATCH			0x010010

/* Too many illegal blocks in inode */
#define	PR_1_TOO_MANY_BAD_BLOCKS		0x010011

/* Illegal block number in bad block inode */
#define PR_1_BB_ILLEGAL_BLOCK_NUM		0x010012

/* Bad block inode has illegal blocks (latch question) */
#define PR_1_INODE_BBLOCK_LATCH			0x010013

/* Duplicate or bad blocks in use! */
#define PR_1_DUP_BLOCKS_PREENSTOP		0x010014

/* Bad block number used as bad block inode indirect block */
#define PR_1_BBINODE_BAD_METABLOCK		0x010015

/* Inconsistency can't be fixed prompt */
#define PR_1_BBINODE_BAD_METABLOCK_PROMPT	0x010016

/* Bad primary block */
#define PR_1_BAD_PRIMARY_BLOCK			0x010017

/* Bad primary block prompt */
#define PR_1_BAD_PRIMARY_BLOCK_PROMPT		0x010018

/* The primary superblock block is on the bad block list */
#define PR_1_BAD_PRIMARY_SUPERBLOCK		0x010019

/* Bad primary block group descriptors */
#define PR_1_BAD_PRIMARY_GROUP_DESCRIPTOR	0x01001A

/* Warning: Group number's superblock (block) is bad */
#define PR_1_BAD_SUPERBLOCK			0x01001B

/* Warning: Group number's copy of the group descriptors has a bad block */
#define PR_1_BAD_GROUP_DESCRIPTORS		0x01001C

/* Block number claimed for no reason in process_bad_blocks */
#define PR_1_PROGERR_CLAIMED_BLOCK		0x01001D

/* Allocating number contiguous block(s) in block group number */
#define PR_1_RELOC_BLOCK_ALLOCATE		0x01001E

/* Allocating block buffer for relocating process */
#define PR_1_RELOC_MEMORY_ALLOCATE		0x01001F

/* Relocating group number's information from X to Y */
#define PR_1_RELOC_FROM_TO			0x010020

/* Relocating group number's information to X */
#define PR_1_RELOC_TO				0x010021

/* Warning: could not read block number of relocation process */
#define PR_1_RELOC_READ_ERR			0x010022

/* Warning: could not write block number of relocation process */
#define PR_1_RELOC_WRITE_ERR			0x010023

/* Error allocating inode bitmap */
#define PR_1_ALLOCATE_IBITMAP_ERROR		0x010024

/* Error allocating block bitmap */
#define PR_1_ALLOCATE_BBITMAP_ERROR		0x010025

/* Error allocating icount link information */
#define PR_1_ALLOCATE_ICOUNT			0x010026

/* Error allocating directory block array */
#define PR_1_ALLOCATE_DBCOUNT			0x010027

/* Error while scanning inodes */
#define PR_1_ISCAN_ERROR			0x010028

/* Error while iterating over blocks in inode */
#define PR_1_BLOCK_ITERATE			0x010029

/* Error storing inode count information */
#define PR_1_ICOUNT_STORE			0x01002A

/* Error storing directory block information */
#define PR_1_ADD_DBLOCK				0x01002B

/* Error reading inode (for clearing) */
#define PR_1_READ_INODE				0x01002C

/* Suppress messages prompt */
#define PR_1_SUPPRESS_MESSAGES			0x01002D

/* Imagic number has imagic flag set when fs doesn't support it */
#define PR_1_SET_IMAGIC				0x01002F

/* Immutable flag set on a device or socket inode */
#define PR_1_SET_IMMUTABLE			0x010030

/* Compression flag set on a non-compressed filesystem -- no longer used*/
/* #define PR_1_COMPR_SET			0x010031 */

/* Non-zero size on on device, fifo or socket inode */
#define PR_1_SET_NONZSIZE			0x010032

/* Filesystem has feature flag(s) set, but is a revision 0 filesystem */
#define PR_1_FS_REV_LEVEL			0x010033

/* Journal inode is not in use, but contains data */
#define PR_1_JOURNAL_INODE_NOT_CLEAR		0x010034

/* Journal is not a regular file */
#define PR_1_JOURNAL_BAD_MODE			0x010035

/* Inode that was part of the orphan list */
#define PR_1_LOW_DTIME				0x010036

/* Inodes that were part of a corrupted orphan linked list found
 * (latch question) */
#define PR_1_ORPHAN_LIST_REFUGEES		0x010037

/* Error allocating refcount structure */
#define PR_1_ALLOCATE_REFCOUNT			0x010038

/* Error reading extended attribute block */
#define PR_1_READ_EA_BLOCK			0x010039

/* Inode number has a bad extended attribute block */
#define PR_1_BAD_EA_BLOCK			0x01003A

/* Error reading Extended Attribute block while fixing refcount -- abort */
#define PR_1_EXTATTR_READ_ABORT			0x01003B

/* Extended attribute number has reference count incorrect, should be */
#define PR_1_EXTATTR_REFCOUNT			0x01003C

/* Error writing Extended Attribute block while fixing refcount */
#define PR_1_EXTATTR_WRITE_ABORT		0x01003D

/* Extended attribute block has h_blocks > 1 */
#define PR_1_EA_MULTI_BLOCK			0x01003E

/* Allocating extended attribute region allocation structure */
#define PR_1_EA_ALLOC_REGION_ABORT		0x01003F

/* Extended Attribute block number is corrupt (allocation collision) */
#define PR_1_EA_ALLOC_COLLISION			0x010040

/* Extended attribute block number is corrupt (invalid name) */
#define PR_1_EA_BAD_NAME			0x010041

/* Extended attribute block number is corrupt (invalid value) */
#define PR_1_EA_BAD_VALUE			0x010042

/* Inode number is too big (latch question) */
#define PR_1_INODE_TOOBIG			0x010043

/* Problem causes directory to be too big */
#define PR_1_TOOBIG_DIR				0x010044

/* Problem causes file to be too big */
#define PR_1_TOOBIG_REG				0x010045

/* Problem causes symlink to be too big */
#define PR_1_TOOBIG_SYMLINK			0x010046

/* Inode has INDEX_FL flag set on filesystem without htree support  */
#define PR_1_HTREE_SET				0x010047

/* Inode number has INDEX_FL flag set but is on a directory */
#define PR_1_HTREE_NODIR			0x010048

/* htree directory has an invalid root node */
#define PR_1_HTREE_BADROOT			0x010049

/* Htree directory has an unsupported hash version */
#define PR_1_HTREE_HASHV			0x01004A

/* Htree directory uses an Incompatible htree root node flag */
#define PR_1_HTREE_INCOMPAT			0x01004B

/* Htree directory has a tree depth which is too big */
#define PR_1_HTREE_DEPTH			0x01004C

/* Bad block inode has an indirect block number that conflicts with
 * filesystem metadata */
#define PR_1_BB_FS_BLOCK			0x01004D

/* Resize inode (re)creation failed */
#define PR_1_RESIZE_INODE_CREATE		0x01004E

/* inode has a extra size i_extra_isize which is invalid */
#define PR_1_EXTRA_ISIZE			0x01004F

/* Extended attribute in inode has a namelen which is invalid */
#define PR_1_ATTR_NAME_LEN			0x010050

/* Extended attribute in inode has a value offset which is invalid */
#define PR_1_ATTR_VALUE_OFFSET			0x010051

/* extended attribute in inode has a value block which is invalid */
#define PR_1_ATTR_VALUE_BLOCK			0x010052

/* extended attribute in inode has a value size which is invalid */
#define PR_1_ATTR_VALUE_SIZE			0x010053

/* extended attribute in inode has a hash which is invalid */
#define PR_1_ATTR_HASH				0x010054

/* inode is a type but it looks like it is really a directory */
#define PR_1_TREAT_AS_DIRECTORY			0x010055

/* Error while reading extent tree in inode */
#define PR_1_READ_EXTENT			0x010056

/* Failure to iterate extents in inode */
#define PR_1_EXTENT_ITERATE_FAILURE		0x010057

/* Inode has an invalid extent starting block */
#define PR_1_EXTENT_BAD_START_BLK		0x010058

/* Inode has an invalid extent that ends beyond filesystem */
#define PR_1_EXTENT_ENDS_BEYOND			0x010059

/* inode has EXTENTS_FL flag set on filesystem without extents support */
#define PR_1_EXTENTS_SET			0x01005A

/* inode is in extents format, but superblock is missing EXTENTS feature */
#define PR_1_EXTENT_FEATURE			0x01005B

/* inode missing EXTENTS_FL, but is an extent inode */
#define PR_1_UNSET_EXTENT_FL			0x01005C

/* Fast symlink has EXTENTS_FL set */
#define PR_1_FAST_SYMLINK_EXTENT_FL		0x01005D

/* Extents are out of order */
#define PR_1_OUT_OF_ORDER_EXTENTS		0x01005E

/* Extent node header invalid */
#define PR_1_EXTENT_HEADER_INVALID		0x01005F

/* PR_1_EOFBLOCKS_FL_SET 0x010060 was here */

/* Failed to convert subcluster block bitmap */
#define PR_1_CONVERT_SUBCLUSTER			0x010061

/* Quota inode is not a regular file */
#define PR_1_QUOTA_BAD_MODE			0x010062

/* Quota inode is not in use, but contains data */
#define PR_1_QUOTA_INODE_NOT_CLEAR		0x010063

/* Quota inode is visible to the user */
#define PR_1_QUOTA_INODE_NOT_HIDDEN		0x010064

/* The bad block inode looks invalid */
#define PR_1_INVALID_BAD_INODE			0x010065

/* Extent has zero length extent */
#define PR_1_EXTENT_LENGTH_ZERO			0x010066

/* inode seems to contain garbage */
#define PR_1_INODE_IS_GARBAGE			0x010067

/* inode passes checks, but checksum does not match inode */
#define PR_1_INODE_ONLY_CSUM_INVALID		0x010068

/* Inode extended attribute is corrupt (allocation collision) */
#define PR_1_INODE_EA_ALLOC_COLLISION		0x010069

/* Inode extent block passes checks, but checksum does not match extent */
#define PR_1_EXTENT_ONLY_CSUM_INVALID		0x01006A

/* Inode extended attribute block passes checks, but checksum does not
 * match block. */
#define PR_1_EA_BLOCK_ONLY_CSUM_INVALID		0x01006C

/* Interior extent node level number of inode doesn't first node down */
#define PR_1_EXTENT_INDEX_START_INVALID		0x01006D

/* Inode end of extent exceeds allowed value */
#define PR_1_EXTENT_END_OUT_OF_BOUNDS		0x01006E

/* inode has INLINE_DATA_FL flag on filesystem without inline data */
#define PR_1_INLINE_DATA_FEATURE		0x01006F

/* inode has INLINE_DATA_FL flag on filesystem without inline data */
#define PR_1_INLINE_DATA_SET			0x010070

/* Inode block conflicts with critical metadata, skipping block checks */
#define PR_1_CRITICAL_METADATA_COLLISION	0x010071

/* Directory inode block <block> should be at block <otherblock> */
#define PR_1_COLLAPSE_DBLOCK			0x010072

/* Directory inode block <block> should be at block <otherblock> */
#define PR_1_UNINIT_DBLOCK			0x010073

/* Inode logical block (physical block) violates cluster allocation */
#define PR_1_MISALIGNED_CLUSTER			0x010074

/* Inode has INLINE_DATA_FL flag but extended attribute not found */
#define PR_1_INLINE_DATA_NO_ATTR		0x010075

/* Special (device/socket/fifo) file (inode num) has extents
 * or inline-data flag set */
#define PR_1_SPECIAL_EXTENTS_IDATA		0x010076

/* Inode has extent header but inline data flag is set */
#define PR_1_CLEAR_INLINE_DATA_FOR_EXTENT	0x010077

/* Inode seems to have inline data but extent flag is set */
#define PR_1_CLEAR_EXTENT_FOR_INLINE_DATA	0x010078

/* Inode seems to have block map but inline data and extent flags set */
#define PR_1_CLEAR_EXTENT_INLINE_DATA_FLAGS	0x010079

/* Inode has inline data and extent flags but i_block contains junk */
#define PR_1_CLEAR_EXTENT_INLINE_DATA_INODE	0x01007A

/* Bad block list says the bad block list inode is bad */
#define PR_1_BADBLOCKS_IN_BADBLOCKS		0x01007B

/* Error allocating extent region allocation structure */
#define PR_1_EXTENT_ALLOC_REGION_ABORT		0x01007C

/* Inode leaf has a duplicate extent mapping */
#define PR_1_EXTENT_COLLISION			0x01007D

/* Error allocating memory for encrypted inode list */
#define PR_1_ALLOCATE_ENCRYPTED_INODE_LIST	0x01007E

/* Inode extent tree could be more shallow */
#define PR_1_EXTENT_BAD_MAX_DEPTH		0x01007F

/* inode num on bigalloc filesystem cannot be block mapped */
#define PR_1_NO_BIGALLOC_BLOCKMAP_FILES		0x010080

/* Inode has corrupt extent header */
#define PR_1_MISSING_EXTENT_HEADER		0x010081

/* Timestamp(s) on inode beyond 2310-04-04 are likely pre-1970. */
#define PR_1_EA_TIME_OUT_OF_RANGE		0x010082

/* Inode has illegal EA value inode */
#define PR_1_ATTR_VALUE_EA_INODE		0x010083

/* Parent inode has invalid EA entry. EA inode does not have
 * EXT4_EA_INODE_FL flag. Delete EA entry? */
#define PR_1_ATTR_NO_EA_INODE_FL		0x010085

/* EA inode for parent inode does not have EXT4_EA_INODE_FL flag */
#define PR_1_ATTR_SET_EA_INODE_FL		0x010086

/* Offer to clear uninitialized flag on an extent */
#define PR_1_CLEAR_UNINIT_EXTENT		0x010087

/* Casefold flag set on a non-directory */
#define PR_1_CASEFOLD_NONDIR			0x010088

/* Casefold flag set, but file system is missing the casefold feature */
#define PR_1_CASEFOLD_FEATURE			0x010089

/* Inode has encrypt flag but no encryption extended attribute */
#define PR_1_MISSING_ENCRYPTION_XATTR		0x01008A

/* Encrypted inode has corrupt encryption extended attribute */
#define PR_1_CORRUPT_ENCRYPTION_XATTR		0x01008B

/* Error allocating memory for casefolded directory list */
#define PR_1_ALLOCATE_CASEFOLDED_DIRLIST	0x01008C

/* Htree directory should use SipHash but does not */
#define PR_1_HTREE_NEEDS_SIPHASH		0x01008D

/* Htree directory uses SipHash but should not */
#define PR_1_HTREE_CANNOT_SIPHASH		0x01008E

/* Orphan file inode is not a regular file */
#define PR_1_ORPHAN_FILE_BAD_MODE		0x01008F

/* Orphan file inode is not in use, but contains data */
#define PR_1_ORPHAN_FILE_NOT_CLEAR		0x010090

/*
 * Pass 1b errors
 */

/* Pass 1B: Rescan for duplicate/bad blocks */
#define PR_1B_PASS_HEADER	0x011000

/* Duplicate/bad block(s) header */
#define PR_1B_DUP_BLOCK_HEADER	0x011001

/* Duplicate/bad block(s) in inode */
#define PR_1B_DUP_BLOCK		0x011002

/* Duplicate/bad block(s) end */
#define PR_1B_DUP_BLOCK_END	0x011003

/* Error while scanning inodes */
#define PR_1B_ISCAN_ERROR	0x011004

/* Error allocating inode bitmap */
#define PR_1B_ALLOCATE_IBITMAP_ERROR 0x011005

/* Error while iterating over blocks */
#define PR_1B_BLOCK_ITERATE	0x011006

/* Error adjusting EA refcount */
#define PR_1B_ADJ_EA_REFCOUNT	0x011007

/* Duplicate/bad block range in inode */
#define PR_1B_DUP_RANGE		0x011008

/* Pass 1C: Scan directories for inodes with dup blocks. */
#define PR_1C_PASS_HEADER	0x012000


/* Pass 1D: Reconciling duplicate blocks */
#define PR_1D_PASS_HEADER	0x013000

/* File has duplicate blocks */
#define PR_1D_DUP_FILE		0x013001

/* List of files sharing duplicate blocks */
#define PR_1D_DUP_FILE_LIST	0x013002

/* File sharing blocks with filesystem metadata  */
#define PR_1D_SHARE_METADATA	0x013003

/* Report of how many duplicate/bad inodes */
#define PR_1D_NUM_DUP_INODES	0x013004

/* Duplicated blocks already reassigned or cloned. */
#define PR_1D_DUP_BLOCKS_DEALT	0x013005

/* Clone duplicate/bad blocks? */
#define PR_1D_CLONE_QUESTION	0x013006

/* Delete file? */
#define PR_1D_DELETE_QUESTION	0x013007

/* Couldn't clone file (error) */
#define PR_1D_CLONE_ERROR	0x013008

/*
 * Pass 1e --- rebuilding extent trees
 */
/* Pass 1e: Rebuilding extent trees */
#define PR_1E_PASS_HEADER		0x014000

/* Error rehash directory */
#define PR_1E_OPTIMIZE_EXT_ERR		0x014001

/* Rebuilding extent trees */
#define PR_1E_OPTIMIZE_EXT_HEADER	0x014002

/* Rebuilding extent %d */
#define PR_1E_OPTIMIZE_EXT		0x014003

/* Rebuilding extent tree end */
#define PR_1E_OPTIMIZE_EXT_END		0x014004

/* Internal error: extent tree depth too large */
#define PR_1E_MAX_EXTENT_TREE_DEPTH	0x014005

/* Inode extent tree could be shorter */
#define PR_1E_CAN_COLLAPSE_EXTENT_TREE	0x014006

/* Inode extent tree could be narrower */
#define PR_1E_CAN_NARROW_EXTENT_TREE	0x014007

/*
 * Pass 2 errors
 */

/* Pass 2: Checking directory structure */
#define PR_2_PASS_HEADER	0x020000

/* Bad inode number for '.' */
#define PR_2_BAD_INODE_DOT	0x020001

/* Directory entry has bad inode number */
#define PR_2_BAD_INO		0x020002

/* Directory entry has deleted or unused inode */
#define PR_2_UNUSED_INODE	0x020003

/* Directory entry is link to '.' */
#define PR_2_LINK_DOT		0x020004

/* Directory entry points to inode now located in a bad block */
#define PR_2_BB_INODE		0x020005

/* Directory entry contains a link to a directory */
#define PR_2_LINK_DIR		0x020006

/* Directory entry contains a link to the root directory */
#define PR_2_LINK_ROOT		0x020007

/* Directory entry has illegal characters in its name */
#define PR_2_BAD_NAME		0x020008

/* Missing '.' in directory inode */
#define PR_2_MISSING_DOT	0x020009

/* Missing '..' in directory inode */
#define PR_2_MISSING_DOT_DOT	0x02000A

/* First entry in directory inode doesn't contain '.' */
#define PR_2_1ST_NOT_DOT	0x02000B

/* Second entry in directory inode doesn't contain '..' */
#define PR_2_2ND_NOT_DOT_DOT	0x02000C

/* i_faddr should be zero */
#define PR_2_FADDR_ZERO		0x02000D

/* i_file_acl should be zero */
#define PR_2_FILE_ACL_ZERO	0x02000E

/* i_size_high should be zero */
#define PR_2_DIR_SIZE_HIGH_ZERO	0x02000F

/* i_frag should be zero */
#define PR_2_FRAG_ZERO		0x020010

/* i_fsize should be zero */
#define PR_2_FSIZE_ZERO		0x020011

/* inode has bad mode */
#define PR_2_BAD_MODE		0x020012

/* directory corrupted */
#define PR_2_DIR_CORRUPTED	0x020013

/* filename too long */
#define PR_2_FILENAME_LONG	0x020014

/* Directory inode has a missing block (hole) */
#define PR_2_DIRECTORY_HOLE	0x020015

/* '.' is not NULL terminated */
#define PR_2_DOT_NULL_TERM	0x020016

/* '..' is not NULL terminated */
#define PR_2_DOT_DOT_NULL_TERM	0x020017

/* Illegal character device in inode */
#define PR_2_BAD_CHAR_DEV	0x020018

/* Illegal block device in inode */
#define PR_2_BAD_BLOCK_DEV	0x020019

/* Duplicate '.' entry */
#define PR_2_DUP_DOT		0x02001A

/* Duplicate '..' entry */
#define PR_2_DUP_DOT_DOT	0x02001B

/* Internal error: couldn't find dir_info */
#define PR_2_NO_DIRINFO		0x02001C

/* Final rec_len is wrong */
#define PR_2_FINAL_RECLEN	0x02001D

/* Error allocating icount structure */
#define PR_2_ALLOCATE_ICOUNT	0x02001E

/* Error iterating over directory blocks */
#define PR_2_DBLIST_ITERATE	0x02001F

/* Error reading directory block */
#define PR_2_READ_DIRBLOCK	0x020020

/* Error writing directory block */
#define PR_2_WRITE_DIRBLOCK	0x020021

/* Error allocating new directory block */
#define PR_2_ALLOC_DIRBOCK	0x020022

/* Error deallocating inode */
#define PR_2_DEALLOC_INODE	0x020023

/* Directory entry for '.' is big.  Split? */
#define PR_2_SPLIT_DOT		0x020024

/* Illegal FIFO */
#define PR_2_BAD_FIFO		0x020025

/* Illegal socket */
#define PR_2_BAD_SOCKET		0x020026

/* Directory filetype not set */
#define PR_2_SET_FILETYPE	0x020027

/* Directory filetype incorrect */
#define PR_2_BAD_FILETYPE	0x020028

/* Directory filetype set when it shouldn't be */
#define PR_2_CLEAR_FILETYPE	0x020029

/* Directory filename can't be zero-length  */
#define PR_2_NULL_NAME		0x020030

/* Invalid symlink */
#define PR_2_INVALID_SYMLINK	0x020031

/* i_file_acl (extended attribute) is bad */
#define PR_2_FILE_ACL_BAD	0x020032

/* Filesystem contains large files, but has no such flag in sb */
#define PR_2_FEATURE_LARGE_FILES 0x020033

/* Node in HTREE directory not referenced */
#define PR_2_HTREE_NOTREF	0x020034

/* Node in HTREE directory referenced twice */
#define PR_2_HTREE_DUPREF	0x020035

/* Node in HTREE directory has bad min hash */
#define PR_2_HTREE_MIN_HASH	0x020036

/* Node in HTREE directory has bad max hash */
#define PR_2_HTREE_MAX_HASH	0x020037

/* Clear invalid HTREE directory */
#define PR_2_HTREE_CLEAR	0x020038

/* Filesystem has large directories, but has no such flag in superblock */
#define PR_2_FEATURE_LARGE_DIRS	0x020039

/* Bad block in htree interior node */
#define PR_2_HTREE_BADBLK	0x02003A

/* Error adjusting EA refcount */
#define PR_2_ADJ_EA_REFCOUNT	0x02003B

/* Invalid HTREE root node */
#define PR_2_HTREE_BAD_ROOT	0x02003C

/* Invalid HTREE limit */
#define PR_2_HTREE_BAD_LIMIT	0x02003D

/* Invalid HTREE count */
#define PR_2_HTREE_BAD_COUNT	0x02003E

/* HTREE interior node has out-of-order hashes in table */
#define PR_2_HTREE_HASH_ORDER	0x02003F

/* Node in HTREE directory has bad depth */
#define PR_2_HTREE_BAD_DEPTH	0x020040

/* Duplicate directory entry found */
#define PR_2_DUPLICATE_DIRENT	0x020041

/* Non-unique filename found */
#define PR_2_NON_UNIQUE_FILE	0x020042

/* Duplicate directory entry found */
#define PR_2_REPORT_DUP_DIRENT	0x020043

/* i_blocks_hi should be zero */
#define PR_2_BLOCKS_HI_ZERO	0x020044

/* Unexpected HTREE block */
#define PR_2_UNEXPECTED_HTREE_BLOCK	0x020045

/* Inode found in group where _INODE_UNINIT is set */
#define PR_2_INOREF_BG_INO_UNINIT	0x020046

/* Inode found in group unused inodes area */
#define PR_2_INOREF_IN_UNUSED		0x020047

/* i_file_acl_hi should be zero */
#define PR_2_I_FILE_ACL_HI_ZERO		0x020048

/* htree root node fails checksum */
#define PR_2_HTREE_ROOT_CSUM_INVALID	0x020049

/* htree node fails checksum */
#define PR_2_HTREE_NODE_CSUM_INVALID	0x02004A

/* no space in leaf for checksum */
#define PR_2_LEAF_NODE_MISSING_CSUM	0x02004C

/* dir leaf node passes checks, but fails checksum */
#define PR_2_LEAF_NODE_ONLY_CSUM_INVALID	0x02004D

/* bad inline directory size */
#define PR_2_BAD_INLINE_DIR_SIZE	0x02004E

/* fixing inline dir size failed */
#define PR_2_FIX_INLINE_DIR_FAILED	0x02004F

/* Encrypted directory entry is too short */
#define PR_2_BAD_ENCRYPTED_NAME		0x020050

/* Encrypted directory contains unencrypted file */
#define PR_2_UNENCRYPTED_FILE		0x020051

/* Encrypted directory contains file with different encryption policy */
#define PR_2_INCONSISTENT_ENCRYPTION_POLICY	0x020052

/* Encoded directory entry has illegal characters in its name */
#define PR_2_BAD_ENCODED_NAME		0x020053

/* Non-unique filename found, but can't rename */
#define PR_2_NON_UNIQUE_FILE_NO_RENAME	0x020054

/*
 * Pass 3 errors
 */

/* Pass 3: Checking directory connectivity */
#define PR_3_PASS_HEADER		0x030000

/* Root inode not allocated */
#define PR_3_NO_ROOT_INODE		0x030001

/* No room in lost+found */
#define PR_3_EXPAND_LF_DIR		0x030002

/* Unconnected directory inode */
#define PR_3_UNCONNECTED_DIR		0x030003

/* /lost+found not found */
#define PR_3_NO_LF_DIR			0x030004

/* .. entry is incorrect */
#define PR_3_BAD_DOT_DOT		0x030005

/* Bad or non-existent /lost+found.  Cannot reconnect */
#define PR_3_NO_LPF			0x030006

/* Could not expand /lost+found */
#define PR_3_CANT_EXPAND_LPF		0x030007

/* Could not reconnect inode */
#define PR_3_CANT_RECONNECT		0x030008

/* Error while trying to find /lost+found */
#define PR_3_ERR_FIND_LPF		0x030009

/* Error in ext2fs_new_block while creating /lost+found */
#define PR_3_ERR_LPF_NEW_BLOCK		0x03000A

/* Error in ext2fs_new_inode while creating /lost+found */
#define PR_3_ERR_LPF_NEW_INODE		0x03000B

/* Error in ext2fs_new_dir_block while creating /lost+found */
#define PR_3_ERR_LPF_NEW_DIR_BLOCK	0x03000C

/* Error while writing directory block for /lost+found */
#define PR_3_ERR_LPF_WRITE_BLOCK	0x03000D

/* Error while adjusting inode count */
#define PR_3_ADJUST_INODE		0x03000E

/* Couldn't fix parent directory -- error */
#define PR_3_FIX_PARENT_ERR		0x03000F

/* Couldn't fix parent directory -- couldn't find it */
#define PR_3_FIX_PARENT_NOFIND		0x030010

/* Error allocating inode bitmap */
#define PR_3_ALLOCATE_IBITMAP_ERROR	0x030011

/* Error creating root directory */
#define PR_3_CREATE_ROOT_ERROR		0x030012

/* Error creating lost and found directory */
#define PR_3_CREATE_LPF_ERROR		0x030013

/* Root inode is not directory; aborting */
#define PR_3_ROOT_NOT_DIR_ABORT		0x030014

/* Cannot proceed without a root inode. */
#define PR_3_NO_ROOT_INODE_ABORT	0x030015

/* Internal error: couldn't find dir_info */
#define PR_3_NO_DIRINFO			0x030016

/* Lost+found is not a directory */
#define PR_3_LPF_NOTDIR			0x030017

/* Lost+found has inline data */
#define PR_3_LPF_INLINE_DATA		0x030018

/* Cannot allocate lost+found */
#define PR_3_LPF_NO_SPACE		0x030019

/* Insufficient space to recover lost files */
#define PR_3_NO_SPACE_TO_RECOVER	0x03001A

/* Lost+found is encrypted */
#define PR_3_LPF_ENCRYPTED		0x03001B

/* Recursively looped directory inode */
#define PR_3_LOOPED_DIR			0x03001D

/*
 * Pass 3a --- rehashing directories
 */
/* Pass 3a: Reindexing directories */
#define PR_3A_PASS_HEADER		0x031000

/* Error iterating over directories */
#define PR_3A_OPTIMIZE_ITER		0x031001

/* Error rehash directory */
#define PR_3A_OPTIMIZE_DIR_ERR		0x031002

/* Rehashing dir header */
#define PR_3A_OPTIMIZE_DIR_HEADER	0x031003

/* Rehashing directory %d */
#define PR_3A_OPTIMIZE_DIR		0x031004

/* Rehashing dir end */
#define PR_3A_OPTIMIZE_DIR_END		0x031005

/* Pass 3B is really just 1E */

/*
 * Pass 4 errors
 */

/* Pass 4: Checking reference counts */
#define PR_4_PASS_HEADER		0x040000

/* Unattached zero-length inode */
#define PR_4_ZERO_LEN_INODE		0x040001

/* Unattached inode */
#define PR_4_UNATTACHED_INODE		0x040002

/* Inode ref count wrong */
#define PR_4_BAD_REF_COUNT		0x040003

/* Inconsistent inode count information cached */
#define PR_4_INCONSISTENT_COUNT		0x040004

/* Extended attribute inode ref count wrong */
#define PR_4_EA_INODE_REF_COUNT		0x040005

/* directory exceeds max links, but no DIR_NLINK feature in superblock */
#define PR_4_DIR_NLINK_FEATURE		0x040006

/* Directory ref count set to overflow but it doesn't have to be */
#define PR_4_DIR_OVERFLOW_REF_COUNT	0x040007

/*
 * Pass 5 errors
 */

/* Pass 5: Checking group summary information */
#define PR_5_PASS_HEADER		0x050000

/* Padding at end of inode bitmap is not set. */
#define PR_5_INODE_BMAP_PADDING		0x050001

/* Padding at end of block bitmap is not set. */
#define PR_5_BLOCK_BMAP_PADDING		0x050002

/* Block bitmap differences header */
#define PR_5_BLOCK_BITMAP_HEADER	0x050003

/* Block not used, but marked in bitmap */
#define PR_5_BLOCK_UNUSED		0x050004

/* Block used, but not marked used in bitmap */
#define PR_5_BLOCK_USED			0x050005

/* Block bitmap differences end */
#define PR_5_BLOCK_BITMAP_END		0x050006

/* Inode bitmap differences header */
#define PR_5_INODE_BITMAP_HEADER	0x050007

/* Inode not used, but marked in bitmap */
#define PR_5_INODE_UNUSED		0x050008

/* Inode used, but not marked used in bitmap */
#define PR_5_INODE_USED			0x050009

/* Inode bitmap differences end */
#define PR_5_INODE_BITMAP_END		0x05000A

/* Free inodes count for group wrong */
#define PR_5_FREE_INODE_COUNT_GROUP	0x05000B

/* Directories count for group wrong */
#define PR_5_FREE_DIR_COUNT_GROUP	0x05000C

/* Free inodes count wrong */
#define PR_5_FREE_INODE_COUNT		0x05000D

/* Free blocks count for group wrong */
#define PR_5_FREE_BLOCK_COUNT_GROUP	0x05000E

/* Free blocks count wrong */
#define PR_5_FREE_BLOCK_COUNT		0x05000F

/* Programming error: bitmap endpoints don't match */
#define PR_5_BMAP_ENDPOINTS		0x050010

/* Internal error: fudging end of bitmap */
#define PR_5_FUDGE_BITMAP_ERROR		0x050011

/* Error copying in replacement inode bitmap */
#define PR_5_COPY_IBITMAP_ERROR		0x050012

/* Error copying in replacement block bitmap */
#define PR_5_COPY_BBITMAP_ERROR		0x050013

/* Block range not used, but marked in bitmap */
#define PR_5_BLOCK_RANGE_UNUSED		0x050014

/* Block range used, but not marked used in bitmap */
#define PR_5_BLOCK_RANGE_USED		0x050015

/* Inode range not used, but marked in bitmap */
#define PR_5_INODE_RANGE_UNUSED		0x050016

/* Inode range used, but not marked used in bitmap */
#define PR_5_INODE_RANGE_USED		0x050017

/* Block in use but group is marked BLOCK_UNINIT */
#define PR_5_BLOCK_UNINIT		0x050018

/* Inode in use but group is marked INODE_UNINIT */
#define PR_5_INODE_UNINIT		0x050019

/* Inode bitmap checksum does not match */
#define PR_5_INODE_BITMAP_CSUM_INVALID	0x05001A

/* Block bitmap checksum does not match */
#define PR_5_BLOCK_BITMAP_CSUM_INVALID	0x05001B

/*
 * Post-Pass 5 errors
 */

/* Recreate the journal if E2F_FLAG_JOURNAL_INODE flag is set */
#define PR_6_RECREATE_JOURNAL		0x060001

/* Update quota information if it is inconsistent */
#define PR_6_UPDATE_QUOTAS		0x060002

/* Error setting block group checksum info */
#define PR_6_SET_BG_CHECKSUM		0x060003

/* Error writing file system info */
#define PR_6_FLUSH_FILESYSTEM		0x060004

/* Error flushing writes to storage device */
#define PR_6_IO_FLUSH			0x060005

/* Error updating quota information */
#define PR_6_WRITE_QUOTAS		0x060006

/* Orphan file without a journal */
#define PR_6_ORPHAN_FILE_WITHOUT_JOURNAL	0x060007

/* Orphan file truncation failed */
#define PR_6_ORPHAN_FILE_TRUNC_FAILED	0x060008

/* Failed to initialize orphan file */
#define PR_6_ORPHAN_FILE_CORRUPTED	0x060009

/* Cannot fix corrupted orphan file with invalid bitmaps */
#define PR_6_ORPHAN_FILE_BITMAP_INVALID	0x06000A

/* Orphan file creation failed */
#define PR_6_ORPHAN_FILE_CREATE_FAILED	0x06000B

/* Orphan file block contains data */
#define PR_6_ORPHAN_BLOCK_DIRTY		0x06000C

/* orphan_present set but orphan file is empty */
#define PR_6_ORPHAN_PRESENT_CLEAN_FILE	0x06000D

/* orphan_present set but orphan_file is not */
#define PR_6_ORPHAN_PRESENT_NO_FILE	0x06000E

/* Orphan file size isn't multiple of blocks size */
#define PR_6_ORPHAN_FILE_WRONG_SIZE	0x06000F

/* Orphan file contains holes */
#define PR_6_ORPHAN_FILE_HOLE		0x060010

/*
 * Function declarations
 */
int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx);
int end_problem_latch(e2fsck_t ctx, int mask);
int set_latch_flags(int mask, int setflags, int clearflags);
int get_latch_flags(int mask, int *value);
void clear_problem_context(struct problem_context *pctx);

/* message.c */
void print_e2fsck_message(FILE *f, e2fsck_t ctx, const char *msg,
			  struct problem_context *pctx, int first,
			  int recurse);