Whamcloud - gitweb
pass2.c (check_dir_block): Do a more paranoid check when trying
[tools/e2fsprogs.git] / e2fsck / ChangeLog
1 2002-09-29  Theodore Ts'o  <tytso@mit.edu>
2
3         * pass2.c (check_dir_block): Do a more paranoid check when trying
4                 to determine whether or not a directory entry is a
5                 completely empty leaf block or leaf node.  Otherwise
6                 e2fsck might get confused into thinking that a valid dxdir
7                 was corrupted.
8
9         * rehash.c (e2fsck_rehash_dir): Apply patch from Christopher Li
10                 which avoids creating an empty directory entry at the end
11                 of the directory block.  This screws up earlier versions
12                 of the indexed directory patch.
13         
14 2002-09-28  Theodore Ts'o  <tytso@mit.edu>
15
16         * rehash.c (write_directory): Clear the index flag if by
17                 reoptimizing the directory, we bring it back into a
18                 non-indexed state.
19                 (e2fsck_rehash_dir): Allow directories that contain two
20                 blocks to be indexed.  Otherwise when they grow, they
21                 never will be indexed by the kernel.
22
23         * unix.c (main): Only update the master superblock; there's no
24                 point updating the backup superblocks, and it speeds up
25                 fsck slightly.
26
27         * pass2.c (salvage_directory): New function called by
28                 check_dir_block() which is much more sophisticated about
29                 how it salvages corrupted filesystems.
30
31 2001-09-24  Theodore Tso  <tytso@mit.edu>
32
33         * Release of E2fsprogs 1.29
34
35 2002-09-06  Theodore Ts'o  <tytso@mit.edu>
36
37         * rehash.c (copy_dir_entries): Fix bug which caused corrupted
38                 directories if there are 4 or 8 bytes left over in a
39                 directory page when optimizing/reindexing a directory.
40
41 2001-08-31  Theodore Tso  <tytso@thunk.org>
42
43         * Release of E2fsprogs 1.28
44
45 2002-08-31  Theodore Ts'o  <tytso@mit.edu>
46
47         * ehandler.c (e2fsck_handle_read_error): If the user asks to
48                 ignore the error, offer to try forcing a write of the
49                 block to the disk; sometimes this will cause the drive to
50                 remap the bad block.
51
52 2002-08-31  Theodore Ts'o  <tytso@valinux.com>
53
54         * pass2.c (e2fsck_pass2): If this is a HTREE directory, sort the
55                 dblist so that the first block of all of the directories
56                 is handled first so we can read the hash version
57                 information.
58                 (check_dir_block): Examine the root node for correctness,
59                 and offer to clear it if it is not correct.  Also copy the
60                 hash version to the dx_dir structure, so that the proper
61                 hash function can be used for other blocks in the
62                 directory.
63
64         * problem.c, problem.h (PR_2_HTREE_BAD_ROOT): Add new problem code.
65
66 2002-08-21  Theodore Ts'o  <tytso@mit.edu>
67
68         * problem.c: Fix PR_1_RELOC_BLOCK_ALLOCATE message to explain that
69                 it is necessary to find contiguous blocks in a particular
70                 block group.
71
72 2002-08-17  Theodore Ts'o  <tytso@mit.edu>
73
74         * e2fsck.8.in: Add clarifying text describing how e2fsck works
75                 with ext3 filesytems.  (Addresses Debian bug #145044).
76
77         * pass1.c (handle_htree): Add support for EXT2_HASH_TEA
78
79         * e2fsck.h, e2fsck.c (e2fsck_allocate_context): Add new field to
80                 the e2fsck context, ext_attr_ver, which specifies the EA
81                 format version.
82
83         * unix.c (usage, parse_extended_opts, PRS), e2fsck.8.in: Add new
84                 option -E, which allows the users to specify extended
85                 options.  Added ea_ver extended option.
86
87         * pass1.c (e2fsck_pass1_check_device_inode): Add ext2_filsys
88                 argument to this function, so we can account for the
89                 presence of extended attribute blocks attached to device
90                 inodes.
91                 (e2fsck_pass1_check_symlink, e2fsck_pass1): Take into
92                 account the fact that symlinks can also have extended
93                 attribute blocks.
94                 (check_ext_attr): Don't be flexible about the EA format
95                 version.  Check against the version number in
96                 ctx->ext_attr_ver. 
97                 (check_blocks): Check all inodes, so that we account for
98                 extended attribute blocks belonging to special files.
99                 Clean up i_size checks.
100
101         * pass1b.c (pass1b): Check all inodes, so that we account for
102                 extended attribute blocks belonging to special files.
103                 (delete_file_block): Use ext2fs_alloc_block_stats() to
104                 update the filesystem statistics.
105                 (delete_file): Attempt to decrement the extended
106                 attribute refcount, and free the EA block if the count
107                 hits zero.
108                 (clone_file): Fixed bugs in EA handling.  Don't call
109                 block_iterate on inodes that don't have a valid i_block[]
110                 array.  Reread the base inode since it may have been
111                 changed by ext2fs_block_iterate.  When updating inodes as
112                 part of cloning an EA block, write out the correct inode
113                 structure.
114
115         * pass2.c (deallocate_inode_block, deallocate_inode): Use standard
116                 ext2fs_alloc_*_stats functions to update the filesystem 
117                 statistics.
118                 (deallocate_inode): Attempt to decrement the extended
119                 attribute refcount, and free the EA block if the count
120                 hits zero. 
121                 (e2fsck_process_bad_inode): Add extra argument to calls 
122                 to e2fsck_pass1_check_device_inode ().
123
124         * pass3.c (e2fsck_get_lost_and_found): Use standard
125                 ext2fs_alloc_*_stats functions to update the filesystem.
126                 statistics when creating /lost+found.
127                 (adjust_inode_count): Remove debugging code that can never
128                 be triggered.
129
130         * pass4.c (disconnect_inode): Add explanation about why we only
131                 clear inodes that have no data blocks and no EA blocks.
132                 Use ext2fs_inode_alloc_stats2 function to update the
133                 filesystem statistics when clearing a zero-length inode.
134
135         * problem.c, problem.h (PR_1B_ADJ_EA_REFCOUNT,
136                 PR_2_ADJ_EA_REFCOUNT): Add new problem codes.
137
138         * super.c (release_inode_block), (release_orphan_inodes): Use the
139                 standard ext2fs_alloc_*_stats functions to update the
140                 filesystem statistics.
141                 (release_inode_blocks): Attempt to decrement the extended
142                 attribute refcount, and free the EA block if the count
143                 hits zero.
144
145 2002-08-01  Theodore Ts'o  <tytso@mit.edu>
146
147         * dict.c, dict.h: New file from kazlib 1.20 which implements a
148                 red-black tree
149         
150         * pass1b.c: Massive changes to take advantage of dict.c.  This
151                 removes several O(n**2) algorithms from the rare case
152                 where there are a large number of blocks claimed by
153                 multiple inodes.
154
155 2002-07-24  Theodore Ts'o  <tytso@mit.edu>
156
157         * e2fsck.8.in, e2fsck.h, pass3.c (e2fsck_pass3), unix.c, rehash.c:
158                 Add new option -D, which requests e2fsck to optimize all
159                 directories.  Rehash.c will also compress and sort
160                 non-indexed directories.
161
162         * problem.c, problem.h: Rename PR_3A_REHASH_* to PR_3A_OPTIMIZE_*
163
164         * unix.c (PRS): Make sure the signal_cancel is registered without
165                 SA_RESTART.
166
167         * rehash.c (e2fsck_rehash_dir, copy_dir_entries, calculate_tree):
168                 Restructured code in e2fsck_rehash_dir into two new
169                 subroutines to make the code more understandable/maintainable.
170                 (set_root_node): Fixed bug which caused the root node to
171                 be invalid on non-FILETYPE filesystems due to an
172                 unitialized variable.
173                 (calculate_tree): Fix bug where pointers which might get
174                 invalidated if realloc() moves outdir->buf around.
175                 (e2fsck_rehash_dir): Fix memory leak bug.
176
177         * pass3.c (e2fsck_get_lost_and_found), e2fsck.h, e2fsck.c:
178                 Exported as a public interface a function for finding the
179                 lost and found directory.  Cache the location of the lost
180                 and found directory in the e2fsck context structure.
181
182         * util.c (ask_yn, read_a_char): Note when the user has typed ^C,
183                 and abort processing by longjmp'ing to ctx->abort_loc.
184
185 2002-07-23  Theodore Ts'o  <tytso@mit.edu>
186
187         * pass1.c (e2fsck_pass1): If e2fsck is run with -n, don't create
188                 the dirs_to_hash list, since we don't want to reindex
189                 directories if the filesystem is opened read-only.
190
191 2002-07-21  Theodore Ts'o  <tytso@mit.edu>
192
193         * e2fsck.8.in: Document new exit code FSCK_CANCELED
194
195         * unix.c (PRS, signal_cancel): Capture SIGINT and SIGTERM signals
196                 and set a flag in the e2fsck context indicating that
197                 cancellation has been requested, so that e2fsck will exit
198                 only at safe points.
199                 (main): Change the exit handling so that if a cancellation
200                 is requested, return FSCK_CANCELED (a new exit code 32).
201                 e2fsck can now return more than one exit code as part of a
202                 bitmask (as had been documented in the man page).
203
204         * pass2.c (e2fsck_pass2, check_dir_block), pass3.c (e2fsck_pass3),
205                 pass4.c (e2fsck_pass4): Check to see if a cancellation was
206                 requested, and abort processing if necessary.
207
208 2002-07-19  Theodore Ts'o  <tytso@mit.edu>
209
210         * rehash.c, Makefile.in: New file which rewrites directories using
211                 the htree format.
212         
213         * problem.c (fix_problem), problemP.h (PR_PREEN_NOHDR): Add option
214                 which suppresses the header printed when in preen mode.
215
216         * pass3.c (e2fsck_pass3): If there are entries on the dirs_to_hash
217                 list, call e2fsck_rehash_directories to reindex those
218                 directories.
219                 (e2fsck_expand_directory): Generalize the old
220                 expand_dirctory() function so it can expand a directory to
221                 a guaranteed minimum size. 
222
223         * e2fsck.h (struct e2fsck_struct): Add the dirs_to_hash list.  Add
224                 new function prototypes for rehash.c and for
225                 e2fsck_expand_directory().
226         
227         * e2fsck.c (e2fsck_reset_context): Free the dirs_to_hash list.
228
229         * pass1.c (e2fsck_pass1): Initialize the dirs_to_hash list if the
230                 htree feature is present in the filesystem.
231                 (check_blocks): If a non-htree directory has more than 2
232                 blocks, put it on the dirs_to_hash list.
233
234         * pass2.c (clear_htree): Add corrupt htree directories to the
235                 dirs_to_hash list.
236
237         * problem.h, problem.c (PR_3A_PASS_HEADER, PR_3A_REHASH_ITER, 
238                 PR_3A_REHASH_DIR_ERR, PR_3A_REHASH_DIR_HEADER,
239                 PR_3A_REHASH_DIR, PR_3A_REHASH_DIR_END): Add new problem codes
240
241         * pass2.c (parse_int_node), problem.c (PR_2_HTREE_BADBLK): Fix
242                 problem display.
243         
244 2002-07-15  Theodore Ts'o  <tytso@mit.edu>
245
246         * pass2.c (e2fsck_pass2): Use dx_dir->numblocks instead of
247                 dx_dir->ino to indicate that a bad inode was cleared.
248
249 2002-06-26  Theodore Ts'o  <tytso@mit.edu>
250
251         * pass1.c (check_blocks): Move htree handling to handle_htree().
252                 Factor out calls to ext2fs_write_inode so that it happens
253                 if dirty_inode is non-zero.
254                 (handle_htree): Add checks for invalid htree root, invalid
255                 hash version, invalid hash version, and htree depth too deep.
256
257         * problem.h, problem.c (PR_1_HTREE_NODIR, PR_1_HTREE_BADROOT,
258                 PR_1_HTREE_HASHV, PR_1_HTREE_INCOMPAT, PR_1_HTREE_DEPTH): 
259                 Add new problem codes.
260
261         * pass2.c (parse_int_node): Fix silly typo.
262                 (check_dir_block): Change to use new ext2fs_dirhash()
263                 function prototype.
264                 (pass2): Fixed two minor bugs discovered by the test case:
265                 Don't stop checking dxdir's after clearing a bad inode.  
266                 If there is a bad max hash, make sure the bad_dir flag
267                 is set to make sure we try to clear inode.
268
269 2002-06-25  Theodore Ts'o  <tytso@mit.edu>
270
271         * e2fsck.c (e2fsck_reset_context): Free the dx_dirinfo structure.
272
273         * message.c: Add new abbrevations @h and @p, "HTREE directory
274                 inode" and "problem in".
275
276         * pass1.c (check_blocks): If the inode has the INDEX_FL flag,
277                 register the block into the indexed directory data
278                 structures.  Or if the filesystem doesn't have the
279                 DIR_INDEX flag, offer to clear the INDEX_FL.
280
281         * pass2.c (e2fsck_pass2, parse_int_node): Add support check htree
282                 directories (we don't check all possible corruptions yet).
283
284         * problem.h, problem.h (PR_1_HTREE_SET, PR_2_HTREE_NOTREF, 
285                 PR_2_HTREE_DUPREF, PR_2_HTREE_MIN_HASH, PR_2_HTREE_MAX_HASH,
286                 PR_2_HTREE_CLEAR, PR_2_HTREE_FCLR, PR_2_HTREE_BADBLK): Add
287                 new problem codes.
288
289         * unix.c (main): If ENABLE_HTREE is not defined, complain if the
290                 filesystem has the dir_index feature.
291
292         * Makefile.in, e2fsck.h, dx_dirinfo.c: New file (and group of
293                 functions) which keeps track of blocks in HTREE directory
294                 blocks.
295
296 2002-05-22  Andreas Dilger <adilger@clusterfs.com>
297
298         * super.c (check_superblock): Check that the number of inodes and
299                 blocks in a group is less than 2^16, so that the free inode
300                 and block counts for a group fit into the group descriptor
301                 table fields.  Any more than that would need a COMPAT flag.
302
303 2002-05-22  Theodore Ts'o  <tytso@mit.edu>
304
305         * pass1.c (check_ext_attr): Update to support the V2 Bestbits EA
306                 format.  We automatically determine from the first EA
307                 block we visit whether we are using the V1 or V2 format.
308
309 2002-05-21  Theodore Ts'o  <tytso@mit.edu>
310
311         * pass1.c (process_block): If an inode has too many blocks or
312                 is too big, then offer to truncate the inode.
313                 (check_blocks): Don't bother checking the size to see if
314                 it's too big, since that's just a symptom, not the disease
315                 (which we're now appropriately checking in process_block).
316
317         * problem.c, problem.h: Add new problem codes PR_1_INODE_TOOBIG,
318                 PR_1_TOOBIG_DIR, PR_1_TOOBIG_REG, PR_1_TOOBIG_SYMLINK, and
319                 add the latch code PR_LATCH_TOOBIG.
320
321 2002-05-20  Theodore Ts'o  <tytso@mit.edu>
322
323         * e2fsck.h, pass1.c (e2fsck_pass1_check_symlink), pass2.c
324                 (e2fsck_process_bad_inode): Add an extra
325                 argument so a scratch buffer can be passed into the
326                 function.
327
328         * pass1.c (e2fsck_pass1_check_device_inode,
329                 e2fsck_pass1_check_symlink): If the EXT2_INDEX_FL flag is
330                 set, then the device/FIFO is invalid.
331                 (check_immutable): Don't check for EXT2_INDEX_FL; we take
332                 care of that elsewhere now.
333                 (e2fsck_pass1): Check to see if the symlink is valid
334                 before we offer to clear any immutable bits.  This matches
335                 the order in which we check other special files.
336
337         * pass2.c (e2fsck_pass2): Allocate a bigger scratch buffer so we
338                 can pass part of it to e2fsck_process_bad_inode.
339
340         * pass4.c (e2fsck_pass4): If we need to call
341                 e2fsck_process_bad_inode(), allocate the necessary scratch
342                 buffer.
343
344         * problem.h, problem.c: Change PR_2_SYMLINK_SIZE to be
345                 PR_2_INVALID_SYMLINK, and change the text
346                 accordingly.  Revert the text change for PR_1_SET_IMMUTABLE
347                 since we no longer check for EXT2_INDEX_FL in
348                 check_immutable().
349
350 2002-05-18  Andreas Dilger <adilger@clusterfs.com>
351
352         * pass1.c (e2fsck_pass1_check_symlink): Remove checks of
353                 immutable/append-only checks, since this is handled by
354                 check_immutable.  For non-fast symlinks, read in the
355                 data block and check the length to make sure it
356                 matches with the inode size.
357                 (check_immutable): Generalize to also check for the 
358                 EXT2_INDEX_FL flag. 
359                 (check_blocks): For non-regular files, signal a bad inode 
360                 size if i_size_high is non-zero.
361
362         * pass2.c: Only count large files if they are regular files
363                 (not just if they aren't directories).
364
365         * problem.c, problem.h: Change comment for PR_2_SYMLINK_SIZE
366                 to indicate that it can be triggered by any symlink,
367                 not fast symlink.  Change text for PR_1_SET_IMMUTABLE
368                 to indicate that it the EXT2_INDEX_FL was set.
369
370 2002-05-17  Theodore Ts'o  <tytso@mit.edu>
371
372         * pass1.c (e2fsck_pass1): When calculating max_sizes, omit capping
373                 this value by the calculated value of max_sect_sizes.
374                 The inode may be a sparse inode, and the limit of
375                 max_sect_sizes assumed a non-sparse inode and a limit
376                 based on a 32-bit i_blocks field measured in 512 sectors.
377
378         * super.c (check_super_block): Fix check for s_log_block_size so
379                 that takes into account fact that there is an offset of
380                 EXT2_MIN_BLOCK_LOG_SIZE.
381
382         * pass1.c: Allocate max_sizes array to be big enough to support
383                 the larger block sizes.
384
385 2002-05-16  Andreas Dilger <adilger@clusterfs.com>
386
387         * unix.c (main), util.c (get_backup_sb): Use EXT2_MAX_BLOCK_SIZE
388                 instead of using a hardcoded value of 4096.
389
390         * super.c (check_super_block): Change checks for s_log_block_size
391                 s_log_frag_size so they support the larger block sizes.
392
393         * pass1.c (e2fsck_pass1): Calculate max_sizes array for block
394                 sizes up to EXT2_MAX_BLOCK_SIZE (to support block sizes
395                 greater than 4k).
396
397 2002-03-08  Theodore Tso  <tytso@mit.edu>
398
399         * Release of E2fsprogs 1.27
400
401 2002-03-07  Theodore Tso  <tytso@mit.edu>
402
403         * journal.c, pass5.c, revoke.c: Fix gcc -Wall complaints
404
405 2002-03-07  Theodore Tso  <tytso@mit.edu>
406
407         * unix.c (main): Don't close the filesystem before calling
408                 fatal_error(); this just causes a needless warning about a
409                 bad I/O manager magic number.
410
411         * journal.c (e2fsck_check_ext3_journal): Offer to clear the inode
412                 in case the journal is too small, or the inode number in
413                 the superblock doesn't appear to be random.
414
415 2002-03-06  Theodore Tso  <tytso@mit.edu>
416
417         * problem.h, problem.c: PR_5_BLOCK_RANGE_UNUSED,
418                 PR_5_BLOCK_RANGE_USED, PR_5_INODE_RANGE_UNUSED,
419                 PR_5_INODE_RANGE_USED: Add new problem codes.
420
421         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Collapse
422                 reporting of adjacent blocks and inodes into a range.
423
424 2002-03-04  Philipp Thomas  <pthomas@suse.de>
425
426         * unix.c (main): Newer libintl needs LC_CTYPE to be set in
427                 addition to LC_MESSAGES.
428
429 2002-02-24  Theodore Tso  <tytso@mit.edu>
430
431         * Makefile.in (install): Install hard links for man pages for
432                 fsck.ext2 and fsck.ext3.  Remove any compressed man
433                 pages before installing the man pages.
434
435 2002-02-22  Theodore Tso  <tytso@mit.edu>
436
437         * journal.c: Improve code maintainability and reduce code size by 
438                 moving common code paths in e2fsck_journal_init_dev() and
439                 e2fsck_journal_init_inode() into e2fsck_get_journal().
440                 Also fixed a memory leak in recover_ext3_journal().
441
442         * super.c (release_orphan_inodes): Fix memory leak.
443
444 2002-02-03  Theodore Tso  <tytso@thunk.org>
445
446         * Release of E2fsprogs 1.26
447
448 2001-12-24  Theodore Tso  <tytso@mit.edu>
449
450         * unix.c (PRS): Don't allow the -c and -l/-L options to be
451                 specified at the same time.
452
453         * e2fsck.h (E2F_OPT_WRITECHECK), unix.c (PRS), 
454                 badblocks.c (read_bad_blocks_file): If two -c options are
455                 specified, then perform a non-destructive read/write scan
456                 of the disk.
457
458         * e2fsck.8.in: Document the double -c option; also encourage users
459                 to use -c instead of the -l/-L options since it's too hard
460                 for users to get things like the blocksize parameter correct.
461
462 2001-12-23  Theodore Tso  <tytso@mit.edu>
463
464         * util.c (get_backup_sb): This function now searches for the
465                 backup superblock by iterating over possible blocksizes
466                 instead of defaulting a guess of 8193 if the superblock
467                 isn't available.
468
469         * message.c (expand_percent_expression), unix.c (main): Pass in
470                 new parameters to get_backup_sb.  Also, in unix.c, use the
471                 blocksize paramter in the e2fsck context structure instead
472                 of using a static variable, since get_backup_sb wants to
473                 be able to set the blocksize paramter.
474
475         * e2fsck.h: Update function prototype for get_backup_sb; also add
476                 the blocksize parameter to the e2fsck context structure.
477
478         * Makefile.in, jfs_user.h: Move linux/jbd.h to
479                 ext2fs/kernel-jbd.h, to avoid using the system header
480                 file version of hbd.h when using diet glibc (since it
481                 forcibly adds /usr/include to the beginning of the
482                 include search path.)
483
484 2001-12-21  Theodore Tso  <tytso@mit.edu>
485
486         * problem.c (fix_problem): Use ctx->filesystem_name if the
487                 ctx->device_name is NULL.
488
489         * journal.c (e2fsck_check_ext3_journal): Give the opportunity to
490                 run the journal even if recovery flag is cleared.  If
491                 we're using a backup superblock, run the journal by
492                 default.
493
494         * e2fsck.h (E2F_OPT_FORCE), unix.c (PRS, check_if_skip): Use a
495                 bitfield in the e2fsck context flags word to indicate
496                 whether or not a check should be forced.  This allows the
497                 journal code to set the option if necessary to force a
498                 filesystem check.
499
500         * problem.h, problem.c: Remove PR_0_JOURNAL_RESET_JOURNAL, and add
501                 PR_0_JOURNAL_RUN and PR_0_JOURNAL_RUN_DEFAULT.  Update
502                 problem decription texts.
503
504 2001-12-16  Theodore Tso  <tytso@mit.edu>
505
506         * e2fsck.h (ext2fs_get_refcount_size), unix.c (check_mount, PRS), 
507                 pass1.c (adjust_extattr_refcount), 
508                 ea_refcount.c (ea_refcount_create): Fix gcc -Wall nits.
509         
510         * recovery.c, revoke.c: Update to versions from 2.4.17-pre8.
511
512         * journal.c, jfs_user.h: Update support code for new version of
513                 recover.c and revoke.c.  Fix support for filesystems with
514                 external journals.
515
516 2001-11-30 Gabriel Paubert <paubert@iram.es>
517
518         * journal.c (e2fsck_journal_load): Fix an endianness bug.
519
520 2001-11-26  Theodore Tso  <tytso@mit.edu>
521
522         * super.c (check_super_block): Make sure that if the inode table
523                 or allocation bitmap is zero, that it is marked as
524                 invalid, so that in pass #1, a new bitmap/inode table gets
525                 properly allocated.  (Addresses Debian Bug #116975)
526
527 2001-11-24  Theodore Tso  <tytso@mit.edu>
528
529         * e2fsck.8.in: Fix minor typo in man page and clarify device
530                 specification.
531
532 2001-10-07  Theodore Tso  <tytso@mit.edu>
533
534         * journal.c (clear_v2_journal_fields, e2fsck_journal_load): If the
535                 V2 fields are set on a V1 journal superblock, or an
536                 internal V2 journal has s_nr_users is non-zero, clear the
537                 entire journal superblock beyond the V1 superblock.  This
538                 fixes botched V1->V2 updates.
539
540         * problem.c, problem.h (PR_0_CLEAR_V2_JOURNAL): Add new problem code.
541
542 2001-09-20  Theodore Tso  <tytso@mit.edu>
543
544         * e2fsck.h, journal.c (e2fsck_move_ext3_journal): Add new function
545                 which will automatically relocate the ext3 journal from a
546                 visible file to an invisible journal file if the
547                 filesystem has been opened read/write.
548
549         * super.c (check_super_block): Add call to e2fsck_move_ext3_journal
550
551         * problem.c, problem.h (PR_0_MOVE_JOURNAL, PR_0_ERR_MOVE_JOURNAL):
552                 Add new problem codes.
553
554 2001-09-20  Theodore Tso  <tytso@thunk.org>
555
556         * Release of E2fsprogs 1.25
557
558 2001-09-19  Theodore Tso  <tytso@mit.edu>
559
560         * unix.c (main): If a superblock is specified explicitly by the
561                 user, don't try to automatically fall back to an
562                 alternate superblock.
563
564 2001-09-02  Theodore Tso  <tytso@thunk.org>
565
566         * Release of E2fsprogs 1.24a
567
568 2001-08-30  Theodore Tso  <tytso@thunk.org>
569
570         * Release of E2fsprogs 1.24
571
572 2001-08-30  Theodore Tso  <tytso@valinux.com>
573
574         * pass1.c (e2fsck_pass1): For EXT2_RESIZE_INO, allow its i_mode to
575                 either be zero or a regular file (for compatibility with
576                 Andreas's on-line resizing programs).
577
578 2001-08-27  Theodore Tso  <tytso@valinux.com>
579
580         * unix.c (main): Remove EXT2FS_VERSION from the version display,
581                 since it only confuses people.
582
583         * pass1.c (strnlen): Provide strnlen if libc doesn't.
584
585 2001-08-15  Theodore Tso  <tytso@valinux.com>
586
587         * Release of E2fsprogs 1.23
588
589 2001-08-13  Theodore Tso  <tytso@valinux.com>
590
591         * super.c (release_orphan_inodes): If the filesystem contains
592                 errors, don't run the orphan * list, since the orphan list
593                 can't be trusted.
594
595         * pass1.c (check_size): Fix logic in check_size; the previous code
596                 only offered to clear the inode size fields if both size
597                 and i_size_high were zero.
598                 (e2fsck_pass1_check_device_inode): If i_blocks is
599                 non-zero, then assume that the device/socket/fifo inode
600                 is bogus.
601
602 2001-08-09  Theodore Tso  <tytso@valinux.com>
603
604         * pass1.c, pass2.c, problem.c, problem.h: Fix bug introduced by
605                 Andreas's symlink code; check_blocks() was unconditionally
606                 testing inode_bad_map without checking to see if it
607                 existed first.  Fixed problem a different way; we now no
608                 longer check inode_bad_map at all, since the file might
609                 not get deleted in pass 2 anyway.  We move the large file
610                 feature reconciliation code to to e2fsck_pass2(), and in
611                 deallocate_inode() in pass2.c, we decrement the large
612                 files counter if we're about to delete a large file.
613
614         * unix.c (show_stats): Print the number of large files in verbose
615                 mode.
616
617 2001-08-07  Theodore Tso  <tytso@valinux.com>
618
619         * journal.c (recover_ext3_journal): If s_errno is set in the
620                 journal superblock, set the EXT2_ERROR_FS flag in the
621                 filesystem superblock after the journal is run.
622
623 2001-08-04  Andreas Dilger  <root@lynx.adilger.int>
624
625         * message.c:  Change comments for %D and %d expansion in e2fsck
626                 problem codes.  It was not consistent which was for dirent
627                 expansion, and which was for directory number expansion.
628
629         * problem.c (PR_2_FINAL_RECLEN, PR_2_BAD_FILETYPE): Fix problem
630                 codes which got caught by the confusion between %D and %d.
631
632 2001-08-04  Theodore Tso  <tytso@valinux.com>
633
634         * problem.c (PR_2_SYMLINK_SIZE): Change description to make it
635                 more clear (and remove %s expansion).  Also add missing
636                 periods to the end of a number of problem descriptions.
637
638         * pass2.c (e2fsck_process_bad_inode): Remove unneeded problem
639                 context string set now that the problem description for
640                 PR_2_SYMLINK_SIZE has been changed.
641
642         * pass1.c (e2fsck_pass1_check_symlink): Consolidate some checks,
643                 and check the validity of the symlink block here (so that
644                 we detect this case here instead of later).  Also use
645                 sizeof(inode->i_block) instead EXT2_LINK_DIR.
646
647 2001-07-30  Theodore Tso  <tytso@valinux.com>
648
649         * unix.c (check_mount): Remove the code which tested for the root
650                 filesystem being mounted read-only, and depend on the
651                 results flags from ext2fs_check_if_mounted.
652
653 2001-07-29  Theodore Tso  <tytso@valinux.com>
654
655         * unix.c (check_if_skip): Free the e2fsck context structure on a
656                 normal clean filesystem exit, to make it easier to find
657                 real memory leaks.
658                 (PRS): Only update the path to include /sbin at the
659                 beginning if the -c option is given, again to make it
660                 easier to find memory leaks.
661                 (main): Move the final print_resource_track call after the
662                 filesystem and the context are freed.
663
664         * journal.c (e2fsck_journal_init_dev): Avoid memory leak if we
665                 need to search for the journal device.
666                 (e2fsck_journal_release): Free the journal IO channel when
667                 we release the journal handle, to avoid a memory leak.
668
669         * e2fsck.c (e2fsck_reset_context): Fix bug; only close the io
670                 channel if it is *different* from the filesystem io
671                 channel.
672
673 2001-07-27  Theodore Tso  <tytso@valinux.com>
674
675         * problem.c (PR_1_SET_IMMUTABLE): Clarify problem message.
676
677         * pass1.c (e2fsck_pass1): Check for symlinks that have the
678                 immutable flag set (and offer to clear them).
679
680 2001-07-26  Theodore Tso  <tytso@valinux.com>
681
682         * pass1.c (e2fsck_pass1): Free ctx->block_ea_map at the end of
683                 pass 1.
684
685 2001-07-25  Theodore Tso  <tytso@valinux.com>
686
687         * pass1.c (check_ext_attr): Skip zero-length EA entries.
688
689         * problem.c: PR_1_EA_ALLOC_COLLISION shouldn't abort, but should
690                 prompt to clear the EA block.
691
692 2001-07-22  Theodore Tso  <tytso@valinux.com>
693
694         * journal.c (ll_rw_block): Use ctx->journal_io instead of the
695                 filesystem's io_channel.
696                 (e2fsck_journal_init_dev): New function which supports 
697                 initialization of the external journal.
698                 (e2fsck_get_journal): Remove code which flagged an error
699                 if the superblock reported the use of an external journal.
700                 (ext3_journal_via_mount): Remove unsued, #ifdefed out function.
701
702         * problem.c, problem.h: Removed error codes no longer used
703                 (PR_0_JOURNAL_UNSUPP_DEV, PR_0_JOURNAL_BAD_DEV,
704                 PR_0_JOURNAL_UNSUPP_UUID) and replace them with new error
705                 codes related with failures in loading the external
706                 journal (PR_0_JOURNAL_UNSUPP_MULTIFS,
707                 PR_0_CANT_FIND_JOURNAL, PR_0_EXT_JOURNAL_BAD_SUPER).
708                 Also changed the text assocated with PR_0_JOURNAL_BAD_UUID
709                 to reflect the case where the external journal isn't
710                 correct for this filesystem.
711
712         * unix.c (PRS), e2fsck.8.in: Add new option -j which allows
713                 the user to specify the pathname to find the external journal.
714
715         * e2fsck.c (e2fsck_reset_context): Close journal_io if it isn't
716                 the same as the filesystem io_channel.
717
718         * e2fsck.h: Add new fields (journal_io and journal_name) in the
719                 context structure to support external journals.
720
721 2001-07-20  Theodore Tso  <tytso@valinux.com>
722
723         * unix.c (main): Add an explicit warning when the filesystem is
724                 left not completely fixed when e2fsck exits.  (Addresses
725                 Debian bug #104502.)
726
727 2001-07-19  Theodore Tso  <tytso@valinux.com>
728
729         * pass1.c (check_ext_attr): The entire EA block is now checked to
730                 make sure that parts of the EA block aren't being used for
731                 multiple purposes.
732
733         * Makefile.in e2fsck.h, region.c: New file which is used to detect
734                 collisions in extended attribute block.
735
736         * problem.h, problem.c (PR_1_EA_MULTI_BLOCK, PR_1_EA_ALLOC_REGION,
737                 PR_1_EA_ALLOC_COLLISION, PR_1_EA_BAD_NAME,
738                 PR_1_EA_BAD_VALUE): Add new problem codes.
739
740 2001-07-10  Theodore Tso  <tytso@valinux.com>
741
742         * journal.c (e2fsck_run_ext3_journal): Only call ext3_flush() if
743                 the superblock is dirty.
744
745 2001-07-07  Theodore Tso  <tytso@valinux.com>
746
747         * pass1b.c (pass1b, process_pass1b_block): Change the num_bad
748                 field calculation so that it only counts EA block entries
749                 as a single multiply claimed block (since once we clone
750                 the EA blocks for one inode, we fix the problem for all of
751                 the other inodes).  Also, I moved the num_bad calculation
752                 from process_pass1b_block to the end of pass1b.  This
753                 fixes a *significant* performance bug in pass1b which hit
754                 people who had to had a lot of multiply claimed blocks.
755                 (Can you say O(n**3) boys and girls?  I knew you could...
756                 Fortunately, this case didn't happen that much in actual
757                 practice.)
758
759         * pass1.c (e2fsck_pass1): Defer inodes which have an extended
760                 attribute block for later processing to avoid extra seeks
761                 across the disk.
762                 (process_inode_cmp): If there is no indirect block, sort
763                 by the extended attribute (i_file_acl) block.
764
765         * pass1b.c (clone_file_block): Fix bugs when cloning extended
766                 attribute blocks.  Moved free of block_buf to after the
767                 code which clones the extattr block, and fixed logic for
768                 changing pointers to the extended attribute field in the
769                 inodes which were affected.
770                 (decrement_badcount): New function which is used whenever
771                 we need to decrement the number of files which claim a
772                 particular bad block.  Fixed bug where delete_file wasn't
773                 checking check_if_fs_block() before clearing the entry in
774                 block_dup_map.  This could cause a block which was claimed
775                 by multiple files as well as the filesystem metadata to
776                 not be completely fixed.
777
778         * pass1.c (adjust_extattr_refcount): Add new function which
779                 adjusts the reference counts of extended attribute blocks
780                 if needed, both up and down.
781                 (e2fsck_pass1): If the refcount or refcount_extra
782                 structure are present, call adjust_extattr_refcount(),
783                 and free it afterwards.
784
785         * problem.h, problem.c (PR_1_EXTATTR_READ_ABORT, 
786                 PR_1_EXTATTR_REFCOUNT, PR_1_EXTATTR_WRITE): Add new
787                 problem codes.
788
789 2001-07-02  Theodore Tso  <tytso@valinux.com>
790
791         * pass1.c (e2fsck_pass1, check_ext_attr, check_blocks): Add
792                 initial support for scanning extended attribute blocks.
793
794         * e2fsck.c (e2fsck_reset_context): free extended attribute
795                 refcount structure.
796
797         * e2fsck.h: Add new fields for accounting for the extended
798                 attribute blocks.
799
800         * Makefile.in, ea_refcount.c, e2fsck.h: Add new file which
801                 implements a reference count abstraction.
802
803         * problem.c, problem.h: Add new problem codes PR_1_ALLOCATE_REFCOUNT,
804                 PR_1_READ_EA_BLOCK, PR_1_BAD_EA_BLOCK, PR_2_FILE_ACL_BAD
805
806         * message.c: Add "@a" as an abbreviation for "extended attribute"
807
808         * pass1b.c (clone_file): Add code which handles cloning an
809                 extended attribute block.
810
811         * pass1b.c (delete_file): 
812         * pass2.c (deallocate_inode): If the inode contains an extended
813                 attribute block in the file_acl field, clear it and
814                 deallocate the block.
815
816 2001-06-28  Theodore Tso  <tytso@valinux.com>
817
818         * pass2.c (e2fsck_process_bad_inode): Deal with inodes which are
819                 marked bad because of an invalid file_acl (either because
820                 EXT2_FEATURE_COMPAT_EXT_ATTR is not set, or because the
821                 block number in file_acl is bad.
822
823 2001-06-29  Theodore Tso  <tytso@valinux.com>
824
825         * unix.c (show_stats): Use long long to calculate the percentage
826                 of the number of blocks in use in the filesystem.
827
828 2001-06-23  Theodore Tso  <tytso@valinux.com>
829
830         * Release of E2fsprogs 1.22
831
832 2001-06-22  Theodore Tso  <tytso@valinux.com>
833
834         * flushb.c: Use platform independent method of defining the
835                 BLKFLSBUF ioctl.  Also include sys/mount.h since on newer
836                 platforms BLKFLSBUF is defined there.
837
838 2001-06-19  Theodore Tso  <tytso@valinux.com>
839
840         * super.c (release_inode_blocks): Don't try to release the blocks
841                 if the orphaned inode is a device file, symlink, or some
842                 other kind of special file that doesn't have a block list.
843
844 2001-06-15  Theodore Tso  <tytso@valinux.com>
845
846         * Release of E2fsprogs 1.21
847
848 2001-06-13  Theodore Tso  <tytso@valinux.com>
849
850         * unix.c (check_if_skip): Adapted patch from Andreas Dilger which
851                 prints the number of mounts or days elapsed since the last
852                 check when e2fsck is forced to check an otherwise clean
853                 filesystem.
854
855 2001-06-12  Theodore Tso  <tytso@valinux.com>
856
857         * badblocks.c: Stop using the compatibility badblocks function,
858                 and use the ext2fs_badblocks_* functions instead.
859
860 2001-06-11  Theodore Tso  <tytso@valinux.com>
861
862         * unix.c (PRS): Fix bug introduced in 1.20 which broke the -F
863                 flag.
864
865         * Makefile.in: Add message.c and swapfs.c to the list of source
866                 files to build the make depend.
867
868         * swapfs.c, unix.c: Only support the -s and -S options to e2fsck
869                 if ENABLE_SWAPFS is defined.
870
871 2001-06-08  Theodore Tso  <tytso@valinux.com>
872
873         * recover.c, revoke.c: Synchronize with ext3 0.7a
874
875 2001-06-02  Theodore Tso  <tytso@valinux.com>
876
877         * recovery.c (scan_revoke_records): Fix bug in recovery code;
878                 missing byte order conversion.
879
880         * pass1.c (mark_inode_bad): Replace alloc_bad_map with a function
881                 which sets the bit in the bad inode bitmap.
882                 (e2fsck_pass1): Check for fast symlinks with an invalid
883                 size, and set the bad inode map in that case.
884                 (check_size): Check i_size_high for special files and
885                 prompt to clear it along with i_size if non-zero.
886
887         * pass2.c (e2fsck_process_bad_inode): Check for fast symlinks with
888                 an invalid size and prompt the user if the inode should be
889                 cleared.
890
891         * problem.h, problem.c (PR_2_SYMLINK_SIZE): Added new problem code.
892
893 2001-06-01  Theodore Tso  <tytso@valinux.com>
894
895         * problem.c, problem.h: Change PR_0_JOURNAL_UNSUPP_INCOMPAT and
896                 PR_0_JOURNAL_UNSUPP_ROCOMPAT so they aren't fatal errors,
897                 but prompt to see if the user should abort.  Removed the
898                 PR_0_JOURNAL_RESET_COMPAT problem code.
899
900         * journal.c (e2fsck_journal_load): If there are incompatible
901                 journal flags, just return an error code.
902                 (e2fsck_check_ext3_journal): If e2fsck_journal_load
903                 returns an error code indicating that there are
904                 incompatible journal flag, check to see if we should
905                 abort, and then offer to clear the journal.
906                 (Addresses Debian bug #98527.)
907
908         * Makefile.in: Move include/asm/types.h.in to
909                 lib/ext2fs/ext2_types.h.in.
910
911 2001-06-01  Theodore Tso  <tytso@valinux.com>
912
913         * pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode, 
914                 pass1_check_directory): Add a safety check to make sure
915                 ctx->stashed_inode is non-zero.
916
917         * pass1b.c (pass1b): Use e2fsck_use_inode_shortcuts() to disable
918                 the inode shortcut processing, instead of manually
919                 clearing only half of the function pointers that needed to
920                 be NULL'ed out.  This caused nasty bugs if the last inode
921                 in the filesystem needed dup block processing.
922                 
923         * pass1b.c (clone_file_block): When cloning a directory's metadata
924                 block, don't try to update the directory block list
925                 database, since indirect blocks aren't stored in the
926                 database and the resulting error will abort the file clone
927                 operation.
928
929 2001-05-25  Theodore Tso  <tytso@valinux.com>
930
931         * Release of E2fsprogs 1.20
932
933 2001-05-25  Theodore Tso  <tytso@valinux.com>
934
935         * journal.c (e2fsck_journal_reset_super): Remove extraneous line
936
937 2001-05-23  Theodore Tso  <tytso@valinux.com>
938
939         * journal.c (e2fsck_journal_reset_super): Fix bug; the reset
940                 journal wasn't getting written out to disk since the dirty
941                 bit wasn't being set on the buffer.
942                 (e2fsck_journal_load): Don't print an error message if the
943                 journal version number is wrong; just return a error code
944                 reflecting this fact.  If the block type in the journal
945                 superblcok is obviously not a version number, report the
946                 journal is corrupted.
947                 (e2fsck_check_ext3_journal): On an unsupported journal
948                 version, prompt to abort by default, but then offer a
949                 chance to clear the journal as corrupt.
950
951         * problem.c, problem.h (PR_0_JOURNAL_UNSUPP_VERSION): Added new
952                 problem code.
953
954 2001-05-14  Theodore Tso  <tytso@valinux.com>
955
956         * pass1.c: Treat inodes with a low dtime (that were from a
957                 corrupted orphan list) specially.
958
959         * problem.c, problem.h: Add new problem codes PR_1_LOW_DTIME and
960                 PR_1_ORPHAN_LIST_REFUGEES, and a new latch group,
961                 PR_LATCH_LOW_DTIME.
962
963         * problemP.h: Expand the size of the problem flag to be an int
964                 instead of a short.  Expand space in the flag word which
965                 is reserved for problem latch flags from 3 bits to 8 bits.
966
967         * e2fsck.h, scantest.c: Change location of ext2_fs.h to be
968                 ext2fs/ext2_fs.h
969
970         * super.c (check_super_block): Be more strict on checking
971                 s_r_blocks_count superblock field.
972
973 2001-05-13  Theodore Tso  <tytso@valinux.com>
974
975         * problem.c, problem.h (PR_0_JOURNAL_UNSUPP_ROCOMPAT, 
976                 PR_0_JOURNAL_UNSUPP_INCOMPAT, PR_0_JOURNAL_RESET_COMPAT):
977                 New problem codes.      
978
979         * journal.c (e2fsck_journal_load): Use a problem code to
980                 report unsupported feature flags.  There is code to
981                 clear unsupported flags, but since this is dangerous,
982                 it's not allowed in the problem code table.
983         
984 2001-05-11  Andreas Dilger  <adilger@turbolinux.com>
985
986         * journal.c (e2fsck_journal_reset_super): initialize the journal
987                 sequence number to a random value to avoid recovering
988                 bad transactions from a corrupt journal.
989
990 2001-05-13  Theodore Tso  <tytso@valinux.com>
991
992         * journal.c: Code cleanup; initialize journal_enable_debug using
993                 an initializer.
994
995 2001-05-12  Theodore Tso  <tytso@valinux.com>
996
997         * unix.c (PRS): Skip validation of -C's file descriptor if it is
998                 zero, since that is special case.
999
1000 2001-05-09  Theodore Tso  <tytso@valinux.com>
1001
1002         * super.c (release_orphan_inodes): Add gettext quoting around
1003                 "Truncating" and "Clearing" for i18n.
1004
1005 2001-05-05  Theodore Tso  <tytso@valinux.com>
1006
1007         * util.c (fatal_error): Use the correct magic number when checking
1008                 the magic number for the io_channel data structure.  Also
1009                 remove extraneous call to io_channel_flush() that was left
1010                 over from an editing session.
1011
1012         * pass2.c (check_dir_block): Ignore EXT2_ET_DIR_CORRUPTED errors
1013                 from ext2fs_read_dir_block().
1014
1015 2001-05-01  Theodore Tso  <tytso@valinux.com>
1016
1017         * unix.c (PRS): Validate the completion information file
1018                 descriptor so that the completion bar won't get
1019                 accidentally written onto the disk.
1020
1021         * e2fsck.8.in: Add explanation that you can use mke2fs -n -b
1022                 blocksize to printout alternate superblock locations.
1023
1024 2001-04-26  Theodore Tso  <tytso@valinux.com>
1025
1026         * unix.c (check_if_skip): If the max_mount_count is zero, treat it
1027                 as having no count set.
1028
1029 2001-04-16  Theodore Tso  <tytso@valinux.com>
1030
1031         * super.c (check_super_block): Fix bad calculation of
1032                 inodes_per_block, and tighten min/max checks to be a bit
1033                 more paranoid.  Thanks to Andreas Dilger for pointing out
1034                 this bug.
1035
1036 2001-03-29  Theodore Tso  <tytso@valinux.com>
1037
1038         * journal.c (mark_buffer_uptodate): Add emulation of kernel
1039                 function mark_buffer_uptodate.
1040
1041         * recovery.c, revoke.c: Synchronize with 0.6b ext3 files.
1042
1043 2001-02-12  Theodore Tso  <tytso@valinux.com>
1044
1045         * journal.c (e2fsck_run_ext3_journal): Force a flush of the
1046                 filesystem and io_channel before replaying the journal.
1047
1048 2001-01-17  Theodore Ts'o  <tytso@valinux.com>
1049
1050         * pass1.c (check_blocks): Fix large file checking code so that
1051                 files > 2GB are considered large files, and restrict
1052                 directories from being > 2GB.
1053
1054 2001-01-12  Theodore Ts'o  <tytso@valinux.com>
1055
1056         * journal.c (e2fsck_journal_fix_unsupported_super): Remove unused
1057                 function.  Add FIXME notes to e2fsck_get_journal(), from
1058                 Andreas Dilger.
1059
1060         * pass1.c (e2fsck_pass1): Cap the maximum legal size of a file by
1061                 the limit caused by the fact that i_blocks is in 512 byte
1062                 units, and that the Linux buffer cache also fundamentally
1063                 assumes 512 byte sectors.  
1064                 Make sure that the journal inode is a regular file, and
1065                 when clearing an unused journal inode, make sure the
1066                 icount db is updated.
1067         
1068         * problem.c, problem.h (PR_1_JOURNAL_BAD_MODE): Add new problem code.
1069
1070         * problem.c: For PR_1_RESERVED_BAD_MODE, print a description of
1071                 the reserved inode.  In PR_0_JOURNAL_HAS_JOURNAL, prompt
1072                 to clear the journal, rather than deleting it (which is
1073                 more accurate).  (From Andreas Dilger.)
1074
1075         * journal.c: Make sure all functions which return an error code
1076                 use the errcode_t return type, and not "int"
1077                 (e2fsck_journal_release): Add new parameter, "drop",
1078                 which is used when we just want to deallocate the journal
1079                 without trying to write out any changes.
1080                 (mark_buffer_clean): New function
1081                 (e2fsck_check_ext3_journal): If we fail loading the
1082                 journal, make sure we free all memory associated with it.
1083                 (recover_ext3_journal): If we fail to load the journal or
1084                 initialize the revoke data structures, make sure we free all
1085                 memory associated with the journal.
1086
1087         * message.c (special_inode_name): Add more special inode names
1088                 (From Andreas Dilger)
1089
1090         * util.c (fatal_error): Check to make sure the io_manager data
1091                 structure is sane before trying to flush the io_channel.
1092                 (From Andreas Dilger)
1093
1094         * mtrace.h, super.c, pass2.c: Minor whitespace cleanups, from
1095                 Andreas Dilger.
1096
1097         * journal.c (e2fsck_journal_fix_bad_inode): Set pctx->ino to the
1098                 bad journal number.
1099
1100         * problem.c (PR_0_JOURNAL_BAD_INODE): Use pctx->ino instead of
1101                 pctx->num when printing the bad journal inode number.
1102
1103 2001-01-11    <tytso@snap.thunk.org>
1104
1105         * pass1.c (process_block): Remove dead code which was never
1106                 getting executed.
1107
1108         * iscan.c, unix.c, e2fsck.h: Don't use NOARGS, and use
1109                 ext2fs_sync_device() instead of using BLKFLSBUF.
1110
1111         * flushb.c: Don't use NOARGS anymore; everything is STDC these days.
1112         
1113         * dirinfo.c, e2fsck.h, emptydir.c, iscan.c, jfs_user.h, journal.c,
1114                 message.c, pass1.c, pass1b.c, pass2.c, pass3.c, pass4.c,
1115                 pass5.c, problem.h, scantest.c, super.c, swapfs.c: Change
1116                 ino_t to ext2_ino_t.
1117
1118 2001-01-09    <tytso@snap.thunk.org>
1119
1120         * problem.c: Fix another broken @F vs @f problem.
1121
1122 2001-01-06    <tytso@snap.thunk.org>
1123
1124         * journal.c, pass1.c, pass1b.c, pass3.c, recovery.c, revoke.c,
1125                 super.c, unix.c, util.c: Fix random gcc -Wall complaints.
1126
1127         * jfs_user.h: Use more sophisticated inline handling to allow
1128                 building with --enable-gcc-wall
1129
1130 2001-01-03    <tytso@snap.thunk.org>
1131
1132         * pass1.c (e2fsck_pass1): Moved journal inode handling out to its
1133                 own block; if the journal inode is not in use, and it
1134                 contains data, offer to clear it.
1135
1136         * problem.h, problem.c (PR1_JOURNAL_INODE_NOT_CLEAR): Add new
1137                 problem code.
1138
1139         * problem.c: Modified problem table to use a new abbreviations.
1140
1141         * message.c: Add @j abbreviation for journal, and @v abbreviation
1142                 for device.
1143
1144         * jfs_user.h: Moved contents of jfs_e2fsck.h into jfs_user.h.
1145
1146         * journal.c (e2fsck_check_ext3_journal): Force a fsck if we remove
1147                 the journal stored on a reserved inode.  Also force a fsck
1148                 if the journal appears to exist while !NEEDS_RECOVERY, and
1149                 we forcibly reset the journal.
1150
1151 2001-01-01    <tytso@snap.thunk.org>
1152
1153         * journal.c, pass1.c, super.c, unix.c: Replace use of struct
1154                 ext2fs_sb with struct ext2_super_block.
1155
1156         * pass1.c (check_blocks): Remove use of EXT2_HAS_*_FEATURE macros.
1157
1158 2000-12-31    <tytso@snap.thunk.org>
1159
1160         * jfs_compat.h: Remove uneeded header file.
1161
1162 2000-12-30    <tytso@snap.thunk.org>
1163
1164         * malloc.h, mtrace.c: Renamed malloc.h to mtrace.h to avoid
1165                 conflicts with the system header file.
1166
1167         * problem.h: Fixed numbering of pass1 error messages; an extra 0
1168                 had slipped into some of the numbers.  (Pointed out by
1169                 Andreas Dilger)
1170
1171         * journal.c (e2fsck_journal_fix_corrupt_super): Clean up
1172                 unnecessary automatic variable.  Add explanatory comment
1173                 about the kernel emulation routines.  (Suggested by
1174                 Andreas Dilger)
1175
1176 2000-12-13  Theodore Ts'o  <tytso@valinux.com>
1177
1178         * journal.c (e2fsck_check_ext3_journal): Check to make sure the
1179                 journal fields are consistent if any of the superblock
1180                 fields are set.  (Backs out erroneous change made by sct,
1181                 pointed out by Andreas.)
1182
1183         * unix.c (main): Clarify coments (no code changes)
1184
1185         * super.c (release_orphan_inodes): Fix spelling typo in error message.
1186
1187         * pass1.c (e2fsck_pass1): Offer to update the filesystem revision
1188                 level if we need to set large files flag.  Patch from
1189                 Andreas Dilger.
1190
1191         * super.c (check_super_block): If we have any of the compatibility
1192                  flags set, we need to have a revision 1 filesystem.  Most
1193                  kernels will not check the flags on a rev 0 filesystem
1194                  and we may have corruption issues because of the
1195                  incompatible changes to the filesystem.  Patch from Andreas
1196                  Dilger.
1197
1198         * problem.c, problem.h (PR_0_FS_REV_LEVEL, PR_1_FS_REV_LEVEL): Add
1199                 new problem codes.
1200
1201 2000-12-09    <tytso@snap.thunk.org>
1202
1203         * flushb.c: Fix flushb so that it does something other than waste
1204                 disk space when built on systems with modern header files
1205                 and add a non-subtle Copyright Licensing restriction so
1206                 Yann will remove it from the Debian Distribution.  (Now
1207                 violates the Debian Free Software Guidelines, on purpose.)
1208
1209         * journal.c (e2fsck_check_ext3_journal): If JFS_DEBUG is defined
1210                 at the top level, set the JFS debuging level to 2.
1211
1212         * jfs_e2fsck.h, jfs_user.h: Replaces jfs_compat.h.  The jfs.h file
1213                 has been moved to the include/linux directory.
1214
1215         * journal.c, revoke.c, recovery.c: Updated files from Stephen to
1216                 support the V2 superblock and revoke processing.  The
1217                 journal.c and revoke.c files are copies from the ext3
1218                 kernel source.
1219
1220         * Makefile.in: Added revoke.c to the list of source/object files.
1221
1222 2000-11-16  Theodore Ts'o  <tytso@valinux.com>
1223
1224         * pass1b.c: Change routines to use PR_1B_BLOCK_ITERATE when
1225                 reporting problems rather than using com_err directly.
1226
1227         * problem.c, problem.h (PR_1B_BLOCK_ITERATE): Add new problem code.
1228
1229         * message.c (expand_percent_expression): Add safety check.  If
1230                 ctx->str is NULL, print "NULL" instead of dereferencing
1231                 the null pointer.
1232
1233         * pass1b.c, pass2.c, pass3.c: Change calls to ext2fs_block_iterate
1234                 to ext2fs_block_iterate2, to support 64-bit filesizes and
1235                 to speed things up slightly by avoiding the use of the
1236                 ext2fs_block_iterate's compatibility shim layer.
1237
1238 2000-10-30    <tytso@snap.thunk.org>
1239
1240         * util.c (get_backup_sb): Calculate backup superblock correctly
1241                 when the blocksize is > 1k.
1242
1243 2000-10-26    <tytso@snap.thunk.org>
1244
1245         * jfs.h, jfs_compat.h, journal.c: Updated to include the
1246                 definition of the new journal superblock format; still
1247                 only supports V1 superblocks for now.  (From sct)
1248
1249 2000-10-24    <tytso@snap.thunk.org>
1250
1251         * super.c (release_inode_block, release_inode_blocks,
1252                 release_orphan_inodes): Add code to deal with truncating
1253                 inodes which are still in use (but which are on the orphan
1254                 list because they need truncation).
1255
1256         * problem.c, problem.h: Rename PR_0_CLEAR_ORPHAN_INODE to
1257                 PR_0_ORPHAN_CLEAR_INODE, and remove
1258                 PR_0_ORPHAN_INODE_INUSE.
1259         
1260         * journal.c (e2fsck_run_ext3_journal): Add i18n support, and print
1261                 a message when the journal is being recovered.
1262
1263         * pass1.c (e2fsck_pass1): Don't check the i_mode field for the
1264                 journal inode, if it is in use.
1265
1266 2000-09-12    <tytso@valinux.com>
1267
1268         * extend.c: 
1269         * flushb.c: Add include of nls-enable.h which is necessary so that
1270                 they can compile correctly.
1271
1272 2000-08-22    <tytso@valinux.com>
1273
1274         * unix.c (main): If we're doing a read-only check, skip the
1275                 journal playback, but don't abort the e2fsck run.
1276
1277         * super.c (release_orphan_inodes): Fix typo; should do bounds
1278                 checking on next_ino instead of ino.
1279
1280         * jfs_compat.h (J_ASSERT): 
1281         * journal.c (e2fsck_run_ext3_journal): 
1282         * pass3.c (adjust_inode_count): Use fatal_error() instead of exit().
1283
1284         * unix.c: Use fatal_error() instead of exit() whenever possible.
1285                 Also fix the fsck exit codes so that we use FSCK_USAGE
1286                 when it is appropriate.  Rename global_signal_ctx to
1287                 e2fsck_global_ctx and let it be exported globally.
1288
1289         * util.c (fatal_error): Try to flush the I/O manager before
1290                 forcing an exit.
1291
1292 2000-08-20    <tytso@valinux.com>
1293
1294         * journal.c (e2fsck_journal_load): Fix **nasty** bug which caused
1295                 e2fsck_check_ext3_journal to smash the journal because
1296                 journal->j_transaction_sequence wasn't getting
1297                 initialized.
1298
1299         * journal.c: (recover_ext3_journal, e2fsck_run_ext3_journal): Move
1300                 call to e2fsck_clear_recover from recover_ext3_journal to
1301                 after the filesystem has been closed and reopened.
1302                 Otherwise, the superblock in the filesystem handle will
1303                 probably be stale, and will overwrite the newer version of
1304                 the superblock written by the log recovery.
1305
1306         * message.c (expand_inode_expression): Add support for %Iu and %Ig
1307
1308         * problem.h (PR_0_CLEAR_ORPHAN_INODE): Add new problem code.
1309
1310         * super.c (release_orphan_inodes, release_inode_block,
1311                 release_inode_blocks): Update the block group descriptor
1312                 counts when freeing the orphan inode.  Use
1313                 PR_0_CLEAR_ORPHAN_INODE to report when we clear an orphan.
1314
1315         * journal.c (e2fsck_run_ext3_journal): Fix a bug where we
1316                 attempted to reopen the filesystem using the device name
1317                 instead of the filesystem name.
1318
1319 2000-08-18    <tytso@valinux.com>
1320
1321         * Makefile.in: Update the make dependencies
1322         
1323         * problem.c, problem.h: Add the problem codes: 
1324                 PR_0_ORPHAN_ILLEGAL_BLOCK_NUM, 
1325                 PR_0_ORPHAN_ALREADY_CLEARED_BLOCK, 
1326                 PR_0_ORPHAN_ILLEGAL_HEAD_INODE, 
1327                 PR_0_ORPHAN_ILLEGAL_INODE, PR_0_ORPHAN_INODE_INUSE
1328
1329         * super.c (release_inode_blocks, release_orphan_inodes,
1330                 check_super_block): Add support for clearing orphaned
1331                 inodes from the unmounted filesystem.
1332
1333         * journal.c (e2fsck_recover_ext3_journal): Remove the last orphan
1334                 check; this is now handled in check_super_block ---
1335                 non-journaled filesystems can use the orphan list in the
1336                 future.  Also, move the the re-opening of the filesystem
1337                 to e2fsck_run_ext3_journal().
1338
1339 2000-07-12  Andreas Dilger <adilger@turbolinux.com>
1340
1341         * journal.c: implement loading of ext3 journal for recovery code
1342
1343         * problem.c (fix_problem): return answer from PR_AFTER_CODE to caller.
1344                 Add journal problems.
1345
1346         * recovery.c (journal_recover): user-space ext3 journal recovery code
1347
1348         * unix.c (main) : check journal and do recovery in separate steps
1349
1350 2000-08-07    <tytso@snap.thunk.org>
1351
1352         * unix.c (calc_percent): Make sure that we don't take a floating
1353                 exception if the max value is zero.  (should normally
1354                 never happen, but...)
1355
1356 2000-07-13    <tytso@valinux.com>
1357
1358         * Release of E2fsprogs 1.19
1359
1360 2000-07-06  Theodore Ts'o  <tytso@valinux.com>
1361
1362         * unix.c (check_if_skip): Modify algorithm for checking
1363                 s_max_mnt_count to match with the kernel.  (If
1364                 s_max_mnt_count is negative, ignore the mnt_count check.)
1365
1366         * unix.c (e2fsck_update_progress): Adjust the width of the
1367                 progress bar dynamically, based on the filesystem name
1368                 that we need to display.
1369
1370         * unix.c (main): If the ext3 needs_recovery flag is set, call
1371                 e2fsck_run_ext3_journal() and then restart the e2fsck run.
1372
1373         * journal.c (e2fsck_run_ext3_journal): New file which contains
1374                 logic to recover the ext3 journal.  This version relies on
1375                 the kernel being able to mount the filesystem in order to
1376                 run the journal.
1377
1378 2000-07-05  Theodore Ts'o  <tytso@valinux.com>
1379
1380         * unix.c (e2fsck_update_progress): Only save and check the last
1381                 percentage after multiplying it by 10, nor 1000, since we
1382                 only need to save values to a tenth of a percent (and the
1383                 percentage is already from 0 .. 100%, not 0 .. 1).
1384                 Also, re-arrange the logic so that we do the time
1385                 check only after doing the percentage check, and we
1386                 only advance the spinner if we're about to display it.
1387
1388 2000-07-04  Theodore Ts'o  <tytso@valinux.com>
1389
1390         * pass1.c (e2fsck_pass1): Check to see if the ext3 s_last_orphan
1391                 field is set; if so, clear it, so that ext3 mounting code
1392                 won't get confused by the fact that we've cleared out the
1393                 orphaned inodes.
1394
1395 2000-06-10  Theodore Ts'o  <tytso@valinux.com>
1396
1397         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Add error
1398                 checking for a "should never happen case".
1399
1400         * problem.c, problem.h (PR_5_COPY_IBITMAP_ERROR,
1401                 PR_5_COPY_BBITMAP_ERROR): Add new error codes.
1402
1403 2000-05-27  Theodore Ts'o  <tytso@valinux.com>
1404
1405         * pass1.c (pass1, check_size): Apply patch from Chris Wedgewood
1406                 (cw@foof.org) which checks to see if special devices have
1407                 a non-zero size, and deals with it.
1408
1409         * problem.c, problem.h (PR1_SET_NONZSIZE): Add new problem code.
1410
1411 2000-05-18  Theodore Ts'o  <tytso@valinux.com>
1412
1413         * Makefile.in (install): Create a symbolic link for fsck.ext3 as
1414                 well.
1415
1416 2000-05-08  Theodore Ts'o  <tytso@valinux.com>
1417
1418         * problem.c, problem.h (PR_0_HURD_CLEAR_FILETYPE): Add new problem
1419                 code. 
1420
1421         * super.c (check_super_block): If the OS type in the superblock is
1422                 the Hurd, check to see if the filetype feature is set, and
1423                 offer to clear it if so.   This needs to be done since the
1424                 Hurd doesn't properly support the filetype feature.
1425                 (And since the hurd allows the transmogrification of files
1426                 to special files and vice versa --- for no good reason
1427                 that I can understand --- it can't support the filetype
1428                 feature for the forseeable future, either.)
1429
1430 2000-04-03  Theodore Ts'o  <tytso@valinux.com>
1431
1432         * unix.c: For platforms that don't define optarg.h, manually
1433                 define optarg and optind.
1434
1435 2000-03-20  Theodore Ts'o  <tytso@valinux.com>
1436
1437         * pass1.c (check_immutable, e2fsck_pass1_check_device_inode):
1438                 Check for the append-only as well as the immutable flag.
1439
1440         * problem.c (PR_1_SET_IMMUTABLE): Adjust message to include
1441                 append-only flag.   Fix comment for compression flag.
1442         
1443 2000-02-12    <tytso@snap.thunk.org>
1444
1445         * unix.c (e2fsck_update_progress): Limit the number of updates to
1446                 the progress bars to 8 times a second.  This allows a 9600
1447                 baud console link to keep up.
1448
1449 2000-02-11    <tytso@snap.thunk.org>
1450
1451         * unix.c (main): If compression is enabled on the filesystem,
1452                 print a warning message (for now).
1453
1454         * message.c: Add new compression shortcut: @c == compress
1455
1456         * problem.c, problem.h (PR_1_COMPR_SET): Add new error code.
1457
1458         * pass1.c (check_blocks): If the inode has EXT2_COMPRBLK_FL flag
1459                 set, check to see if the filesystem supports compression.
1460                 If it does pass this information down to process_block()
1461                 so it can treat the compressed block flag words
1462                 correctly.  If not, offer to clear the flag, since it
1463                 shouldn't be set.  
1464                 (process_block): If an inode has the compressed inode flag
1465                 set, allow EXT2FS_COMPRESSED_BLKADDR.
1466
1467         * pass1b.c (process_pass1b_block, delete_file_block,
1468                 clone_file_block):
1469         * pass2.c (deallocate_inode_block): Use HOLE_BLKADDR to check to
1470                 see if the block can be skipped.
1471
1472 2000-02-08    <tytso@snap.thunk.org>
1473
1474         * util.c: Make resource tracking message more concise.
1475
1476         * e2fsck.h:
1477         * pass1.c (mark_table_blocks, e2fsck_pass1): Remove
1478                 ctx->block_illegal_map, since it's not needed by pass1,
1479                 and pass1b has been modified to calculate it manually if
1480                 needed.   This reduces the memory footprint needed by e2fsck.
1481
1482         * pass1b.c (check_if_fs_block): New static function which returns
1483                 whether or not a block overlaps with filesystem metadata.
1484                 This replaces consulting the block_illegal_map bitmap.
1485
1486         * Makefile.in: Call sync after finishing building all in this
1487                 directory. 
1488         
1489         * unix.c (PRS): sync the filesystem before trying to use
1490                 BLKFLSBUF, to minimize the chance of causing dirty blocks
1491                 to get dropped.
1492
1493         * e2fsck.h: Manually define BLKFLSBUF if not defined, and we're on
1494                 a Linux/i386 system.
1495         
1496         * pass3.c (check_directory): Only do the loop detection algorithm
1497                 if we've searched over 2048 parent directories and haven't
1498                 found the end yet.  This means that in the common case, we
1499                 don't allocate or clear the inode_loop_detection bitmap,
1500                 which for large systems, merely clearing the bitmap for
1501                 each directory was turning out to be quite expensive.
1502                 Thanks to Jani Jaakkola (jjaakkol@cs.helsinki.fi) for
1503                 identifying this problem.
1504
1505 2000-02-06  Theodore Ts'o  <tytso@valinux.com>
1506
1507         * badblocks.c, e2fsck.h, ehandler.c, emptydir.c, extend.c,
1508                 flushb.c, iscan.c, message.c, pass1.c, pass1b.c, pass3.c
1509                 pass4.c, pass5.c, problem.c, scantest.c, swapfs.c, 
1510                 unix.c, util.c: Add Internationalization support as 
1511                 suggested by Marco d'Itri <md@linux.it>.
1512
1513 2000-02-02  Theodore Ts'o  <tytso@valinux.com>
1514
1515         * e2fsck.h, flushb.c, scantest.c: Remove uneeded include of
1516                 linux/fs.h 
1517
1518 2000-01-18  Theodore Ts'o  <tytso@valinux.com>
1519
1520         * Makefile.in: Since LIBUUID can sometimes include "-lsocket"
1521                 we need a separate DEPLIBUUID that can be used in
1522                 Makefile's dependency rules.
1523
1524 1999-11-23    <tytso@valinux.com>
1525
1526         * e2fsck.8.in: Update language about where to find a backup
1527                 superblock.
1528
1529 1999-11-19    <tytso@valinux.com>
1530
1531         * pass1.c (process_inodes): Add shortcut handling; if
1532                 process_inodes_count is zero, return right away, to avoid
1533                 calling qsort with a non-positive count.
1534
1535         * message.c (safe_print): Fix to properly display ^A, ^B, etc. and
1536                 to print Delete as ^?
1537
1538         * Makefile.in (distclean): Remove TAGS and Makefile.in.old from
1539                 the source directory.
1540
1541 1999-11-10    <tytso@valinux.com>
1542
1543         * Release of E2fsprogs 1.18
1544
1545 1999-11-10    <tytso@valinux.com>
1546
1547         * problem.c (fix_problem): Support a new flag, PR_PREEN_NO which
1548                 means the answer is assumed to be no in preen mode.  This
1549                 is now used in the PR_1_SET_IMMUTABLE code, so that in
1550                 preen mode we ignore these inodes and just print a warning
1551                 message. 
1552
1553 1999-11-09    <tytso@valinux.com>
1554
1555         * pass1.c (e2fsck_pass1): If the filesystem does not support
1556                 imagic inodes, if an inode has the imagic flag set, offer
1557                 to clear the imagic flag.  If a valid device/fifo/socket
1558                 has the immutable flag set, call the new helper function
1559                 check_immutable() to offerto clear the immutable flag.
1560
1561         * pass2.c (check_filetype): Use the new ext2_file_type() helper
1562                 function instead of calculating the file_type information
1563                 manually.
1564
1565         * pass3.c (e2fsck_reconnect_file): When adding a link to
1566                 lost+found, calculate the filetype information so that
1567                 ext2fs_link() can use the information if applicable.
1568                 (get_lost_and_found): Create the /lost+found directory
1569                 with the correct filetype information if applicable.
1570
1571         * util.c (ext2_file_type), e2fsck.h: New function which returns
1572                 the directory entry file type information given the
1573                 inode's mode bits.
1574
1575         * problem.c, problem.h: Added new problem codes PR_1_SET_IMAGIC
1576                 and PR_1_SET_IMMUTABLE.
1577
1578 1999-11-07    <tytso@valinux.com>
1579
1580         * pass4.c (e2fsck_pass4): Clear inode_imagic_map after freeing it,
1581                 to prevent it from getting freed twice.
1582
1583 1999-11-06    <tytso@valinux.com>
1584
1585         * unix.c (main): Close the filesystem before freeing the context,
1586                 so that in the event of a free()-related segmentation
1587                 violation, the filesystem is properly closed and written
1588                 out.
1589
1590 1999-10-27    <tytso@valinux.com>
1591
1592         * e2fsck.c (e2fsck_reset_context): When freeing
1593                 ctx->inode_reg_map, we weren't zero'ing
1594                 ctx->inode_reg_map, which could cause a segfault later on
1595                 in the e2fsck run.
1596
1597 1999-10-26    <tytso@valinux.com>
1598
1599         * problem.h (PR_2_SPLIT_DOT): Fix excess zero in problem code (now
1600                 matches the standard convention).
1601
1602 1999-10-26    <tytso@valinux.com>
1603
1604         * Release of E2fsprogs 1.17
1605
1606 1999-10-26    <tytso@valinux.com>
1607
1608         * message.c (safe_print): Make safe_print take an char instead of
1609                 an unsigned char to fix gcc warnings.
1610
1611 1999-10-25    <tytso@valinux.com>
1612
1613         * util.c: For NT portability, don't redefine getchar(), since
1614                 stdio defines that.  Instead we introduce a new
1615                 abstract macro read_a_char() which is #defined to the
1616                 right function as necessary.
1617
1618         * problem.c, problem.h (PR_2_NULL_NAME): Add new problem code.
1619
1620         * pass2.c (check_dir_block): Require that the length of the
1621                 directory entry be at least 12 bytes.  Check to see if the
1622                 filename is zero-length, and flag that as an error.
1623
1624 1999-10-22    <tytso@valinux.com>
1625
1626         * Release of E2fsprogs 1.16
1627
1628 1999-10-22    <tytso@valinux.com>
1629
1630         * pass2.c (check_filetype): If the filetype filesystem feature is
1631                 not set, and a directory entry has a dirent feature, offer
1632                 to clear it (since 2.0 kernels will do complain will
1633                 interpret it as a very large name length field).
1634
1635         * problem.c (PR_2_CLEAR_FILETYPE): Add new problem code.
1636
1637 1999-10-21    <tytso@valinux.com>
1638
1639         * e2fsck.8.in: Update man page to use a more standard format (bold
1640                 option flags and italicized variables), as suggested by
1641                 Andreas Dilger (adilger@enel.ucalgary.ca)
1642
1643         * pass4.c (e2fsck_pass4): If an inode is set in the
1644                 inode_imagic_map bitmap, don't check to see if it is
1645                 disconnected from the inode tree (because it almost
1646                 certainly will be).  Free inode_imagic_map at the end of
1647                 pass 4.
1648
1649         * pass2.c (check_dir_block, check_filetype): If the FILETYPE
1650                 feature is set, check the directory entry's filetype
1651                 information field, and fix/set it if necessary.
1652                 (e2fsck_pass2): Free the inode_reg_map bitmap at the end
1653                 of pass 2.
1654
1655         * pass1.c (e2fsck_pass1, alloc_imagic_map): Allocate and fill in
1656                 information for inode_reg_map and inode_imagic_map, which
1657                 indicates which inodes are regular files and AFS inodes,
1658                 respectively.
1659                 Since only the master superblock is written during a
1660                 restart, force that superblock to be used after a restart;
1661                 otherwise changes to the block group descriptors end up
1662                 getting ignored.
1663
1664         * problem.c, problemP.h: If e2fsck is run -n, make def_yn variable
1665                 be 0 for "no".  Add support for a new flag, PR_NO_NOMSG,
1666                 which supresses the problem message if e2fsck is run with
1667                 the -n option.
1668
1669         * problem.c, problem.h (PR_2_SET_FILETYPE, PR_2_BAD_FILETYPE): Add
1670                 new problem codes.
1671
1672         * message.c (expand_dirent_expression): Add support for %dt which
1673                 prints the dirent type information.
1674
1675         * e2fsck.c (e2fsck_reset_context): Free new bitmaps (inode_reg_map
1676                 and inode_imagic_map).
1677
1678         * e2fsck.h (e2fsck_t): Add new inode_reg_map and inode_magic_map
1679                 to the context structure.
1680         
1681 1999-09-24    <tytso@valinux.com>
1682
1683         * unix.c (PRS), util.c (ask_yn): Add #ifdef's to make
1684                 e2fsprogs easier to port to non-Unix platforms.
1685
1686 1999-09-07    <tytso@valinux.com>
1687
1688         * pass3.c (adjust_inode_count): Fix bug where we didn't keep the
1689                 internal and external inode counts in sync when we
1690                 decremented an inode whose link count was already zero.
1691                 Now we skip incrementing or decrementing both link counts
1692                 if we would cause an overflow condition.
1693                 (expand_dir, expand_dir_proc): Change where we update the
1694                 inode block count and size files so that the block count
1695                 field is updated correctly when we create an indirect block.
1696
1697 1999-08-05    <tytso@valinux.com>
1698
1699         * super.c (check_super_block): Check to see whether the
1700                 inodes_per_group value in the superblock is insanely too
1701                 high.
1702
1703 1999-08-02    <tytso@valinux.com>
1704
1705         * pass1b.c (clone_file_block): Don't clear the dup_map flag if
1706                 the block also shares data with the fs metadata when
1707                 the count drops to 1, since the block should still be
1708                 cloned, as fs metadata isn't included in the count.
1709
1710 1999-07-18  Theodore Ts'o  <tytso@valinux.com>
1711
1712         * Release of E2fsprogs 1.15
1713
1714 1999-07-19    <tytso@valinux.com>
1715
1716         * unix.c (usage): Add minimalist emergency help to the usage
1717                 message. 
1718
1719 1999-07-18    <tytso@valinux.com>
1720
1721         * unix.c: Add support for calculating a progress bar if the -C0
1722                 option is given.   The function e2fsck_clear_progbar()
1723                 clears the progress bar and must be called before any
1724                 message is issued.  SIGUSR1 will enable the progress bar,
1725                 and SIGUSR2 will disable the progress bar.  This is used
1726                 by fsck to handle parallel filesystem checks.  Also, set
1727                 the device_name from the filesystem label if it is
1728                 available. 
1729
1730         * e2fsck.h: Add new flags E2F_FLAG_PROG_BAR and
1731                 E2F_FLAG_PROG_SUPRESS.  Add new field in the e2fsck
1732                 structure which contains the last tenth of a percent
1733                 printed for the user.
1734
1735         * message.c (print_e2fsck_message): Add call to
1736                 e2fsck_clear_progbar(). 
1737
1738         * pass1.c (e2fsck_pass1):
1739         * pass2.c (e2fsck_pass2):
1740         * pass3.c (e2fsck_pass3):
1741         * pass4.c (e2fsck_pass4):
1742         * pass5.c (e2fsck_pass5): Add call to e2fsck_clear_progbar when
1743                 printing the resource tracking information.
1744
1745         * pass5.c (check_block_bitmaps, check_inode_bitmaps): If there is
1746                 an error in the bitmaps, suppress printing the progress
1747                 bar using the suppression flag for the remainder of the
1748                 check, in order to clean up the display.
1749
1750 1999-06-30    <tytso@valinux.com>
1751
1752         * unix.c (check_mount): Clean up the abort message displayed when
1753                 the filesystem is mounted and either stdout or stdin isn't
1754                 a tty.
1755
1756 1999-06-25    <tytso@valinux.com>
1757
1758         * e2fsck.h:
1759         * pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode, 
1760                 pass1_check_directory, e2fsck_use_inode_shortcuts): Make
1761                 pass1_* be private static functions, and create new
1762                 function e2fsck_use_inode_shortcuts which sets and clears
1763                 the inode shortcut functions in the fs structure.
1764
1765         * e2fsck.h:     
1766         * pass2.c (e2fsck_process_bad_inode): Make process_bad_inode() an
1767                 exported function.
1768
1769         * pass4.c (e2fsck_pass4): Call e2fsck_process_bad_inode to check
1770                 if a disconnected inode has any problems before
1771                 connecting it to /lost+found.  Bug and suggested fix by 
1772                 Pavel Machek <pavel@bug.ucw.cz>
1773
1774 1999-06-21    <tytso@valinux.com>
1775
1776         * unix.c (main): Add missing space in the disk write-protected
1777                 message. 
1778
1779 1999-05-22    <tytso@rsts-11.mit.edu>
1780
1781         * problem.c, problem.h (PR_0_INODE_COUNT_WRONG): Add new problem
1782                 code. 
1783         
1784         * super.c (check_super_block): Add check to make sure the total
1785                 number of inodes is sane, since this can be calculated
1786                 from the number of groups times the number of inodes per
1787                 group.   Offer to correct it if it is incorrect.
1788
1789 1999-03-19    <tytso@rsts-11.mit.edu>
1790
1791         * pass5.c (check_block_end): Fix fencepost condition where when
1792                 clearing the block padding we were missing the last position
1793                 in the bitmap.
1794
1795 1999-05-17    <tytso@rsts-11.mit.edu>
1796
1797         * unix.c (reserve_stdio_fds): Add safety check in case
1798                 reserve_stdio_fds couldn't open /dev/null.
1799
1800 1999-03-14  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1801
1802         * util.c (print_resource_track): Use mallinfo if present to get
1803                 more accurate malloc statistics.
1804
1805         * pass3.c (get_lost_and_found): Check to see if lost+found is a
1806                 plain file; if so, offer to unlink it.
1807
1808         * problem.c, problem.h (PR_3_LPF_NOTDIR): Add new problem code.
1809
1810 1999-03-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1811
1812         * problem.c: Fix problem message for PR_1_BAD_GROUP_DESCRIPTORS so
1813                 that the block group number is printed.  Add new prompt,
1814                 PROMPT_UNLINK.
1815
1816 1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1817
1818         * Release of E2fsprogs 1.14
1819
1820 1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1821
1822         * message.c (safe_print): New function which prints strings,
1823                 converting non-printable characters using the '^' and
1824                 M-notation.  This function is now used to print directory
1825                 name entries and pathnames.
1826
1827 Mon Jan  4 02:28:59 1999  Theodore Y. Ts'o  <tytso@mit.edu>
1828
1829         * unix.c (main): Reset the context before calling ext2fs_close(),
1830                 to avoid referencing already freed memory.
1831
1832 1998-12-15  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1833
1834         * Release of E2fsprogs 1.13
1835
1836 1998-12-03  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1837
1838         * Makefile.in: Updated dependencies.
1839
1840 1998-11-27  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1841
1842         * pass3.c (get_lost_and_found): If the filesystem is not opened
1843                 read-only, then force /lost+found to be created if it is
1844                 not present.
1845
1846         * problem.c: Allow PR_3_NO_LF_DIR to be handled during a preen
1847                 operation. 
1848
1849 1998-10-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1850
1851         * unix.c (main): Move ext2fs_close() after e2fsck_free_context()
1852                 since e2fsck_free_context may reference data in ctx->fs.
1853
1854         * e2fsck.c (e2fsck_reset_context): Make sure ctx->fs is non-NULL
1855                 before checking ctx->fs->dblist.
1856
1857 1998-10-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1858
1859         * pass1.c (e2fsck_pass1): Use the device check subroutine on
1860                 FIFO's and Socket's, so that we catch bogus immutable inodes.
1861
1862         * pass2.c (process_bad_inode): Process bad socket and fifo's.
1863
1864         * problem.h, problem.c: Define new problem codes PR_2_BAD_FIFO and
1865                 PR_2_BAD_SOCKET.
1866
1867 1998-09-02  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1868
1869         * problem.c: Add PR_3_NO_DIRINFO error code.
1870
1871         * super.c (check_super_value): Rename min and max to min_val and
1872                 max_val to avoid possible cpp macro conflicts.
1873
1874         * pass4.c (e2fsck_pass4): Rename max to maxgroup, to avoid
1875                 possible cpp macro conflicts.
1876         
1877         * pass3.c (e2fsck_pass3): Rename max to maxdirs, to avoid possible
1878                 cpp macro conflicts.
1879                 (check_directory): Fix logic to avoid possible core dump
1880                 in the case of ext2fs_get_dir_info returning NULL.  (By
1881                 the time we get here, it should never happen, but...).
1882                 Also simply/streamline the control flow of the function.
1883
1884 1998-08-17  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1885
1886         * unix.c (check_if_skip): Move the "not cleanly mounted" check
1887                 ahead of the maximal mount and too long since checked tests.
1888                 (reserve_stdio_fds): Make sure 0,1,2 file descriptors are
1889                 open, so that we don't open the filesystem using the same
1890                 file descriptor as stdout or stderr.
1891
1892 1998-08-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1893
1894         * pass2.c (e2fsck_pass2): Fix the progress accounting so that we
1895                 get to 100%.
1896
1897         * pass3.c (e2fsck_pass3): Change progress accounting to be
1898                 consistent with the other e2fsck passes.                
1899
1900         * e2fsck.c (e2fsck_run): At the end of each pass, call the
1901                 progress function with the pass number set to zero. 
1902
1903         * unix.c (e2fsck_update_progress): If the pass number is zero,
1904                 ignore the call, since that indicates that we just want to
1905                 deallocate any progress structures.
1906
1907 1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1908
1909         * Release of E2fsprogs 1.12
1910
1911 1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1912
1913         * unix.c (main): Fix typo in checking the incompat feature set; it
1914                 should be checked against EXT2_LIB_FEATURE_INCOMPAT_SUPP.
1915
1916 1998-07-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1917
1918         * badblocks.c (test_disk): Don't clear the existing bad blocks
1919                 list when using e2fsck -c, since it may cause blocks with
1920                 marginal errors to be dropped from the bad blocks list.
1921
1922 Mon Jul  6 10:32:11 1998  Theodre Ts'o  <tytso@lurch.mit.edu>
1923
1924         * pass1.c (e2fsck_pass1): Use ext2fs_sb structure for
1925                 compatibility with older kernels.
1926
1927 1998-06-25  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1928
1929         * unix.c (e2fsck_update_progress): Remove unused variables.
1930
1931 1998-06-10  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1932
1933         * pass1.c, problem.h: Change blkcnt_t to be e2_blkcnt_t to avoid
1934                 collision with LFS API.
1935
1936         * pass1.c (e2fsck_pass1): Fix bug so that ext2_max_sizes is
1937                 properly initialized.  
1938                 (e2fsck_pass1): Don't allow the the boot loader inode to
1939                 be a directory (clear the inode mode field if so).
1940
1941 1998-05-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1942
1943         * unix.c (PRS): Added new option -C, which causes e2fsck to print
1944                 progress updates so that callers can keep track of the
1945                 completion progress of e2fsck.  Designed for use by
1946                 progress, except for -C 0, which prints a spinning report
1947                 which may be useful for some users.
1948
1949         * pass5.c (e2fsck_pass5): Use a finer-grained progress reporting
1950                 scheme (useful for larger filesystems).
1951
1952         * e2fsck.h: Add progress_fd and progress_pos, for use by the Unix
1953                 progress reporting functions.
1954
1955 1998-04-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1956
1957         * pass1.c (process_inode_cmp): Use EXT2_QSORT_TYPE to define the
1958                 appropriate return type for comparison functions for qsort.
1959
1960         * e2fsck.h: Add #ifdef protection for unistd.h
1961
1962         * super.c: Remove header files already included by e2fsck.h
1963
1964 1998-04-26  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1965
1966         * dirinfo.c (e2fsck_add_dir_info): Update function to pass the old
1967                   size of the memory to be resized to ext2fs_resize_mem().
1968
1969 1998-03-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1970
1971         * Makefile.in: Change to use new installation directory variables
1972                 convention.  Fix uninstall rules to take $(DESTDIR) into
1973                 account.  Remove cat8dir from the installdirs target,
1974                 since modern man package don't necessarily put the cat
1975                 directory in /usr/man/cat?.
1976
1977 1998-03-29  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1978
1979         * super.c, e2fsck.h: Always declare e2fsck_get_device_size() as an
1980                 extern in e2fsck.h to prevent -Wall warnings.
1981
1982         * pass4.c (e2fsck_pass4): Remove unused variable 'j'.
1983
1984 1998-03-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1985
1986         * super.c (check_super_block): Fix broken superblock sanity check
1987                 when calculating blocks_per_group if s_log_frag_size !=
1988                 s_log_block_size.  Since we don't support fragments, this
1989                 isn't a bug deal, but it's good to get it fixed.
1990
1991 1998-03-23  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1992
1993         * unix.c: Fix bug in check of feature set, to make sure we can
1994                 really fix this filesystem.
1995
1996         * problem.h: Make blkcount type to be of type blkcnt_t.  Make the
1997                 num field be a 64 bit type.  Add the problem code
1998                 PR_1_FEATURE_LARGE_FILES
1999
2000         * problem.c: Add table entry for the problem code
2001                 PR_1_FEATURE_LARGE_FILES.
2002
2003         * pass1.c (e2fsck_pass1): A non-zero i_dir_acl field is only
2004                 a problem for directory inodes.  (Since it is also
2005                 i_size_high now.)   If there are no large_files, then
2006                 clear the LARGE_FLAG feature flag.  If there are
2007                 large_files, but the LARGE_FLAG feature flag is not set,
2008                 complain and offer to fix it.
2009                 (check_blocks): Add support to deal with non-directory
2010                 inodes that have i_size_high set (i.e., large_files).
2011                 Don't give an error if a directory has preallocated
2012                 blocks, to support the DIR_PREALLOC feature.
2013                 (process_block, process_bad_block): The blockcnt variable
2014                 is a type of blkcnt_t, for conversion to the new
2015                 block_iterate2.
2016
2017         * pass2.c (process_bad_inode): A non-zero i_dir_acl field is only
2018                 a problem for directory inodes.  (Since it is also
2019                 i_size_high now.)
2020
2021         * message.c (expand_inode_expression): Print a 64-bits of the
2022                 inode size for non-directory inodes.  (Directory inodes
2023                 can only use a 32-bit directory acl size, since
2024                 i_size_high is shared with i_dir_acl.)  Add sanity check
2025                 so that trying to print out the directory acl on a
2026                 non-directory inode will print zero.
2027                 (expand_percent_expression): %B and %N, which print 
2028                 pctx->blkcount and pctx->num, can now be 64 bit
2029                 variables.  Print them using the "%lld" format if
2030                 EXT2_NO_64_TYPE is not defined.
2031
2032         * e2fsck.h: Add the large_flagsfield to the e2fsck context.
2033
2034         * e2fsck.c (e2fsck_reset_context): Clear the large_flags
2035                 field.
2036
2037 Sun Mar  8 23:08:08 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2038
2039         * pass3.c (fix_dotdot_proc): 
2040         * pass2.c (check_dot, check_dotdot, check_name, check_dir_block): 
2041         * message.c (expand_dirent_expression): Mask off the high eight
2042                 bits of the directory entry's name_len field, so that it
2043                 can be used for other purposes.
2044
2045 Fri Feb 27 00:01:39 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2046
2047         * e2fsck.c (e2fsck_run): Since E2F_FLAG_SIGNAL_MASK doesn't
2048                 include EXT2_FLAG_RESTART anymore, we need to adjust this
2049                 routine so that it *does* return in the case of it seeing
2050                 EXT2_FLAG_RESTART.
2051
2052         * pass1.c (e2fsck_pass1): ext2_get_next_inode() may call the group
2053                 done callback function, which may set context abort
2054                 flags.  So we need to test the context abort flags after
2055                 we call ext2_get_next_inode().
2056                 (process_inodes): If we abort due out of process_inodes,
2057                 do a clean exit by breaking out of the for loop instead of
2058                 just returning.
2059
2060         * e2fsck.h (E2F_FLAG_SIGNAL_MASK): EXT2_FLAG_RESTART shouldn't be
2061                 considered a SIGNAL mask (i.e., requiring an immediate
2062                 abort of processing to restart).  FLAG_RESTART just means
2063                 that we want to restart once pass 1 is complete.
2064
2065 Tue Feb 24 15:19:40 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2066
2067         * Change the progress function to return an integer; if returns 1,
2068                 then the progress function is expected to have set the
2069                 e2fsck context flag signalling a user abort, and the
2070                 caller should also initiate a user abort.
2071
2072 Tue Feb 17 19:03:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2073
2074         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Don't call
2075                 end_problem_latch() unless there was actually a problem
2076                 latched.  Simplifies semantics of the latch processing.
2077
2078 Mon Feb 16 17:31:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2079
2080         * e2fsck.h: Add new field, priv_data to the e2fsck context
2081                 structure.  It should be used by callers of the e2fsck
2082                 functions only, and not by anything in e2fsck itself.
2083
2084 Mon Feb 7 17:31:04 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2085
2086         * super.c: Instead of call ext2fs_get_device_size(), define and call
2087                 e2fsck_get_device_size().  (This function may be stubbed
2088                 out in special versions of e2fsck.)
2089
2090         * pass3.c, pass4.c: Remove extra calls to the progress function
2091                 that weren't needed.
2092
2093         * mke2fs.8.in: Update man page to note that the format of the bad
2094                 block file is the same as the one generated by badblocks. 
2095
2096 Sun Feb  1 07:57:14 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2097
2098         * dirinfo.c, e2fsck.c: Don't include com_err.h; it isn't needed.
2099
2100         * e2fsck.h: Include <time.h> since it is needed
2101
2102         * super.c: If EXT2_SKIP_UUID is defined, then skip the UUID
2103                 processing. 
2104
2105 Tue Jan 20 15:37:01 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2106
2107         * unix.c (main): In the case where the filesystem revision is too
2108                 high, print the message about the superblock possibly
2109                 being corrupt.
2110
2111         * e2fsck.8.in: Add expanded comments about how the -b option
2112                 works. 
2113
2114 Sat Jan 17 13:02:16 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2115
2116         * e2fsck.h: If EXT2_FLAT_INCLUDES is defined, then assume all of
2117                 the ext2-specific header files are in a flat directory.
2118
2119         * dirinfo.c, ehandler.c, pass1.c, pass1b.c, pass2.c, pass5.c,
2120                 super.c, swapfs.c, unix.c: Explicitly cast all assignments
2121                 from void * to be compatible with C++.
2122
2123 Tue Jan  6 11:30:24 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2124
2125         * unix.c (sync_disk): Remove sync_disk and calls to that function,
2126                 since ext2fs_close() now takes care of this.
2127
2128 Mon Dec 29 14:45:42 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2129
2130         * pass1.c, pass1b.c, pass2.c, pass3.c, swapfs, badblocks.c,
2131                 ehandler.c, unix.c: Change use of private to be priv_data,
2132                 to avoid C++ reserved name clash.
2133
2134 Fri Nov 28 09:30:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2135
2136         * dirinfo.c (e2fsck_add_dir_info): Use ext2fs_get_num_dirs instead
2137                 of e2fsck_get_num_dirs, which has been removed.
2138
2139 Tue Nov 25 15:54:35 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2140
2141         * Makefile.in (PROGS): Remove @EXTRA_PROGS@, since we don't want
2142                 to compile and install flushb.
2143
2144 Mon Nov 24 06:48:00 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2145
2146         * pass1.c (e2fsck_pass1_check_device_inode): For now, only check
2147                 to make sure the extra i_blocks in a device are cleared if
2148                 the immutable flag is set.
2149
2150         * util.c (print_resource_track): Fix typo which caused the
2151                 time/resource tracking to print "Pass 1 :" instead of
2152                 "Pass 1: ".
2153
2154 Thu Nov 20 16:02:23 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2155
2156         * pass3.c (expand_directory): Fix bug which could cause core dump
2157                 when expanding the directory, and the bitmaps hadn't yet
2158                 been read in.  Also, only use ext2fs_write_dir_block when
2159                 writing a directory block, not when writing out a fresh
2160                 indirect block.
2161
2162 Wed Nov 19 16:15:44 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2163
2164         * pass1.c (process_bad_block): Fix bug where first_block wasn't
2165                 getting incremented, which caused user to get a
2166                 "Programming error?" warning if there was a bad block in a
2167                 non-primary superblock/group_descriptor.  Also fixed
2168                 another bug so that ext2fs_bg_has_super() is consulted, to
2169                 avoid problems when using a filesystem with the
2170                 sparse_groups option set and there are bad blocks at the
2171                 beginning of a group which doesn't have a superblock.
2172
2173 Thu Nov  6 16:10:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2174
2175         * pass1.c, pass2.c, pass3.c, pass4.c, pass5.c: Add calls to the 
2176                 progress indicator function.
2177
2178         * pass1.c (scan_callback): Add call to the progress feedback
2179                 function (if it exists).
2180
2181 Tue Nov  4 09:45:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2182
2183         * super.c (check_super_block): Skip the device size check if the
2184                 get_device_size returns EXT2_EXT_UNIMPLEMENTED.
2185
2186         * iscan.c (main): Don't use fatal_error() anymore.
2187
2188         * pass1b.c, swapfs.c, badblocks.c: Set E2F_FLAG_ABORT instead of
2189                 calling fatal_error(0).
2190
2191         * problem.c, pass3.c (PR_3_ROOT_NOT_DIR_ABORT, 
2192                 PR_3_NO_ROOT_INODE_ABORT): New problem codes.
2193         
2194         * problem.c, pass2.c (PR_2_SPLIT_DOT): New problem code.
2195
2196         * problem.c, pass1.c (PR_1_SUPPRESS_MESSAGES): New problem code.
2197         
2198         * problemP.h: New file which separates out the private fix_problem
2199                 data structures.
2200
2201         * util.c, dirinfo.c, pass1.c, pass1b.c, pass2.c, pass5.c, super.c,
2202                 swapfs.c util.c: allocate_memory() now takes a e2fsck
2203                 context as its first argument, and rename it to be
2204                 e2fsck_allocate_memory().
2205
2206 Mon Nov  3 14:35:29 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2207
2208         * unix.c (main): Add a special case check for the error code EROFS
2209                 and display an appropriate error message for this case.
2210
2211         * [lots of files]:  Change ext2fs_read_inode, ext2fs_write_inode
2212                 to take the e2fsck context as their first argument.
2213                 Change dir_info.c routines to take an e2fsck_context,
2214                 renamed them to start with e2fsck_ to avoid namespace
2215                 issues, and changed them to store the directory
2216                 information inside the e2fsck context.
2217                 Added e2fsck_run() which calls all of the e2fsck passes in
2218                 the correct order, and which handles the return of abort
2219                 codes.  Added abort processing, both via setjmp/longjmp
2220                 and via flags in the e2fsck context.  Use a flag in the
2221                 e2fsck context instead of the restart_e2fsck global
2222                 variable.   Change uses of free and malloc to
2223                 ext2fs_free_mem and ext2fs_get_mem.
2224         
2225 Fri Oct 31 01:12:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2226
2227         * pass1.c, pass3.c: Rename new error codes to _ET_ in them for
2228                 consistency.
2229
2230 Sat Oct 25 00:10:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2231
2232         * pass3.c (get_lost_and_found): Check error return of 
2233                 EXT2_FILE_NOT_FOUND instead of ENOTDIR
2234
2235         * pass1.c (pass1_check_directory): Return EXT2_NO_DIRECTORY
2236                 instead of ENOTDIR
2237
2238 Fri Oct 24 00:12:39 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2239
2240         * unix.c (PRS): Make the variable which getopt returns into be
2241                 an int, so that it won't lose on platforms where char is
2242                 unsigned. 
2243
2244         * pass1b.c (clone_file): Fix bug in error reporting in the case
2245                 where cs.errcode is non-zero.
2246
2247 Sun Oct 19 21:12:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2248
2249         * pass*.c, super.c, unix.c, util.c, e2fsck.h: Place #ifdef
2250                 RESOURCE_TRACK around code which uses init_resource_track
2251                 and print_resource_track.  (Not all systems have timeval)
2252
2253         * super.c: Remove excess #includes which are not necessary.
2254
2255         * e2fsck.h: Add #ifdef's for HAVE_SYS_TYPES_H and HAVE_SYS_TIME_H
2256
2257 Fri Oct  3 13:40:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2258
2259         * pass*.c, super.c: Massive changes to avoid using printf and
2260                 com_err routines.   All diagnostic messages are now routed
2261                 through the fix_problem interface.
2262
2263 Sat Sep  6 17:13:28 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2264
2265         * pass2.c (check_dir_block): Check for duplicate '.' and '..'
2266                 entries. 
2267
2268         * problem.c, problem.h: Add new problem codes PR_2_DUP_DOT and
2269                 PR_2_DUP_DOT_DOT.
2270
2271 Tue Sep  2 09:04:51 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2272
2273         * problem.c: Added new problem codes for some of the
2274                 superblock corruption checks, and for the pass header
2275                 messages.  ("Pass 1: xxxxx")
2276
2277         * util.c (print_resource_track): Now takes a description
2278                 argument. 
2279
2280 Mon Aug 25 10:23:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2281
2282         * super.c, unix.c, e2fsck.c: New files to separate out the
2283                 operating-specific operations out from e2fsck.c.  
2284                 e2fsck.c now contains the global e2fsck context management
2285                 routines, and super.c contains the "pass 0" initial
2286                 validation of the superblock and global block group
2287                 descriptors. 
2288
2289         * pass1.c, pass2.c, pass3.c, pass4.c, pass5.c, util.c: Eliminate
2290                 (nearly) all global variables and moved them to the e2fsck
2291                 context structure.
2292
2293         * problem.c, problem.h: Added new problem codes PR_0_SB_CORRUPT,
2294                 PR_0_FS_SIZE_WRONG, PR_0_NO_FRAGMENTS,
2295                 PR_0_BLOCKS_PER_GROUP, PR_0_FIRST_DATA_BLOCK
2296
2297 Thu Aug 14 10:55:21 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2298
2299         * message.c: Add compression for the word "Illegal"
2300
2301         * problem.c: Added entries for PR_2_BAD_CHAR_DEV and
2302                 PR_2_BAD_BLOCK_DEV
2303
2304 Wed Aug 13 09:55:57 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2305
2306         * pass1.c (pass1, check_device_inode), pass2.c
2307                 (process_bad_inode): Use a more stringent test for a valid
2308                 device.
2309
2310 Sun Aug 10 18:58:02 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2311
2312         * e2fsck.c (check_mount): Add stronger warning message about the
2313                 perils of running e2fsck on a mounted filesystem.
2314
2315 Tue Jun 17 01:33:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2316
2317         * Release of E2fsprogs 1.11
2318
2319 Thu Jun 12 00:25:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2320
2321         * pass1.c (mark_table_blocks): Mark the superblock and group
2322                 descriptor blocks first, so that any conflicts between
2323                 these and the bitmap or inode table blocks is noticed.
2324
2325         * problem.c: Fix message printed out when a block or inode bitmap
2326                 conflicts with other fs data, has the correct group number
2327                 in it.
2328
2329 Tue Jun 10 12:07:37 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2330
2331         * pass2.c (pass2): Check the error return from ext2fs_dblist_iterate.
2332
2333 Thu May  8 22:45:27 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2334
2335         * e2fsck.8.in: Fix minor typos and grammer oops found by Bill
2336                 Hawes (whawes@star.net).
2337
2338         * badblocks.c (read_bad_blocks_file): Pass the blocksize to the
2339                 bad blocks command so that all of the filesystem gets
2340                 tested in the case where the blocksize 2048 or 4096.
2341
2342 Thu Apr 24 12:16:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
2343
2344         * Release of E2fsprogs version 1.10
2345
2346 Mon Apr 21 22:43:08 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2347
2348         * pass1b.c (pass1b): While scanning for inodes, simply skip inodes
2349                 where ext2fs_get_next_inode returns the 
2350                 EXT2_ET_BAD_BLOCK_IN_INODE_TABLE error.
2351
2352 Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2353
2354         * Release of E2fsprogs version 1.09
2355
2356 Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2357
2358         * Release of E2fsprogs version 1.08
2359
2360 Thu Apr 10 13:51:16 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2361
2362         * pass1b.c (clone_file_block): If we clone a directory, we need to
2363                 update the dblist entry so that we check (and correct) the
2364                 right directory block.
2365
2366 Sun Apr  6 09:13:12 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2367
2368         * pass1.c (process_block): Don't clear blocks references to
2369                 filesystem metadata; let pass 1B handle this case.
2370
2371         * problem.c, problem.h: Add new problem, PR_1B_SHARE_METADATA.
2372
2373         * pass1b.c (pass1d): Deal with a block which is shared with
2374                 filesystem metadata.
2375
2376         * e2fsck.h: Make block_illegal_map be a global variable
2377
2378 Sat Apr  5 11:51:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2379
2380         * e2fsck.c, pass1.c (mark_table_blocks): Support the sparse_super
2381                 feature.
2382                 (get_backup_sb): New function which attempts to obtain the
2383                 correct backup superblock (if possible).
2384
2385 Fri Apr  4 10:46:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2386
2387         * e2fsck.c (main): Check the version of the library, and warn if
2388                 the library is out of date; this happens generally due to
2389                 users who manually install e2fsprogs.
2390
2391         * pass1.c (pass1_get_blocks): If the passed in inode number for
2392                 get_blocks isn't what we're expecting pass back
2393                 EXT2_ET_CALLBACK_NOT_HANDLED.
2394
2395 Wed Mar 12 13:32:05 1997  Theodore Y. Ts'o  <tytso@mit.edu>
2396
2397         * Release of E2fsprogs version 1.07
2398
2399 Tue Mar 11 10:31:47 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2400
2401         * icount.c: New file which implements an inode count abstraction.
2402                 This significantly reduces amount of memory needed to
2403                 check really large filesystems.
2404
2405         * pass1.c, pass2.c, pass3.c, pass4.c: Modified to use the icount
2406                 abstraction.
2407
2408 Fri Mar  7 08:28:55 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2409
2410         * dirinfo.c (dir_info_iter): New function which allows iteration
2411                 over the directories in the dir_info map.
2412
2413         * pass3.c (pass3, check_directory): Speed up pass 3 by iterating
2414                 over all directories in the dir_info structure, instead of
2415                 iterating all inodes looking for directories, and then
2416                 looking up the directories using get_dir_info().
2417
2418 Sat Feb  1 11:33:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2419
2420         * pass1.c (pass1, process_block): 
2421         * pass2.c (pass2): Use the ext2_dblist abstraction instead of
2422                 manual code to manage the directory block list information.
2423
2424         * pass1.c (check_blocks), pass1b.c (pass1b), pass2.c
2425                 (deallocate_inode): Call the ext2 library routine
2426                 ext2_inode_has_valid_blocks() instead of
2427                 inode_has_valid_blocks().
2428
2429         * swapfs.c (swap_inodes): Add check so that we don't try to call
2430                 swap_inode_blocks unless the inode has valid blocks.
2431                 (Otherwise a long fast symlink might cause
2432                 swap_inode_blocks to erroneously get called.)
2433
2434 Wed Jan 22 14:42:53 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2435
2436         * problem.c, problem.h: Added entries for PR_2_DOT_NULL_TERM and
2437                 PR_2_DOT_DOT_NULL_TERM.
2438
2439         * pass2.c (check_dot, check_dot_dot): Make sure the new . and
2440                 .. entries are null-terminated, since the 2.0 kernel
2441                 requires this (for no good reason).
2442
2443 Mon Jan 20 20:05:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2444
2445         * pass1.c (pass1): Set the EXT2_SF_SKIP_MISSING_ITABLE flag so
2446                 that we can recover from missing inode tables.
2447
2448         * dirinfo.c (get_dir_info): If there are no directories in the
2449                 dir_info abstraction, don't core dump (because dir_info is
2450                 NULL).
2451
2452         * e2fsck.c (main): Don't try using the backup superblocks if there
2453                 aren't any.
2454                 (check_super_block): If there are illegal inode table or
2455                 bitmaps, set the filesystem as being in error.
2456
2457 Wed Jan 15 11:32:01 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2458
2459         * pass2.c (check_dir_block): Added check to make sure that rec_len
2460                 is a a multiple of 4 (so that the directory entries are
2461                 4-byte aligned).
2462
2463 Sat Dec 28 12:16:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2464
2465         * Makefile.in (uninstall): Uninstall all programs in the PROGS
2466                 line.
2467                 (PROGS): Don't build and install the extend program by
2468                 default. 
2469         
2470
2471 Sat Dec  7 16:41:02 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2472
2473         * pass1.c (process_inodes): Make sure the stashed_ino variable is
2474                 saved and restored as well.
2475                 (pass1): For fast sym links, skip the check_blocks
2476                 processing step altogether.
2477
2478 Mon Dec  2 09:28:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2479
2480         * problem.c, message.c: New files, to completely refurbish how
2481                 filesystem problems are reported to the user.  The
2482                 diagnostic messages are now encoded out in an easily
2483                 customizable, extensible format.  The messages printed out
2484                 in preen mode are all on one line, and contain the device
2485                 name.
2486
2487 Fri Nov 29 20:26:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2488
2489         * swapfs.c (swap_inodes): When swapping a filesystem, ignore
2490                 deleted files.
2491
2492         * pass1.c (pass1): Ignore missing inode table errors during the
2493                 scan, and just skip past those inodes.
2494
2495         * pass3.c (check_root): Remove root_ino argument, and assume that
2496                 the root inode must be EXT2_ROOT_INO.  Move responsibility
2497                 of setting the parent of the root inode in the directory
2498                 inode structure to pass2().
2499
2500         * pass2.c (check_dir_block): Don't allow links to the root
2501                 directory.  
2502
2503         * dirinfo.c (add_dir_info): Remove last argument to add_dir_info,
2504                 since the inode is no longer used.
2505
2506 Tue Oct 15 00:06:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2507
2508         * e2fsck.c (main): If the superblock magic number is wrong, or the
2509                 block group fails a sanity check, then automatically
2510                 restart trying to use the backup superblocks.
2511
2512         * pass1.c (mark_table_blocks): Make the inode tables ahead of
2513                 everything else; in the case where a bitmap block overlays
2514                 the inode table, the inode table should take precedence.
2515
2516         * pass2.c (maybe_clear_entry): Make the deleted/unused error
2517                 message fit on one line, since the error can happen during
2518                 a preen pass.  (We eventually need to revamp the whole
2519                 e2fsck error reporting and prompting system, but that's a
2520                 job for another day.)
2521
2522 Mon Oct 14 22:29:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2523
2524         * e2fsck.c (main): Read in the list badblocks into fs->badblocks
2525                 for the benefit of the inode scan functions. 
2526
2527         * pass1.c (pass1): If ext2fs_get_next_inode() returns an error
2528                 indicating that an inode is in a bad block, mark that
2529                 inode as being used, as well as in the inode "bb" map.
2530
2531         * pass2.c (maybe_clear_entry): New function which generalizes the
2532                 error cases when a directory entry needs to be cleared.
2533                 (check_dir_block): If an inode is in the "bb" map, offer
2534                 to clear the directory entry, since the inode is in a bad
2535                 block.
2536
2537         * pass4.c (pass4): If an inode is marked as used, but is is marked
2538                 in the "bb" map, don't process it as a disconnected inode.
2539
2540 Tue Oct  8 02:02:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2541
2542         * Release of E2fsprogs version 1.06
2543
2544 Mon Oct  7 00:45:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2545
2546         * e2fsck.c (main): Print out the version number of the shared
2547                 library when using the -V option.
2548
2549         * swapfs.c (swap_filesys): Change EXT2_SWAP to EXT2_FLAG_SWAP for
2550                 consistency's sake.
2551
2552         * e2fsck.c (main): By setting EXT2_FLAG_MASTER_SB_ONLY, only write
2553                 out the backup superblocks when we know we have a valid
2554                 filesystem.
2555
2556 Tue Oct  1 22:00:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2557
2558         * util.c (preenhalt): Make it explicit on preenhalt that running
2559                 e2fsck manually means without the -a or -p flag.
2560
2561 Fri Sep 27 14:41:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2562
2563         * pass1.c (pass1): Add support for the EXT2_BOOT_LOADER inode.
2564                 (Linux/FT actually sets the mode bits, so we have to
2565                 handle it specially.)
2566
2567         * e2fsck.c (check_if_skip): Print a message if the filesystem is
2568                 just dirty, so that the user knows that it's about to be
2569                 checked (since this will take a while).
2570
2571 Mon Sep 16 17:00:01 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2572
2573         * pass4.c: If a disconnected inode is zero-length, prompt to
2574                 delete it instead of connecting it to lost+found.
2575
2576 Thu Sep 12 15:23:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2577
2578         * Release of E2fsprogs version 1.05
2579
2580 Fri Aug 30 20:24:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2581
2582         * pass4.c (pass4): If the user refuses to connect an unattached
2583                 inode to lost+found, don't try to set i_links_count.  This
2584                 is bad, since if the user says yes, the inode will be
2585                 marked as unused, which is not necessarily the right
2586                 thing, especially since the rest of the cleanup doesn't
2587                 happen here.
2588
2589         * pass2.c (deallocate_inode): Set inode_link_info[ino] when
2590                 dellocating an inode.  (Not strictly necessary, but...)
2591
2592         * pass4.c (pass4): Add "bonehead" explanation to the "programming
2593                 error" message.
2594
2595 Tue Aug 27 11:26:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2596
2597         * e2fsck.c (PRS,main): Added new options -s and -S.  -s will
2598                 byte-swap the filesystem so that it is normalized.  -S
2599                 will byte-swap the filesystem regardless of its current
2600                 byte-order.
2601
2602         * swapfs.c: New file, which will byte-swap a filesystem.
2603
2604 Tue Aug 20 09:41:37 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2605
2606         * pass1.c (pass1): Change handling on files with non-zero dtime
2607                 and non-zero i_link_count; before we treated them as
2608                 deleted file per botched ext2 0.3c kernel behavior.  We
2609                 now clear dtime instead.
2610
2611 Mon Aug 19 23:33:57 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2612
2613         * e2fsck.c (main): If e2fsck sets the clean bit, even if
2614                 nothing else is changed, make sure FSCK_NONDESTRUCT is
2615                 set (since after all having the filesystem set to
2616                 invalid is an error.  :-)
2617
2618 Fri Aug  9 10:25:13 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2619
2620         * pass1.c (process_block): Make sure that meta data doesn't get
2621                 accidentally set in the dir_blocks array (which could
2622                 happen in some error condtions).
2623         
2624         * pass1.c (pass1): 
2625         * pass2.c (process_bad_inode): Check for fragments in a
2626                 OS-independent fashion.
2627
2628 Thu Aug  8 15:20:54 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2629
2630         * e2fsck.c (check_if_skip): Close the filesystem when skipping the
2631                 cleanup for the filesystem.
2632
2633 Mon Jul 22 22:03:28 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2634
2635         * e2fsck.c: Improve corrupt_msg, so that it's less confusing.
2636
2637 Thu May 16 11:12:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2638
2639         * Release of E2fsprogs version 1.04
2640
2641 Wed May 15 21:41:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2642
2643         * e2fsck.c (relocate_hint): Issue a hint that the user may wish to
2644                 try "e2fsck -b 8193" before allowing e2fsck to relocate
2645                 inode table blocks.
2646
2647         * Makefile.in (e2fsck): Build e2fsck statically or dynamically
2648                 depending on the option to configure.  Added targets for
2649                 e2fsck.static and e2fsck.shared for people who want to
2650                 build a static or shared variant manually.
2651
2652 Wed Mar 27 00:33:40 1996    <tytso@rsts-11.mit.edu>
2653
2654         * Release of E2fsprogs version 1.03
2655
2656 Tue Mar 26 12:03:42 1996    <tytso@rsts-11.mit.edu>
2657
2658         * e2fsck.c (show_stats): Don't use floating point to display
2659                 percentage of non-contiguous files, as different libc
2660                 handle result truncation differently, and this causes the
2661                 test suite to bomb out depending on which libc you are
2662                 using.
2663
2664         * util.c (allocate_memory): Fix error message to omit extraneous
2665                 %%s.
2666
2667 Tue Mar  5 03:50:40 1996    <tytso@rsts-11.mit.edu>
2668
2669         * pass4.c (pass4): 
2670         * pass2.c (check_dir_block): 
2671         * pass1.c (pass1): Add support for dynamic first inode revision.
2672
2673 Wed Feb 14 16:27:30 1996    <tytso@rsts-11.mit.edu>
2674
2675         * pass3.c (check_root): Fix spelling typo
2676
2677 Mon Feb  5 22:30:30 1996    <tytso@rsts-11.mit.edu>
2678
2679         * e2fsck.c (check_super_block): If the superblock fails certain
2680                 internal consistency checks, exit with a fatal error after
2681                 printing the "superblock is corrupt message".
2682
2683 Wed Jan 31 11:06:08 1996    <tytso@rsts-11.mit.edu>
2684
2685         * Release of E2fsprogs version 1.02
2686
2687 Wed Dec 15 21:24:26 1996    <tytso@rsts-11.mit.edu>
2688
2689         * pass1.c (process_block): Check to see if a file is "fragmented".
2690                 i.e., non-contiguous.  Note that any file which is larger
2691                 than the block group is guaranteed to be non-contiguous.
2692                 We may want to use a different hueristic for deciding
2693                 whether or not a file is "fragmented".
2694
2695         * e2fsck.c (show_stats): Print statistics of how many
2696                 non-contiguous files are on the system.
2697
2698 Fri Dec 15 19:19:47 1995    <tytso@rsts-11.mit.edu>
2699
2700         * badblocks.c (read_bad_blocks_file, test_disk): Fold
2701                 functionality of test_disk() (which runs badblocks) into
2702                 read_bad_blocks_file(); test_disk() now calls
2703                 read_bad_blocks_file() with a NULL bad_blocks_file
2704                 argument.
2705
2706 Mon Nov 20 18:30:10 1995    <tytso@rsts-11.mit.edu>
2707
2708         * e2fsck.c (check_mount): Use #if defined(__linux__) instead of
2709                 #if defined(linux).  The latter won't work if we're
2710                 compiling -ansi.
2711
2712 Mon Oct 30 20:31:17 1995    <tytso@rsts-11.mit.edu>
2713
2714         * e2fsck.c (check_mount): For Linux systems, the check to see if
2715                 the root is mounted read-only has to be done for all
2716                 filesystems, not just for the root filesystem, due to the
2717                 way that some /etc/rc scripts are set up.
2718
2719 Thu Oct 26 12:05:30 1995    <tytso@rsts-11.mit.edu>
2720
2721         * Makefile.in (install): Strip programs when they are installed.
2722                 (e2fsck): Build e2fsck statically.
2723
2724 Wed Oct 25 21:18:16 1995    <tytso@rsts-11.mit.edu>
2725
2726         * util.c (preenhalt): Preenhalt now takes an argument, which is an
2727                 ext2fs_filsys; this allows it to set the EXT2_ERROR_FS
2728                 flag in the superblock in cases where preenhalt is called.
2729                 All calls to preenhalt() were changed to either
2730                 preenhalt(fs) or preenhalt(NULL) in a few cases where the
2731                 fs pointer was not available.  (Most notable, for block
2732                 read/write errors.)
2733
2734 Mon Sep  4 21:41:03 1995  Remy Card  <card@bbj>
2735
2736         * ehandler.c:
2737           util.c: Include <sys/time.h> before <sys/resource.h>.  BSD needs it.
2738
2739 Mon Sep  4 10:14:49 1995    <tytso@rsts-11.mit.edu>
2740
2741         * e2fsck.c (show_stats): Show statistics about how many inodes
2742                 have indirect, doubly indirect, and triply indirect
2743                 blocks.  Allow up to 8 digits for statistics, instead of
2744                 merely 6, so things look pretty for large filesystems.
2745
2746         * pass1.c (pass1): Keep statistics about indirect, doubly
2747                 indirect, and triply indirect blocks.
2748
2749         * pass1.c (unwind_pass1): Clear the above statistics when unwinding
2750                 pass 1.
2751
2752 Fri Aug 18 15:17:10 1995  Theodore Y. Ts'o  <tytso@dcl>
2753
2754         * util.c, ehandler.c: Move #include of <sys/resource.h> after
2755                 #include of "e2fsck.h", since sys/resource.h may depend on
2756                 sys/time.h, which is #included in e2fsck.h.
2757
2758 Thu Aug 17 22:33:37 1995    <tytso@rsts-11.mit.edu>
2759
2760         * e2fsck.c (check_mount):  Use the new ext2fs_check_if_mounted()
2761                 function to determine if the device is mounted.
2762
2763         * e2fsck.c (main):  Add better error messages if ext2fs_open()
2764                 fails. 
2765
2766 Wed Aug 16 16:25:02 1995    <tytso@rsts-11.mit.edu>
2767
2768         * pass1.c (check_blocks): If we're clearing a directory, clear
2769                 pb.is_dir so we don't do the following check of making
2770                 sure the directory size matches; this is pointless, since
2771                 we've already cleared the inode.
2772
2773 Fri Aug 11 09:08:54 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
2774
2775         * pass1.c (bad_primary_block): New function, called by
2776                 process_bad_block, which explains the facts of life to the
2777                 user when a block in the primary superblock or primary
2778                 group descriptors is bad.
2779
2780         * pass2.c (check_dot): Handle the case where the first directory
2781                 entry is used, but not ".".
2782
2783         * pass2.c (check_dotdot): Handle the case where the second directory
2784                 entry is used, but is not "..".
2785
2786 Thu Aug 10 10:05:10 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
2787
2788         * e2fsck.c (check_super_block): Get the size of the physical
2789                 device and if it is smaller than the reported size of the
2790                 filesystem, report an error.
2791
2792 Sat Aug 12 03:39:18 1995  Remy Card  <card@bbj>
2793
2794         * e2fsck.c (check_if_skip): Print the number of allocated files and
2795                 blocks on clean filesystems.
2796
2797 Fri Aug 11 14:15:36 1995  Remy Card  <card@bbj>
2798
2799         * e2fsck.8: Updated date and version number.
2800
2801 Thu Aug 10 14:26:01 1995  Remy Card  <card@bbj>
2802
2803         * pass1.c (check_blocks): Check that directory size matches *exactly*
2804                 the count of allocated blocks.
2805
2806 Wed Aug  9 21:21:24 1995  Theodore Y. Ts'o  <tytso@dcl>
2807
2808         * pass1b.c (pass1d): Free the shared[] array when we're done with
2809                 it to avoid a memory leak.
2810
2811         * pass1.c (unwind_pass1): Use ext2fs_free_block_bitmap to free the
2812                 block_dup_map.
2813
2814         * pass2.c (process_bad_inode): When clearing the inode, make sure
2815                 the pathname is freed, to prevent a memory leak.
2816
2817         * pass5.c (check_inode_bitmaps): Free free_array and dir_array
2818                 when we're finished with them.
2819                 (check_block_bitmaps): Free free_array when we're finished
2820                 with them.
2821
2822         * Makefile.in (e2fsck, flushb): Use $(LD) instead of $(CC) when
2823                 linking the executable.
2824
2825         * pass2.c (process_bad_inode): Even on OS's that don't support the
2826                 fragment fields, make sure the Linux equivalent fields are
2827                 set to zero.  If an OS wants to reuse these fields, which
2828                 is probably a bad idea (although we may get desperate in
2829                 the future) this code will have to be changed.
2830
2831         * pass1.c (dir_block_cmp): If the block numbers are equal, compare
2832                 on the inode field, and then blockcnt field.  This is just
2833                 to keep the ordering of dir_blocks the same on all
2834                 platforms when there are more than on missing directory
2835                 blocks, which are indicated directories with holes, which
2836                 are indicated with the block number being set to zero.
2837
2838 Sun Aug  6 15:40:58 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
2839
2840         * pass1.c (check_blocks, process_block): check_blocks() modified
2841                 to call the ext2fs_block_iterate() with BLOCK_FLAG_HOLE if
2842                 the inode is a directory.  process_block() now checks to
2843                 see if a directory has a "hole", or missing block.  If so,
2844                 this fact is recorded in the directory block list so that
2845                 the problem can be resolved in pass #2.
2846
2847         * pass2.c (allocate_dir_block): Added allocate_dir_block() to
2848                 allocate new blocks for directories with "holes".  Called
2849                 out of check_dir_block if a block in the directory block
2850                 list is zero.
2851
2852         * pass3.c (get_lost_and_found): Move location of free(block) to
2853                 prevent possible memory leak.
2854
2855 Sat Aug  5 12:42:22 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
2856
2857         * pass2.c (check_dir_block): Use a automatic, fixed-saize array
2858                 instead of alloca() --- alloca is not portable!  Check to
2859                 make sure the filename is not longer than EXT2_NAME_LEN,
2860                 and offer to fix it by truncating it, since it should
2861                 never happen.
2862
2863         * e2fsck.c (PRS): Use malloc() instead of alloca() --- alloca() is
2864                 not portable!!  In any case putenv() in some systems must
2865                 take a static character array or malloc()'ed memory;
2866                 passing memory allocated using alloca() to putenv() is not
2867                 advisable.
2868
2869         * pass2.c (check_dot, check_dotdot): Use malloc() instead of
2870                 alloca() --- alloca() is not portable!!!
2871
2872 Tue Jul 18 20:04:02 1995    <tytso@rsx-11.mit.edu>
2873
2874         * pass1b.c (pass1c): 
2875         * pass3.c (check_root, get_lost_and_found): 
2876         * pass2.c (check_dir_block): Use ext2fs_{read,write}_dir_block
2877                 to read/write the directory block.
2878
2879 Mon Jul 17 04:00:56 1995    <tytso@rsx-11.mit.edu>
2880
2881         * util.c (ask_yn): Apply patch supplied by Peter A. Zaitcev to
2882                 make sure VMIN and VTIME are set correct.
2883
2884 Fri Jul 14 19:26:29 1995    <tytso@rsx-11.mit.edu>
2885
2886         * pass1.c (mark_block_used): Change to be an inline function.
2887                 Assume that the block validity checks are already done,
2888                 and use the fast variant of the bitmap functions.
2889
2890 Thu Jul 13 08:10:55 1995    <tytso@rsx-11.mit.edu>
2891
2892         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Check the
2893                 bounds of the bitmaps in advance, and then use the fast
2894                 variant of e2fs_test_{block,inode}_bitmap.
2895
2896         * pass1.c (mark_block_used): Use ext2_fast_mark_block_bitmap since
2897                 the bounds checking has already been done earlier.
2898
2899 Wed Jul 12 02:22:46 1995    <tytso@rsx-11.mit.edu>
2900
2901         * pass1.c (pass1): Allocate and free the block_illegal_map, which
2902                 is used for shortcut processing in process_block.
2903                 (mark_table_blocks): Initialize block_illegal_map with the
2904                 filesystem blocks.
2905                 (describe_illegal_block): New helper function that
2906                 describes why a block is illegal.
2907                 (process_block): Use block_illegal_map as a shortcut
2908                 to determine whether a block is bad.  Use
2909                 describe_illegal_block to print out why the block is illegal.
2910
2911 Mon Jun 12 19:11:06 1995  Theodore Y. Ts'o  (tytso@dcl)
2912
2913         * flushb.c: Don't include <linux/fs.h> if it doesn't exist.
2914
2915         * scantest.c: Don't include <linux/fs.h>, <getopt.h>, or
2916                 <mntent.h> if they don't exist.  (Mostly so that "make
2917                 depend" works.)
2918
2919         * pass1.c, pass1b.c, pass3.c, badblocks.c: Include <errno.h> (if
2920                 it exists).
2921
2922         * e2fsck.c, scantest.c: Don't include <getopt.h> if it doesn't
2923                 exist. 
2924
2925 Mon Jun 12 08:37:49 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
2926
2927         * pass2.c (process_bad_inode, check_for_zero_long,
2928                 check_for_zero_char):  Change long to u32, and char to u8.
2929
2930 Sun Jun 11 15:05:57 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
2931
2932         * util.c (inode_has_valid_blocks): 
2933         * pass2.c (process_bad_inode): 
2934         * pass1.c (pass1, check_blocks, pass1_check_directory): Use
2935                 LINUX_S_IS* instead of S_IS*.
2936
2937         * e2fsck.h: Don't #include <sys/stat.h>
2938
2939         * flushb.c (main): Add #ifdef BLKFLSBUF around ioctl.  (Although
2940                 this program is pretty much useless if BLKFLSBUF isn't
2941                 supported.)
2942
2943         * e2fsck.c, badblocks.c: Add #include <errno.h>, since errno is
2944                 used.
2945
2946 Thu Jun  8 12:31:19 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>
2947
2948         * pass2.c (check_dot, check_dotdot, check_dir_block): Use alloca
2949         to allocate space for file names instead of using fixed size buffers.
2950         (process_bad_inode): Only check inode frag fields if
2951         HAVE_EXT2_FRAGS is defined (by configure).
2952         * pass1.c (pass1): Only check the inode frag fields if
2953         HAVE_EXT2_FRAGS is defined (by configure).
2954
2955         * e2fsck.c (check_mount): Only check for a mounted filesystem if
2956         HAVE_MNTENT_H is defined (by configure).
2957         (PRS): Use alloca to allocate the new path string, instead of
2958         having a fixed size buffer (which was the wrong size anyway).
2959         (PRS): Only support the -F (flush) option if the BLKFLSBUF ioctl
2960         is defined.
2961
2962         * e2fsck.h: Only include <linux/fs.h> if HAVE_LINUX_FS_H is
2963         defined (by configure).
2964
2965         * Makefile.in: Rewritten to conform to GNU coding standards and
2966         support separate compilation directories.
2967
2968 Thu Apr  6 15:04:36 1995  Remy Card  <card@bbj.ibp.fr>
2969
2970         * pass1.c (pass1): Test the mode in reserved inodes (must be zero).
2971
2972 Sat Mar 11 13:12:16 1995  Theodore Y. Ts'o  <tytso@localhost>
2973
2974         * pass1.c (unwind_pass1): Clear the file type statistics counter
2975                 when pass 1 needs to be restarted from scratch.
2976
2977         * pass1.c (handle_fs_bad_blocks): Fix bug where bitmap blocks were
2978                 being reallocated to blocks in the next block group,
2979                 instead of the current block grup.
2980
2981         * pass1.c (pass1, check_blocks): Set inode_link_info[ino] whenever
2982                 inode.i_links_count is set.
2983
2984 Tue Feb 14 01:38:04 1995  Theodore Y. Ts'o  (tytso@rt-11)
2985
2986         * pass1.c (process_block): Add checks for if the block is
2987                 trepassing on a superblock or group descriptor table.
2988
2989 Sat Dec 31 00:52:11 1994    <tytso@rsx-11.mit.edu>
2990
2991         * main.c (corrupt_msg): Extend the message which is printed out
2992                 when the superblock is corrupt, to include the suggestion
2993                 of using the -b option to specify an alternate superblock.
2994
2995 Thu Nov 24 09:29:58 1994  Theodore Y. Ts'o  (tytso@rt-11)
2996
2997         * badblocks.c (read_bad_blocks_file): If we are adding or
2998                 replacing bad blocks in the bad blocks inode, sanity check
2999                 the bad block inode first, and clear out any illegal blocks.
3000
3001         * pass2.c (check_name): Don't bomb out if the attempt to get the
3002                 pathname of the containing directory returns an error; the
3003                 directory may be too badly damaged to expect that
3004                 ext2fs_get_pathname will always succeed.  Use "???" if the
3005                 pathname can't be obtained (it's only for a printf to the
3006                 user anyway).
3007
3008                 The name of the containing directory and the bad filename
3009                 were incorrectly interchanged in the user message.  Fixed.
3010
3011         * pass2.c (check_name, check_dir_block): Use a common static
3012                 string for the unknown pathname.
3013
3014 Mon Nov  7 22:30:54 1994  Remy Card  <card@bbj>
3015
3016         * Fixed lots of printf formats to make sure that block and inode
3017         numbers are printed as unsigned integers.
3018
3019 Mon Oct 24 14:10:46 1994    (tytso@rsx-11)
3020
3021         * pass5.c (check_block_end): Fix calculation of how the last block
3022                 in the block bitmap should be calculated.
3023
3024 Wed Sep  7 10:01:13 1994    (tytso@rsx-11)
3025
3026         * pass1b.c (pass1_dupblocks): Fix declaration of dup_inode_map to
3027                 be an ext2fs_inode_bitmap, and free it properly.
3028
3029         * e2fsck.h
3030         * e2fsck.c (main): Folded in Remy Card's changes to add a revision
3031         level to the superblock.
3032
3033 Wed Aug 17 22:00:20 1994  Remy Card  (card@bbj)
3034
3035         * e2fsck.c (usage): Fixed bogus usage message.
3036
3037 Wed Aug 17 11:21:45 1994  Theodore Y. Ts'o  (tytso@rt-11)
3038
3039         * pass1.c (process_bad_block): Fixed bug so that blocks in the
3040         backup superblocks and group descriptors are handled gracefully.
3041