Whamcloud - gitweb
eb48f31386dea8dc4ca279cc3550ec8cfe0e6b50
[tools/e2fsprogs.git] / e2fsck / ChangeLog
1 2001-01-12  Theodore Ts'o  <tytso@valinux.com>
2
3         * journal.c (e2fsck_journal_fix_unsupported_super): Remove unused
4                 function.  Add FIXME notes to e2fsck_get_journal(), from
5                 Andreas Dilger.
6
7         * pass1.c (e2fsck_pass1): Cap the maximum legal size of a file by
8                 the limit caused by the fact that i_blocks is in 512 byte
9                 units, and that the Linux buffer cache also fundamentally
10                 assumes 512 byte sectors.  
11                 Make sure that the journal inode is a regular file, and
12                 when clearing an unused journal inode, make sure the
13                 icount db is updated.
14         
15         * problem.c, problem.h (PR_1_JOURNAL_BAD_MODE): Add new problem code.
16
17         * problem.c: For PR_1_RESERVED_BAD_MODE, print a description of
18                 the reserved inode.  In PR_0_JOURNAL_HAS_JOURNAL, prompt
19                 to clear the journal, rather than deleting it (which is
20                 more accurate).  (From Andreas Dilger.)
21
22         * journal.c: Make sure all functions which return an error code
23                 use the errcode_t return type, and not "int"
24                 (e2fsck_journal_release): Add new parameter, "drop",
25                 which is used when we just want to deallocate the journal
26                 without trying to write out any changes.
27                 (mark_buffer_clean): New function
28                 (e2fsck_check_ext3_journal): If we fail loading the
29                 journal, make sure we free all memory associated with it.
30                 (recover_ext3_journal): If we fail to load the journal or
31                 initialize the revoke data structures, make sure we free all
32                 memory associated with the journal.
33
34         * message.c (special_inode_name): Add more special inode names
35                 (From Andreas Dilger)
36
37         * util.c (fatal_error): Check to make sure the io_manager data
38                 structure is sane before trying to flush the io_channel.
39                 (From Andreas Dilger)
40
41         * mtrace.h, super.c, pass2.c: Minor whitespace cleanups, from
42                 Andreas Dilger.
43
44         * journal.c (e2fsck_journal_fix_bad_inode): Set pctx->ino to the
45                 bad journal number.
46
47         * problem.c (PR_0_JOURNAL_BAD_INODE): Use pctx->ino instead of
48                 pctx->num when printing the bad journal inode number.
49
50 2001-01-11    <tytso@snap.thunk.org>
51
52         * pass1.c (process_block): Remove dead code which was never
53                 getting executed.
54
55         * iscan.c, unix.c, e2fsck.h: Don't use NOARGS, and use
56                 ext2fs_sync_device() instead of using BLKFLSBUF.
57
58         * flushb.c: Don't use NOARGS anymore; everything is STDC these days.
59         
60         * dirinfo.c, e2fsck.h, emptydir.c, iscan.c, jfs_user.h, journal.c,
61                 message.c, pass1.c, pass1b.c, pass2.c, pass3.c, pass4.c,
62                 pass5.c, problem.h, scantest.c, super.c, swapfs.c: Change
63                 ino_t to ext2_ino_t.
64
65 2001-01-09    <tytso@snap.thunk.org>
66
67         * problem.c: Fix another broken @F vs @f problem.
68
69 2001-01-06    <tytso@snap.thunk.org>
70
71         * journal.c, pass1.c, pass1b.c, pass3.c, recovery.c, revoke.c,
72                 super.c, unix.c, util.c: Fix random gcc -Wall complaints.
73
74         * jfs_user.h: Use more sophisticated inline handling to allow
75                 building with --enable-gcc-wall
76
77 2001-01-03    <tytso@snap.thunk.org>
78
79         * pass1.c (e2fsck_pass1): Moved journal inode handling out to its
80                 own block; if the journal inode is not in use, and it
81                 contains data, offer to clear it.
82
83         * problem.h, problem.c (PR1_JOURNAL_INODE_NOT_CLEAR): Add new
84                 problem code.
85
86         * problem.c: Modified problem table to use a new abbreviations.
87
88         * message.c: Add @j abbreviation for journal, and @v abbreviation
89                 for device.
90
91         * jfs_user.h: Moved contents of jfs_e2fsck.h into jfs_user.h.
92
93         * journal.c (e2fsck_check_ext3_journal): Force a fsck if we remove
94                 the journal stored on a reserved inode.  Also force a fsck
95                 if the journal appears to exist while !NEEDS_RECOVERY, and
96                 we forcibly reset the journal.
97
98 2001-01-01    <tytso@snap.thunk.org>
99
100         * journal.c, pass1.c, super.c, unix.c: Replace use of struct
101                 ext2fs_sb with struct ext2_super_block.
102
103         * pass1.c (check_blocks): Remove use of EXT2_HAS_*_FEATURE macros.
104
105 2000-12-31    <tytso@snap.thunk.org>
106
107         * jfs_compat.h: Remove uneeded header file.
108
109 2000-12-30    <tytso@snap.thunk.org>
110
111         * malloc.h, mtrace.c: Renamed malloc.h to mtrace.h to avoid
112                 conflicts with the system header file.
113
114         * problem.h: Fixed numbering of pass1 error messages; an extra 0
115                 had slipped into some of the numbers.  (Pointed out by
116                 Andreas Dilger)
117
118         * journal.c (e2fsck_journal_fix_corrupt_super): Clean up
119                 unnecessary automatic variable.  Add explanatory comment
120                 about the kernel emulation routines.  (Suggested by
121                 Andreas Dilger)
122
123 2000-12-13  Theodore Ts'o  <tytso@valinux.com>
124
125         * journal.c (e2fsck_check_ext3_journal): Check to make sure the
126                 journal fields are consistent if any of the superblock
127                 fields are set.  (Backs out erroneous change made by sct,
128                 pointed out by Andreas.)
129
130         * unix.c (main): Clarify coments (no code changes)
131
132         * super.c (release_orphan_inodes): Fix spelling typo in error message.
133
134         * pass1.c (e2fsck_pass1): Offer to update the filesystem revision
135                 level if we need to set large files flag.  Patch from
136                 Andreas Dilger.
137
138         * super.c (check_super_block): If we have any of the compatibility
139                  flags set, we need to have a revision 1 filesystem.  Most
140                  kernels will not check the flags on a rev 0 filesystem
141                  and we may have corruption issues because of the
142                  incompatible changes to the filesystem.  Patch from Andreas
143                  Dilger.
144
145         * problem.c, problem.h (PR_0_FS_REV_LEVEL, PR_1_FS_REV_LEVEL): Add
146                 new problem codes.
147
148 2000-12-09    <tytso@snap.thunk.org>
149
150         * flushb.c: Fix flushb so that it does something other than waste
151                 disk space when built on systems with modern header files
152                 and add a non-subtle Copyright Licensing restriction so
153                 Yann will remove it from the Debian Distribution.  (Now
154                 violates the Debian Free Software Guidelines, on purpose.)
155
156         * journal.c (e2fsck_check_ext3_journal): If JFS_DEBUG is defined
157                 at the top level, set the JFS debuging level to 2.
158
159         * jfs_e2fsck.h, jfs_user.h: Replaces jfs_compat.h.  The jfs.h file
160                 has been moved to the include/linux directory.
161
162         * journal.c, revoke.c, recovery.c: Updated files from Stephen to
163                 support the V2 superblock and revoke processing.  The
164                 journal.c and revoke.c files are copies from the ext3
165                 kernel source.
166
167         * Makefile.in: Added revoke.c to the list of source/object files.
168
169 2000-11-16  Theodore Ts'o  <tytso@valinux.com>
170
171         * pass1b.c: Change routines to use PR_1B_BLOCK_ITERATE when
172                 reporting problems rather than using com_err directly.
173
174         * problem.c, problem.h (PR_1B_BLOCK_ITERATE): Add new problem code.
175
176         * message.c (expand_percent_expression): Add safety check.  If
177                 ctx->str is NULL, print "NULL" instead of dereferencing
178                 the null pointer.
179
180         * pass1b.c, pass2.c, pass3.c: Change calls to ext2fs_block_iterate
181                 to ext2fs_block_iterate2, to support 64-bit filesizes and
182                 to speed things up slightly by avoiding the use of the
183                 ext2fs_block_iterate's compatibility shim layer.
184
185 2000-10-30    <tytso@snap.thunk.org>
186
187         * util.c (get_backup_sb): Calculate backup superblock correctly
188                 when the blocksize is > 1k.
189
190 2000-10-26    <tytso@snap.thunk.org>
191
192         * jfs.h, jfs_compat.h, journal.c: Updated to include the
193                 definition of the new journal superblock format; still
194                 only supports V1 superblocks for now.  (From sct)
195
196 2000-10-24    <tytso@snap.thunk.org>
197
198         * super.c (release_inode_block, release_inode_blocks,
199                 release_orphan_inodes): Add code to deal with truncating
200                 inodes which are still in use (but which are on the orphan
201                 list because they need truncation).
202
203         * problem.c, problem.h: Rename PR_0_CLEAR_ORPHAN_INODE to
204                 PR_0_ORPHAN_CLEAR_INODE, and remove
205                 PR_0_ORPHAN_INODE_INUSE.
206         
207         * journal.c (e2fsck_run_ext3_journal): Add i18n support, and print
208                 a message when the journal is being recovered.
209
210         * pass1.c (e2fsck_pass1): Don't check the i_mode field for the
211                 journal inode, if it is in use.
212
213 2000-09-12    <tytso@valinux.com>
214
215         * extend.c: 
216         * flushb.c: Add include of nls-enable.h which is necessary so that
217                 they can compile correctly.
218
219 2000-08-22    <tytso@valinux.com>
220
221         * unix.c (main): If we're doing a read-only check, skip the
222                 journal playback, but don't abort the e2fsck run.
223
224         * super.c (release_orphan_inodes): Fix typo; should do bounds
225                 checking on next_ino instead of ino.
226
227         * jfs_compat.h (J_ASSERT): 
228         * journal.c (e2fsck_run_ext3_journal): 
229         * pass3.c (adjust_inode_count): Use fatal_error() instead of exit().
230
231         * unix.c: Use fatal_error() instead of exit() whenever possible.
232                 Also fix the fsck exit codes so that we use FSCK_USAGE
233                 when it is appropriate.  Rename global_signal_ctx to
234                 e2fsck_global_ctx and let it be exported globally.
235
236         * util.c (fatal_error): Try to flush the I/O manager before
237                 forcing an exit.
238
239 2000-08-20    <tytso@valinux.com>
240
241         * journal.c (e2fsck_journal_load): Fix **nasty** bug which caused
242                 e2fsck_check_ext3_journal to smash the journal because
243                 journal->j_transaction_sequence wasn't getting
244                 initialized.
245
246         * journal.c: (recover_ext3_journal, e2fsck_run_ext3_journal): Move
247                 call to e2fsck_clear_recover from recover_ext3_journal to
248                 after the filesystem has been closed and reopened.
249                 Otherwise, the superblock in the filesystem handle will
250                 probably be stale, and will overwrite the newer version of
251                 the superblock written by the log recovery.
252
253         * message.c (expand_inode_expression): Add support for %Iu and %Ig
254
255         * problem.h (PR_0_CLEAR_ORPHAN_INODE): Add new problem code.
256
257         * super.c (release_orphan_inodes, release_inode_block,
258                 release_inode_blocks): Update the block group descriptor
259                 counts when freeing the orphan inode.  Use
260                 PR_0_CLEAR_ORPHAN_INODE to report when we clear an orphan.
261
262         * journal.c (e2fsck_run_ext3_journal): Fix a bug where we
263                 attempted to reopen the filesystem using the device name
264                 instead of the filesystem name.
265
266 2000-08-18    <tytso@valinux.com>
267
268         * Makefile.in: Update the make dependencies
269         
270         * problem.c, problem.h: Add the problem codes: 
271                 PR_0_ORPHAN_ILLEGAL_BLOCK_NUM, 
272                 PR_0_ORPHAN_ALREADY_CLEARED_BLOCK, 
273                 PR_0_ORPHAN_ILLEGAL_HEAD_INODE, 
274                 PR_0_ORPHAN_ILLEGAL_INODE, PR_0_ORPHAN_INODE_INUSE
275
276         * super.c (release_inode_blocks, release_orphan_inodes,
277                 check_super_block): Add support for clearing orphaned
278                 inodes from the unmounted filesystem.
279
280         * journal.c (e2fsck_recover_ext3_journal): Remove the last orphan
281                 check; this is now handled in check_super_block ---
282                 non-journaled filesystems can use the orphan list in the
283                 future.  Also, move the the re-opening of the filesystem
284                 to e2fsck_run_ext3_journal().
285
286 2000-07-12  Andreas Dilger <adilger@turbolinux.com>
287
288         * journal.c: implement loading of ext3 journal for recovery code
289
290         * problem.c (fix_problem): return answer from PR_AFTER_CODE to caller.
291                 Add journal problems.
292
293         * recovery.c (journal_recover): user-space ext3 journal recovery code
294
295         * unix.c (main) : check journal and do recovery in separate steps
296
297 2000-08-07    <tytso@snap.thunk.org>
298
299         * unix.c (calc_percent): Make sure that we don't take a floating
300                 exception if the max value is zero.  (should normally
301                 never happen, but...)
302
303 2000-07-13    <tytso@valinux.com>
304
305         * Release of E2fsprogs 1.19
306
307 2000-07-06  Theodore Ts'o  <tytso@valinux.com>
308
309         * unix.c (check_if_skip): Modify algorithm for checking
310                 s_max_mnt_count to match with the kernel.  (If
311                 s_max_mnt_count is negative, ignore the mnt_count check.)
312
313         * unix.c (e2fsck_update_progress): Adjust the width of the
314                 progress bar dynamically, based on the filesystem name
315                 that we need to display.
316
317         * unix.c (main): If the ext3 needs_recovery flag is set, call
318                 e2fsck_run_ext3_journal() and then restart the e2fsck run.
319
320         * journal.c (e2fsck_run_ext3_journal): New file which contains
321                 logic to recover the ext3 journal.  This version relies on
322                 the kernel being able to mount the filesystem in order to
323                 run the journal.
324
325 2000-07-05  Theodore Ts'o  <tytso@valinux.com>
326
327         * unix.c (e2fsck_update_progress): Only save and check the last
328                 percentage after multiplying it by 10, nor 1000, since we
329                 only need to save values to a tenth of a percent (and the
330                 percentage is already from 0 .. 100%, not 0 .. 1).
331                 Also, re-arrange the logic so that we do the time
332                 check only after doing the percentage check, and we
333                 only advance the spinner if we're about to display it.
334
335 2000-07-04  Theodore Ts'o  <tytso@valinux.com>
336
337         * pass1.c (e2fsck_pass1): Check to see if the ext3 s_last_orphan
338                 field is set; if so, clear it, so that ext3 mounting code
339                 won't get confused by the fact that we've cleared out the
340                 orphaned inodes.
341
342 2000-06-10  Theodore Ts'o  <tytso@valinux.com>
343
344         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Add error
345                 checking for a "should never happen case".
346
347         * problem.c, problem.h (PR_5_COPY_IBITMAP_ERROR,
348                 PR_5_COPY_BBITMAP_ERROR): Add new error codes.
349
350 2000-05-27  Theodore Ts'o  <tytso@valinux.com>
351
352         * pass1.c (pass1, check_size): Apply patch from Chris Wedgewood
353                 (cw@foof.org) which checks to see if special devices have
354                 a non-zero size, and deals with it.
355
356         * problem.c, problem.h (PR1_SET_NONZSIZE): Add new problem code.
357
358 2000-05-18  Theodore Ts'o  <tytso@valinux.com>
359
360         * Makefile.in (install): Create a symbolic link for fsck.ext3 as
361                 well.
362
363 2000-05-08  Theodore Ts'o  <tytso@valinux.com>
364
365         * problem.c, problem.h (PR_0_HURD_CLEAR_FILETYPE): Add new problem
366                 code. 
367
368         * super.c (check_super_block): If the OS type in the superblock is
369                 the Hurd, check to see if the filetype feature is set, and
370                 offer to clear it if so.   This needs to be done since the
371                 Hurd doesn't properly support the filetype feature.
372                 (And since the hurd allows the transmogrification of files
373                 to special files and vice versa --- for no good reason
374                 that I can understand --- it can't support the filetype
375                 feature for the forseeable future, either.)
376
377 2000-04-03  Theodore Ts'o  <tytso@valinux.com>
378
379         * unix.c: For platforms that don't define optarg.h, manually
380                 define optarg and optind.
381
382 2000-03-20  Theodore Ts'o  <tytso@valinux.com>
383
384         * pass1.c (check_immutable, e2fsck_pass1_check_device_inode):
385                 Check for the append-only as well as the immutable flag.
386
387         * problem.c (PR_1_SET_IMMUTABLE): Adjust message to include
388                 append-only flag.   Fix comment for compression flag.
389         
390 2000-02-12    <tytso@snap.thunk.org>
391
392         * unix.c (e2fsck_update_progress): Limit the number of updates to
393                 the progress bars to 8 times a second.  This allows a 9600
394                 baud console link to keep up.
395
396 2000-02-11    <tytso@snap.thunk.org>
397
398         * unix.c (main): If compression is enabled on the filesystem,
399                 print a warning message (for now).
400
401         * message.c: Add new compression shortcut: @c == compress
402
403         * problem.c, problem.h (PR_1_COMPR_SET): Add new error code.
404
405         * pass1.c (check_blocks): If the inode has EXT2_COMPRBLK_FL flag
406                 set, check to see if the filesystem supports compression.
407                 If it does pass this information down to process_block()
408                 so it can treat the compressed block flag words
409                 correctly.  If not, offer to clear the flag, since it
410                 shouldn't be set.  
411                 (process_block): If an inode has the compressed inode flag
412                 set, allow EXT2FS_COMPRESSED_BLKADDR.
413
414         * pass1b.c (process_pass1b_block, delete_file_block,
415                 clone_file_block):
416         * pass2.c (deallocate_inode_block): Use HOLE_BLKADDR to check to
417                 see if the block can be skipped.
418
419 2000-02-08    <tytso@snap.thunk.org>
420
421         * util.c: Make resource tracking message more concise.
422
423         * e2fsck.h:
424         * pass1.c (mark_table_blocks, e2fsck_pass1): Remove
425                 ctx->block_illegal_map, since it's not needed by pass1,
426                 and pass1b has been modified to calculate it manually if
427                 needed.   This reduces the memory footprint needed by e2fsck.
428
429         * pass1b.c (check_if_fs_block): New static function which returns
430                 whether or not a block overlaps with filesystem metadata.
431                 This replaces consulting the block_illegal_map bitmap.
432
433         * Makefile.in: Call sync after finishing building all in this
434                 directory. 
435         
436         * unix.c (PRS): sync the filesystem before trying to use
437                 BLKFLSBUF, to minimize the chance of causing dirty blocks
438                 to get dropped.
439
440         * e2fsck.h: Manually define BLKFLSBUF if not defined, and we're on
441                 a Linux/i386 system.
442         
443         * pass3.c (check_directory): Only do the loop detection algorithm
444                 if we've searched over 2048 parent directories and haven't
445                 found the end yet.  This means that in the common case, we
446                 don't allocate or clear the inode_loop_detection bitmap,
447                 which for large systems, merely clearing the bitmap for
448                 each directory was turning out to be quite expensive.
449                 Thanks to Jani Jaakkola (jjaakkol@cs.helsinki.fi) for
450                 identifying this problem.
451
452 2000-02-06  Theodore Ts'o  <tytso@valinux.com>
453
454         * badblocks.c, e2fsck.h, ehandler.c, emptydir.c, extend.c,
455                 flushb.c, iscan.c, message.c, pass1.c, pass1b.c, pass3.c
456                 pass4.c, pass5.c, problem.c, scantest.c, swapfs.c, 
457                 unix.c, util.c: Add Internationalization support as 
458                 suggested by Marco d'Itri <md@linux.it>.
459
460 2000-02-02  Theodore Ts'o  <tytso@valinux.com>
461
462         * e2fsck.h, flushb.c, scantest.c: Remove uneeded include of
463                 linux/fs.h 
464
465 2000-01-18  Theodore Ts'o  <tytso@valinux.com>
466
467         * Makefile.in: Since LIBUUID can sometimes include "-lsocket"
468                 we need a separate DEPLIBUUID that can be used in
469                 Makefile's dependency rules.
470
471 1999-11-23    <tytso@valinux.com>
472
473         * e2fsck.8.in: Update language about where to find a backup
474                 superblock.
475
476 1999-11-19    <tytso@valinux.com>
477
478         * pass1.c (process_inodes): Add shortcut handling; if
479                 process_inodes_count is zero, return right away, to avoid
480                 calling qsort with a non-positive count.
481
482         * message.c (safe_print): Fix to properly display ^A, ^B, etc. and
483                 to print Delete as ^?
484
485         * Makefile.in (distclean): Remove TAGS and Makefile.in.old from
486                 the source directory.
487
488 1999-11-10    <tytso@valinux.com>
489
490         * Release of E2fsprogs 1.18
491
492 1999-11-10    <tytso@valinux.com>
493
494         * problem.c (fix_problem): Support a new flag, PR_PREEN_NO which
495                 means the answer is assumed to be no in preen mode.  This
496                 is now used in the PR_1_SET_IMMUTABLE code, so that in
497                 preen mode we ignore these inodes and just print a warning
498                 message. 
499
500 1999-11-09    <tytso@valinux.com>
501
502         * pass1.c (e2fsck_pass1): If the filesystem does not support
503                 imagic inodes, if an inode has the imagic flag set, offer
504                 to clear the imagic flag.  If a valid device/fifo/socket
505                 has the immutable flag set, call the new helper function
506                 check_immutable() to offerto clear the immutable flag.
507
508         * pass2.c (check_filetype): Use the new ext2_file_type() helper
509                 function instead of calculating the file_type information
510                 manually.
511
512         * pass3.c (e2fsck_reconnect_file): When adding a link to
513                 lost+found, calculate the filetype information so that
514                 ext2fs_link() can use the information if applicable.
515                 (get_lost_and_found): Create the /lost+found directory
516                 with the correct filetype information if applicable.
517
518         * util.c (ext2_file_type), e2fsck.h: New function which returns
519                 the directory entry file type information given the
520                 inode's mode bits.
521
522         * problem.c, problem.h: Added new problem codes PR_1_SET_IMAGIC
523                 and PR_1_SET_IMMUTABLE.
524
525 1999-11-07    <tytso@valinux.com>
526
527         * pass4.c (e2fsck_pass4): Clear inode_imagic_map after freeing it,
528                 to prevent it from getting freed twice.
529
530 1999-11-06    <tytso@valinux.com>
531
532         * unix.c (main): Close the filesystem before freeing the context,
533                 so that in the event of a free()-related segmentation
534                 violation, the filesystem is properly closed and written
535                 out.
536
537 1999-10-27    <tytso@valinux.com>
538
539         * e2fsck.c (e2fsck_reset_context): When freeing
540                 ctx->inode_reg_map, we weren't zero'ing
541                 ctx->inode_reg_map, which could cause a segfault later on
542                 in the e2fsck run.
543
544 1999-10-26    <tytso@valinux.com>
545
546         * problem.h (PR_2_SPLIT_DOT): Fix excess zero in problem code (now
547                 matches the standard convention).
548
549 1999-10-26    <tytso@valinux.com>
550
551         * Release of E2fsprogs 1.17
552
553 1999-10-26    <tytso@valinux.com>
554
555         * message.c (safe_print): Make safe_print take an char instead of
556                 an unsigned char to fix gcc warnings.
557
558 1999-10-25    <tytso@valinux.com>
559
560         * util.c: For NT portability, don't redefine getchar(), since
561                 stdio defines that.  Instead we introduce a new
562                 abstract macro read_a_char() which is #defined to the
563                 right function as necessary.
564
565         * problem.c, problem.h (PR_2_NULL_NAME): Add new problem code.
566
567         * pass2.c (check_dir_block): Require that the length of the
568                 directory entry be at least 12 bytes.  Check to see if the
569                 filename is zero-length, and flag that as an error.
570
571 1999-10-22    <tytso@valinux.com>
572
573         * Release of E2fsprogs 1.16
574
575 1999-10-22    <tytso@valinux.com>
576
577         * pass2.c (check_filetype): If the filetype filesystem feature is
578                 not set, and a directory entry has a dirent feature, offer
579                 to clear it (since 2.0 kernels will do complain will
580                 interpret it as a very large name length field).
581
582         * problem.c (PR_2_CLEAR_FILETYPE): Add new problem code.
583
584 1999-10-21    <tytso@valinux.com>
585
586         * e2fsck.8.in: Update man page to use a more standard format (bold
587                 option flags and italicized variables), as suggested by
588                 Andreas Dilger (adilger@enel.ucalgary.ca)
589
590         * pass4.c (e2fsck_pass4): If an inode is set in the
591                 inode_imagic_map bitmap, don't check to see if it is
592                 disconnected from the inode tree (because it almost
593                 certainly will be).  Free inode_imagic_map at the end of
594                 pass 4.
595
596         * pass2.c (check_dir_block, check_filetype): If the FILETYPE
597                 feature is set, check the directory entry's filetype
598                 information field, and fix/set it if necessary.
599                 (e2fsck_pass2): Free the inode_reg_map bitmap at the end
600                 of pass 2.
601
602         * pass1.c (e2fsck_pass1, alloc_imagic_map): Allocate and fill in
603                 information for inode_reg_map and inode_imagic_map, which
604                 indicates which inodes are regular files and AFS inodes,
605                 respectively.
606                 Since only the master superblock is written during a
607                 restart, force that superblock to be used after a restart;
608                 otherwise changes to the block group descriptors end up
609                 getting ignored.
610
611         * problem.c, problemP.h: If e2fsck is run -n, make def_yn variable
612                 be 0 for "no".  Add support for a new flag, PR_NO_NOMSG,
613                 which supresses the problem message if e2fsck is run with
614                 the -n option.
615
616         * problem.c, problem.h (PR_2_SET_FILETYPE, PR_2_BAD_FILETYPE): Add
617                 new problem codes.
618
619         * message.c (expand_dirent_expression): Add support for %dt which
620                 prints the dirent type information.
621
622         * e2fsck.c (e2fsck_reset_context): Free new bitmaps (inode_reg_map
623                 and inode_imagic_map).
624
625         * e2fsck.h (e2fsck_t): Add new inode_reg_map and inode_magic_map
626                 to the context structure.
627         
628 1999-09-24    <tytso@valinux.com>
629
630         * unix.c (PRS), util.c (ask_yn): Add #ifdef's to make
631                 e2fsprogs easier to port to non-Unix platforms.
632
633 1999-09-07    <tytso@valinux.com>
634
635         * pass3.c (adjust_inode_count): Fix bug where we didn't keep the
636                 internal and external inode counts in sync when we
637                 decremented an inode whose link count was already zero.
638                 Now we skip incrementing or decrementing both link counts
639                 if we would cause an overflow condition.
640                 (expand_dir, expand_dir_proc): Change where we update the
641                 inode block count and size files so that the block count
642                 field is updated correctly when we create an indirect block.
643
644 1999-08-05    <tytso@valinux.com>
645
646         * super.c (check_super_block): Check to see whether the
647                 inodes_per_group value in the superblock is insanely too
648                 high.
649
650 1999-08-02    <tytso@valinux.com>
651
652         * pass1b.c (clone_file_block): Don't clear the dup_map flag if
653                 the block also shares data with the fs metadata when
654                 the count drops to 1, since the block should still be
655                 cloned, as fs metadata isn't included in the count.
656
657 1999-07-18  Theodore Ts'o  <tytso@valinux.com>
658
659         * Release of E2fsprogs 1.15
660
661 1999-07-19    <tytso@valinux.com>
662
663         * unix.c (usage): Add minimalist emergency help to the usage
664                 message. 
665
666 1999-07-18    <tytso@valinux.com>
667
668         * unix.c: Add support for calculating a progress bar if the -C0
669                 option is given.   The function e2fsck_clear_progbar()
670                 clears the progress bar and must be called before any
671                 message is issued.  SIGUSR1 will enable the progress bar,
672                 and SIGUSR2 will disable the progress bar.  This is used
673                 by fsck to handle parallel filesystem checks.  Also, set
674                 the device_name from the filesystem label if it is
675                 available. 
676
677         * e2fsck.h: Add new flags E2F_FLAG_PROG_BAR and
678                 E2F_FLAG_PROG_SUPRESS.  Add new field in the e2fsck
679                 structure which contains the last tenth of a percent
680                 printed for the user.
681
682         * message.c (print_e2fsck_message): Add call to
683                 e2fsck_clear_progbar(). 
684
685         * pass1.c (e2fsck_pass1):
686         * pass2.c (e2fsck_pass2):
687         * pass3.c (e2fsck_pass3):
688         * pass4.c (e2fsck_pass4):
689         * pass5.c (e2fsck_pass5): Add call to e2fsck_clear_progbar when
690                 printing the resource tracking information.
691
692         * pass5.c (check_block_bitmaps, check_inode_bitmaps): If there is
693                 an error in the bitmaps, suppress printing the progress
694                 bar using the suppression flag for the remainder of the
695                 check, in order to clean up the display.
696
697 1999-06-30    <tytso@valinux.com>
698
699         * unix.c (check_mount): Clean up the abort message displayed when
700                 the filesystem is mounted and either stdout or stdin isn't
701                 a tty.
702
703 1999-06-25    <tytso@valinux.com>
704
705         * e2fsck.h:
706         * pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode, 
707                 pass1_check_directory, e2fsck_use_inode_shortcuts): Make
708                 pass1_* be private static functions, and create new
709                 function e2fsck_use_inode_shortcuts which sets and clears
710                 the inode shortcut functions in the fs structure.
711
712         * e2fsck.h:     
713         * pass2.c (e2fsck_process_bad_inode): Make process_bad_inode() an
714                 exported function.
715
716         * pass4.c (e2fsck_pass4): Call e2fsck_process_bad_inode to check
717                 if a disconnected inode has any problems before
718                 connecting it to /lost+found.  Bug and suggested fix by 
719                 Pavel Machek <pavel@bug.ucw.cz>
720
721 1999-06-21    <tytso@valinux.com>
722
723         * unix.c (main): Add missing space in the disk write-protected
724                 message. 
725
726 1999-05-22    <tytso@rsts-11.mit.edu>
727
728         * problem.c, problem.h (PR_0_INODE_COUNT_WRONG): Add new problem
729                 code. 
730         
731         * super.c (check_super_block): Add check to make sure the total
732                 number of inodes is sane, since this can be calculated
733                 from the number of groups times the number of inodes per
734                 group.   Offer to correct it if it is incorrect.
735
736 1999-03-19    <tytso@rsts-11.mit.edu>
737
738         * pass5.c (check_block_end): Fix fencepost condition where when
739                 clearing the block padding we were missing the last position
740                 in the bitmap.
741
742 1999-05-17    <tytso@rsts-11.mit.edu>
743
744         * unix.c (reserve_stdio_fds): Add safety check in case
745                 reserve_stdio_fds couldn't open /dev/null.
746
747 1999-03-14  Theodore Ts'o  <tytso@rsts-11.mit.edu>
748
749         * util.c (print_resource_track): Use mallinfo if present to get
750                 more accurate malloc statistics.
751
752         * pass3.c (get_lost_and_found): Check to see if lost+found is a
753                 plain file; if so, offer to unlink it.
754
755         * problem.c, problem.h (PR_3_LPF_NOTDIR): Add new problem code.
756
757 1999-03-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
758
759         * problem.c: Fix problem message for PR_1_BAD_GROUP_DESCRIPTORS so
760                 that the block group number is printed.  Add new prompt,
761                 PROMPT_UNLINK.
762
763 1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
764
765         * Release of E2fsprogs 1.14
766
767 1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
768
769         * message.c (safe_print): New function which prints strings,
770                 converting non-printable characters using the '^' and
771                 M-notation.  This function is now used to print directory
772                 name entries and pathnames.
773
774 Mon Jan  4 02:28:59 1999  Theodore Y. Ts'o  <tytso@mit.edu>
775
776         * unix.c (main): Reset the context before calling ext2fs_close(),
777                 to avoid referencing already freed memory.
778
779 1998-12-15  Theodore Ts'o  <tytso@rsts-11.mit.edu>
780
781         * Release of E2fsprogs 1.13
782
783 1998-12-03  Theodore Ts'o  <tytso@rsts-11.mit.edu>
784
785         * Makefile.in: Updated dependencies.
786
787 1998-11-27  Theodore Ts'o  <tytso@rsts-11.mit.edu>
788
789         * pass3.c (get_lost_and_found): If the filesystem is not opened
790                 read-only, then force /lost+found to be created if it is
791                 not present.
792
793         * problem.c: Allow PR_3_NO_LF_DIR to be handled during a preen
794                 operation. 
795
796 1998-10-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
797
798         * unix.c (main): Move ext2fs_close() after e2fsck_free_context()
799                 since e2fsck_free_context may reference data in ctx->fs.
800
801         * e2fsck.c (e2fsck_reset_context): Make sure ctx->fs is non-NULL
802                 before checking ctx->fs->dblist.
803
804 1998-10-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
805
806         * pass1.c (e2fsck_pass1): Use the device check subroutine on
807                 FIFO's and Socket's, so that we catch bogus immutable inodes.
808
809         * pass2.c (process_bad_inode): Process bad socket and fifo's.
810
811         * problem.h, problem.c: Define new problem codes PR_2_BAD_FIFO and
812                 PR_2_BAD_SOCKET.
813
814 1998-09-02  Theodore Ts'o  <tytso@rsts-11.mit.edu>
815
816         * problem.c: Add PR_3_NO_DIRINFO error code.
817
818         * super.c (check_super_value): Rename min and max to min_val and
819                 max_val to avoid possible cpp macro conflicts.
820
821         * pass4.c (e2fsck_pass4): Rename max to maxgroup, to avoid
822                 possible cpp macro conflicts.
823         
824         * pass3.c (e2fsck_pass3): Rename max to maxdirs, to avoid possible
825                 cpp macro conflicts.
826                 (check_directory): Fix logic to avoid possible core dump
827                 in the case of ext2fs_get_dir_info returning NULL.  (By
828                 the time we get here, it should never happen, but...).
829                 Also simply/streamline the control flow of the function.
830
831 1998-08-17  Theodore Ts'o  <tytso@rsts-11.mit.edu>
832
833         * unix.c (check_if_skip): Move the "not cleanly mounted" check
834                 ahead of the maximal mount and too long since checked tests.
835                 (reserve_stdio_fds): Make sure 0,1,2 file descriptors are
836                 open, so that we don't open the filesystem using the same
837                 file descriptor as stdout or stderr.
838
839 1998-08-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>
840
841         * pass2.c (e2fsck_pass2): Fix the progress accounting so that we
842                 get to 100%.
843
844         * pass3.c (e2fsck_pass3): Change progress accounting to be
845                 consistent with the other e2fsck passes.                
846
847         * e2fsck.c (e2fsck_run): At the end of each pass, call the
848                 progress function with the pass number set to zero. 
849
850         * unix.c (e2fsck_update_progress): If the pass number is zero,
851                 ignore the call, since that indicates that we just want to
852                 deallocate any progress structures.
853
854 1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
855
856         * Release of E2fsprogs 1.12
857
858 1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
859
860         * unix.c (main): Fix typo in checking the incompat feature set; it
861                 should be checked against EXT2_LIB_FEATURE_INCOMPAT_SUPP.
862
863 1998-07-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>
864
865         * badblocks.c (test_disk): Don't clear the existing bad blocks
866                 list when using e2fsck -c, since it may cause blocks with
867                 marginal errors to be dropped from the bad blocks list.
868
869 Mon Jul  6 10:32:11 1998  Theodre Ts'o  <tytso@lurch.mit.edu>
870
871         * pass1.c (e2fsck_pass1): Use ext2fs_sb structure for
872                 compatibility with older kernels.
873
874 1998-06-25  Theodore Ts'o  <tytso@rsts-11.mit.edu>
875
876         * unix.c (e2fsck_update_progress): Remove unused variables.
877
878 1998-06-10  Theodore Ts'o  <tytso@rsts-11.mit.edu>
879
880         * pass1.c, problem.h: Change blkcnt_t to be e2_blkcnt_t to avoid
881                 collision with LFS API.
882
883         * pass1.c (e2fsck_pass1): Fix bug so that ext2_max_sizes is
884                 properly initialized.  
885                 (e2fsck_pass1): Don't allow the the boot loader inode to
886                 be a directory (clear the inode mode field if so).
887
888 1998-05-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>
889
890         * unix.c (PRS): Added new option -C, which causes e2fsck to print
891                 progress updates so that callers can keep track of the
892                 completion progress of e2fsck.  Designed for use by
893                 progress, except for -C 0, which prints a spinning report
894                 which may be useful for some users.
895
896         * pass5.c (e2fsck_pass5): Use a finer-grained progress reporting
897                 scheme (useful for larger filesystems).
898
899         * e2fsck.h: Add progress_fd and progress_pos, for use by the Unix
900                 progress reporting functions.
901
902 1998-04-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
903
904         * pass1.c (process_inode_cmp): Use EXT2_QSORT_TYPE to define the
905                 appropriate return type for comparison functions for qsort.
906
907         * e2fsck.h: Add #ifdef protection for unistd.h
908
909         * super.c: Remove header files already included by e2fsck.h
910
911 1998-04-26  Theodore Ts'o  <tytso@rsts-11.mit.edu>
912
913         * dirinfo.c (e2fsck_add_dir_info): Update function to pass the old
914                   size of the memory to be resized to ext2fs_resize_mem().
915
916 1998-03-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
917
918         * Makefile.in: Change to use new installation directory variables
919                 convention.  Fix uninstall rules to take $(DESTDIR) into
920                 account.  Remove cat8dir from the installdirs target,
921                 since modern man package don't necessarily put the cat
922                 directory in /usr/man/cat?.
923
924 1998-03-29  Theodore Ts'o  <tytso@rsts-11.mit.edu>
925
926         * super.c, e2fsck.h: Always declare e2fsck_get_device_size() as an
927                 extern in e2fsck.h to prevent -Wall warnings.
928
929         * pass4.c (e2fsck_pass4): Remove unused variable 'j'.
930
931 1998-03-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
932
933         * super.c (check_super_block): Fix broken superblock sanity check
934                 when calculating blocks_per_group if s_log_frag_size !=
935                 s_log_block_size.  Since we don't support fragments, this
936                 isn't a bug deal, but it's good to get it fixed.
937
938 1998-03-23  Theodore Ts'o  <tytso@rsts-11.mit.edu>
939
940         * unix.c: Fix bug in check of feature set, to make sure we can
941                 really fix this filesystem.
942
943         * problem.h: Make blkcount type to be of type blkcnt_t.  Make the
944                 num field be a 64 bit type.  Add the problem code
945                 PR_1_FEATURE_LARGE_FILES
946
947         * problem.c: Add table entry for the problem code
948                 PR_1_FEATURE_LARGE_FILES.
949
950         * pass1.c (e2fsck_pass1): A non-zero i_dir_acl field is only
951                 a problem for directory inodes.  (Since it is also
952                 i_size_high now.)   If there are no large_files, then
953                 clear the LARGE_FLAG feature flag.  If there are
954                 large_files, but the LARGE_FLAG feature flag is not set,
955                 complain and offer to fix it.
956                 (check_blocks): Add support to deal with non-directory
957                 inodes that have i_size_high set (i.e., large_files).
958                 Don't give an error if a directory has preallocated
959                 blocks, to support the DIR_PREALLOC feature.
960                 (process_block, process_bad_block): The blockcnt variable
961                 is a type of blkcnt_t, for conversion to the new
962                 block_iterate2.
963
964         * pass2.c (process_bad_inode): A non-zero i_dir_acl field is only
965                 a problem for directory inodes.  (Since it is also
966                 i_size_high now.)
967
968         * message.c (expand_inode_expression): Print a 64-bits of the
969                 inode size for non-directory inodes.  (Directory inodes
970                 can only use a 32-bit directory acl size, since
971                 i_size_high is shared with i_dir_acl.)  Add sanity check
972                 so that trying to print out the directory acl on a
973                 non-directory inode will print zero.
974                 (expand_percent_expression): %B and %N, which print 
975                 pctx->blkcount and pctx->num, can now be 64 bit
976                 variables.  Print them using the "%lld" format if
977                 EXT2_NO_64_TYPE is not defined.
978
979         * e2fsck.h: Add the large_flagsfield to the e2fsck context.
980
981         * e2fsck.c (e2fsck_reset_context): Clear the large_flags
982                 field.
983
984 Sun Mar  8 23:08:08 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
985
986         * pass3.c (fix_dotdot_proc): 
987         * pass2.c (check_dot, check_dotdot, check_name, check_dir_block): 
988         * message.c (expand_dirent_expression): Mask off the high eight
989                 bits of the directory entry's name_len field, so that it
990                 can be used for other purposes.
991
992 Fri Feb 27 00:01:39 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
993
994         * e2fsck.c (e2fsck_run): Since E2F_FLAG_SIGNAL_MASK doesn't
995                 include EXT2_FLAG_RESTART anymore, we need to adjust this
996                 routine so that it *does* return in the case of it seeing
997                 EXT2_FLAG_RESTART.
998
999         * pass1.c (e2fsck_pass1): ext2_get_next_inode() may call the group
1000                 done callback function, which may set context abort
1001                 flags.  So we need to test the context abort flags after
1002                 we call ext2_get_next_inode().
1003                 (process_inodes): If we abort due out of process_inodes,
1004                 do a clean exit by breaking out of the for loop instead of
1005                 just returning.
1006
1007         * e2fsck.h (E2F_FLAG_SIGNAL_MASK): EXT2_FLAG_RESTART shouldn't be
1008                 considered a SIGNAL mask (i.e., requiring an immediate
1009                 abort of processing to restart).  FLAG_RESTART just means
1010                 that we want to restart once pass 1 is complete.
1011
1012 Tue Feb 24 15:19:40 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1013
1014         * Change the progress function to return an integer; if returns 1,
1015                 then the progress function is expected to have set the
1016                 e2fsck context flag signalling a user abort, and the
1017                 caller should also initiate a user abort.
1018
1019 Tue Feb 17 19:03:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1020
1021         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Don't call
1022                 end_problem_latch() unless there was actually a problem
1023                 latched.  Simplifies semantics of the latch processing.
1024
1025 Mon Feb 16 17:31:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1026
1027         * e2fsck.h: Add new field, priv_data to the e2fsck context
1028                 structure.  It should be used by callers of the e2fsck
1029                 functions only, and not by anything in e2fsck itself.
1030
1031 Mon Feb 7 17:31:04 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1032
1033         * super.c: Instead of call ext2fs_get_device_size(), define and call
1034                 e2fsck_get_device_size().  (This function may be stubbed
1035                 out in special versions of e2fsck.)
1036
1037         * pass3.c, pass4.c: Remove extra calls to the progress function
1038                 that weren't needed.
1039
1040         * mke2fs.8.in: Update man page to note that the format of the bad
1041                 block file is the same as the one generated by badblocks. 
1042
1043 Sun Feb  1 07:57:14 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1044
1045         * dirinfo.c, e2fsck.c: Don't include com_err.h; it isn't needed.
1046
1047         * e2fsck.h: Include <time.h> since it is needed
1048
1049         * super.c: If EXT2_SKIP_UUID is defined, then skip the UUID
1050                 processing. 
1051
1052 Tue Jan 20 15:37:01 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1053
1054         * unix.c (main): In the case where the filesystem revision is too
1055                 high, print the message about the superblock possibly
1056                 being corrupt.
1057
1058         * e2fsck.8.in: Add expanded comments about how the -b option
1059                 works. 
1060
1061 Sat Jan 17 13:02:16 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1062
1063         * e2fsck.h: If EXT2_FLAT_INCLUDES is defined, then assume all of
1064                 the ext2-specific header files are in a flat directory.
1065
1066         * dirinfo.c, ehandler.c, pass1.c, pass1b.c, pass2.c, pass5.c,
1067                 super.c, swapfs.c, unix.c: Explicitly cast all assignments
1068                 from void * to be compatible with C++.
1069
1070 Tue Jan  6 11:30:24 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1071
1072         * unix.c (sync_disk): Remove sync_disk and calls to that function,
1073                 since ext2fs_close() now takes care of this.
1074
1075 Mon Dec 29 14:45:42 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1076
1077         * pass1.c, pass1b.c, pass2.c, pass3.c, swapfs, badblocks.c,
1078                 ehandler.c, unix.c: Change use of private to be priv_data,
1079                 to avoid C++ reserved name clash.
1080
1081 Fri Nov 28 09:30:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1082
1083         * dirinfo.c (e2fsck_add_dir_info): Use ext2fs_get_num_dirs instead
1084                 of e2fsck_get_num_dirs, which has been removed.
1085
1086 Tue Nov 25 15:54:35 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1087
1088         * Makefile.in (PROGS): Remove @EXTRA_PROGS@, since we don't want
1089                 to compile and install flushb.
1090
1091 Mon Nov 24 06:48:00 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1092
1093         * pass1.c (e2fsck_pass1_check_device_inode): For now, only check
1094                 to make sure the extra i_blocks in a device are cleared if
1095                 the immutable flag is set.
1096
1097         * util.c (print_resource_track): Fix typo which caused the
1098                 time/resource tracking to print "Pass 1 :" instead of
1099                 "Pass 1: ".
1100
1101 Thu Nov 20 16:02:23 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1102
1103         * pass3.c (expand_directory): Fix bug which could cause core dump
1104                 when expanding the directory, and the bitmaps hadn't yet
1105                 been read in.  Also, only use ext2fs_write_dir_block when
1106                 writing a directory block, not when writing out a fresh
1107                 indirect block.
1108
1109 Wed Nov 19 16:15:44 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1110
1111         * pass1.c (process_bad_block): Fix bug where first_block wasn't
1112                 getting incremented, which caused user to get a
1113                 "Programming error?" warning if there was a bad block in a
1114                 non-primary superblock/group_descriptor.  Also fixed
1115                 another bug so that ext2fs_bg_has_super() is consulted, to
1116                 avoid problems when using a filesystem with the
1117                 sparse_groups option set and there are bad blocks at the
1118                 beginning of a group which doesn't have a superblock.
1119
1120 Thu Nov  6 16:10:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1121
1122         * pass1.c, pass2.c, pass3.c, pass4.c, pass5.c: Add calls to the 
1123                 progress indicator function.
1124
1125         * pass1.c (scan_callback): Add call to the progress feedback
1126                 function (if it exists).
1127
1128 Tue Nov  4 09:45:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1129
1130         * super.c (check_super_block): Skip the device size check if the
1131                 get_device_size returns EXT2_EXT_UNIMPLEMENTED.
1132
1133         * iscan.c (main): Don't use fatal_error() anymore.
1134
1135         * pass1b.c, swapfs.c, badblocks.c: Set E2F_FLAG_ABORT instead of
1136                 calling fatal_error(0).
1137
1138         * problem.c, pass3.c (PR_3_ROOT_NOT_DIR_ABORT, 
1139                 PR_3_NO_ROOT_INODE_ABORT): New problem codes.
1140         
1141         * problem.c, pass2.c (PR_2_SPLIT_DOT): New problem code.
1142
1143         * problem.c, pass1.c (PR_1_SUPPRESS_MESSAGES): New problem code.
1144         
1145         * problemP.h: New file which separates out the private fix_problem
1146                 data structures.
1147
1148         * util.c, dirinfo.c, pass1.c, pass1b.c, pass2.c, pass5.c, super.c,
1149                 swapfs.c util.c: allocate_memory() now takes a e2fsck
1150                 context as its first argument, and rename it to be
1151                 e2fsck_allocate_memory().
1152
1153 Mon Nov  3 14:35:29 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1154
1155         * unix.c (main): Add a special case check for the error code EROFS
1156                 and display an appropriate error message for this case.
1157
1158         * [lots of files]:  Change ext2fs_read_inode, ext2fs_write_inode
1159                 to take the e2fsck context as their first argument.
1160                 Change dir_info.c routines to take an e2fsck_context,
1161                 renamed them to start with e2fsck_ to avoid namespace
1162                 issues, and changed them to store the directory
1163                 information inside the e2fsck context.
1164                 Added e2fsck_run() which calls all of the e2fsck passes in
1165                 the correct order, and which handles the return of abort
1166                 codes.  Added abort processing, both via setjmp/longjmp
1167                 and via flags in the e2fsck context.  Use a flag in the
1168                 e2fsck context instead of the restart_e2fsck global
1169                 variable.   Change uses of free and malloc to
1170                 ext2fs_free_mem and ext2fs_get_mem.
1171         
1172 Fri Oct 31 01:12:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1173
1174         * pass1.c, pass3.c: Rename new error codes to _ET_ in them for
1175                 consistency.
1176
1177 Sat Oct 25 00:10:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1178
1179         * pass3.c (get_lost_and_found): Check error return of 
1180                 EXT2_FILE_NOT_FOUND instead of ENOTDIR
1181
1182         * pass1.c (pass1_check_directory): Return EXT2_NO_DIRECTORY
1183                 instead of ENOTDIR
1184
1185 Fri Oct 24 00:12:39 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1186
1187         * unix.c (PRS): Make the variable which getopt returns into be
1188                 an int, so that it won't lose on platforms where char is
1189                 unsigned. 
1190
1191         * pass1b.c (clone_file): Fix bug in error reporting in the case
1192                 where cs.errcode is non-zero.
1193
1194 Sun Oct 19 21:12:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1195
1196         * pass*.c, super.c, unix.c, util.c, e2fsck.h: Place #ifdef
1197                 RESOURCE_TRACK around code which uses init_resource_track
1198                 and print_resource_track.  (Not all systems have timeval)
1199
1200         * super.c: Remove excess #includes which are not necessary.
1201
1202         * e2fsck.h: Add #ifdef's for HAVE_SYS_TYPES_H and HAVE_SYS_TIME_H
1203
1204 Fri Oct  3 13:40:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1205
1206         * pass*.c, super.c: Massive changes to avoid using printf and
1207                 com_err routines.   All diagnostic messages are now routed
1208                 through the fix_problem interface.
1209
1210 Sat Sep  6 17:13:28 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1211
1212         * pass2.c (check_dir_block): Check for duplicate '.' and '..'
1213                 entries. 
1214
1215         * problem.c, problem.h: Add new problem codes PR_2_DUP_DOT and
1216                 PR_2_DUP_DOT_DOT.
1217
1218 Tue Sep  2 09:04:51 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1219
1220         * problem.c: Added new problem codes for some of the
1221                 superblock corruption checks, and for the pass header
1222                 messages.  ("Pass 1: xxxxx")
1223
1224         * util.c (print_resource_track): Now takes a description
1225                 argument. 
1226
1227 Mon Aug 25 10:23:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1228
1229         * super.c, unix.c, e2fsck.c: New files to separate out the
1230                 operating-specific operations out from e2fsck.c.  
1231                 e2fsck.c now contains the global e2fsck context management
1232                 routines, and super.c contains the "pass 0" initial
1233                 validation of the superblock and global block group
1234                 descriptors. 
1235
1236         * pass1.c, pass2.c, pass3.c, pass4.c, pass5.c, util.c: Eliminate
1237                 (nearly) all global variables and moved them to the e2fsck
1238                 context structure.
1239
1240         * problem.c, problem.h: Added new problem codes PR_0_SB_CORRUPT,
1241                 PR_0_FS_SIZE_WRONG, PR_0_NO_FRAGMENTS,
1242                 PR_0_BLOCKS_PER_GROUP, PR_0_FIRST_DATA_BLOCK
1243
1244 Thu Aug 14 10:55:21 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1245
1246         * message.c: Add compression for the word "Illegal"
1247
1248         * problem.c: Added entries for PR_2_BAD_CHAR_DEV and
1249                 PR_2_BAD_BLOCK_DEV
1250
1251 Wed Aug 13 09:55:57 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1252
1253         * pass1.c (pass1, check_device_inode), pass2.c
1254                 (process_bad_inode): Use a more stringent test for a valid
1255                 device.
1256
1257 Sun Aug 10 18:58:02 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1258
1259         * e2fsck.c (check_mount): Add stronger warning message about the
1260                 perils of running e2fsck on a mounted filesystem.
1261
1262 Tue Jun 17 01:33:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1263
1264         * Release of E2fsprogs 1.11
1265
1266 Thu Jun 12 00:25:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1267
1268         * pass1.c (mark_table_blocks): Mark the superblock and group
1269                 descriptor blocks first, so that any conflicts between
1270                 these and the bitmap or inode table blocks is noticed.
1271
1272         * problem.c: Fix message printed out when a block or inode bitmap
1273                 conflicts with other fs data, has the correct group number
1274                 in it.
1275
1276 Tue Jun 10 12:07:37 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1277
1278         * pass2.c (pass2): Check the error return from ext2fs_dblist_iterate.
1279
1280 Thu May  8 22:45:27 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1281
1282         * e2fsck.8.in: Fix minor typos and grammer oops found by Bill
1283                 Hawes (whawes@star.net).
1284
1285         * badblocks.c (read_bad_blocks_file): Pass the blocksize to the
1286                 bad blocks command so that all of the filesystem gets
1287                 tested in the case where the blocksize 2048 or 4096.
1288
1289 Thu Apr 24 12:16:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
1290
1291         * Release of E2fsprogs version 1.10
1292
1293 Mon Apr 21 22:43:08 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1294
1295         * pass1b.c (pass1b): While scanning for inodes, simply skip inodes
1296                 where ext2fs_get_next_inode returns the 
1297                 EXT2_ET_BAD_BLOCK_IN_INODE_TABLE error.
1298
1299 Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1300
1301         * Release of E2fsprogs version 1.09
1302
1303 Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1304
1305         * Release of E2fsprogs version 1.08
1306
1307 Thu Apr 10 13:51:16 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1308
1309         * pass1b.c (clone_file_block): If we clone a directory, we need to
1310                 update the dblist entry so that we check (and correct) the
1311                 right directory block.
1312
1313 Sun Apr  6 09:13:12 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1314
1315         * pass1.c (process_block): Don't clear blocks references to
1316                 filesystem metadata; let pass 1B handle this case.
1317
1318         * problem.c, problem.h: Add new problem, PR_1B_SHARE_METADATA.
1319
1320         * pass1b.c (pass1d): Deal with a block which is shared with
1321                 filesystem metadata.
1322
1323         * e2fsck.h: Make block_illegal_map be a global variable
1324
1325 Sat Apr  5 11:51:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1326
1327         * e2fsck.c, pass1.c (mark_table_blocks): Support the sparse_super
1328                 feature.
1329                 (get_backup_sb): New function which attempts to obtain the
1330                 correct backup superblock (if possible).
1331
1332 Fri Apr  4 10:46:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1333
1334         * e2fsck.c (main): Check the version of the library, and warn if
1335                 the library is out of date; this happens generally due to
1336                 users who manually install e2fsprogs.
1337
1338         * pass1.c (pass1_get_blocks): If the passed in inode number for
1339                 get_blocks isn't what we're expecting pass back
1340                 EXT2_ET_CALLBACK_NOT_HANDLED.
1341
1342 Wed Mar 12 13:32:05 1997  Theodore Y. Ts'o  <tytso@mit.edu>
1343
1344         * Release of E2fsprogs version 1.07
1345
1346 Tue Mar 11 10:31:47 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1347
1348         * icount.c: New file which implements an inode count abstraction.
1349                 This significantly reduces amount of memory needed to
1350                 check really large filesystems.
1351
1352         * pass1.c, pass2.c, pass3.c, pass4.c: Modified to use the icount
1353                 abstraction.
1354
1355 Fri Mar  7 08:28:55 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1356
1357         * dirinfo.c (dir_info_iter): New function which allows iteration
1358                 over the directories in the dir_info map.
1359
1360         * pass3.c (pass3, check_directory): Speed up pass 3 by iterating
1361                 over all directories in the dir_info structure, instead of
1362                 iterating all inodes looking for directories, and then
1363                 looking up the directories using get_dir_info().
1364
1365 Sat Feb  1 11:33:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1366
1367         * pass1.c (pass1, process_block): 
1368         * pass2.c (pass2): Use the ext2_dblist abstraction instead of
1369                 manual code to manage the directory block list information.
1370
1371         * pass1.c (check_blocks), pass1b.c (pass1b), pass2.c
1372                 (deallocate_inode): Call the ext2 library routine
1373                 ext2_inode_has_valid_blocks() instead of
1374                 inode_has_valid_blocks().
1375
1376         * swapfs.c (swap_inodes): Add check so that we don't try to call
1377                 swap_inode_blocks unless the inode has valid blocks.
1378                 (Otherwise a long fast symlink might cause
1379                 swap_inode_blocks to erroneously get called.)
1380
1381 Wed Jan 22 14:42:53 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1382
1383         * problem.c, problem.h: Added entries for PR_2_DOT_NULL_TERM and
1384                 PR_2_DOT_DOT_NULL_TERM.
1385
1386         * pass2.c (check_dot, check_dot_dot): Make sure the new . and
1387                 .. entries are null-terminated, since the 2.0 kernel
1388                 requires this (for no good reason).
1389
1390 Mon Jan 20 20:05:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1391
1392         * pass1.c (pass1): Set the EXT2_SF_SKIP_MISSING_ITABLE flag so
1393                 that we can recover from missing inode tables.
1394
1395         * dirinfo.c (get_dir_info): If there are no directories in the
1396                 dir_info abstraction, don't core dump (because dir_info is
1397                 NULL).
1398
1399         * e2fsck.c (main): Don't try using the backup superblocks if there
1400                 aren't any.
1401                 (check_super_block): If there are illegal inode table or
1402                 bitmaps, set the filesystem as being in error.
1403
1404 Wed Jan 15 11:32:01 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1405
1406         * pass2.c (check_dir_block): Added check to make sure that rec_len
1407                 is a a multiple of 4 (so that the directory entries are
1408                 4-byte aligned).
1409
1410 Sat Dec 28 12:16:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1411
1412         * Makefile.in (uninstall): Uninstall all programs in the PROGS
1413                 line.
1414                 (PROGS): Don't build and install the extend program by
1415                 default. 
1416         
1417
1418 Sat Dec  7 16:41:02 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1419
1420         * pass1.c (process_inodes): Make sure the stashed_ino variable is
1421                 saved and restored as well.
1422                 (pass1): For fast sym links, skip the check_blocks
1423                 processing step altogether.
1424
1425 Mon Dec  2 09:28:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1426
1427         * problem.c, message.c: New files, to completely refurbish how
1428                 filesystem problems are reported to the user.  The
1429                 diagnostic messages are now encoded out in an easily
1430                 customizable, extensible format.  The messages printed out
1431                 in preen mode are all on one line, and contain the device
1432                 name.
1433
1434 Fri Nov 29 20:26:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1435
1436         * swapfs.c (swap_inodes): When swapping a filesystem, ignore
1437                 deleted files.
1438
1439         * pass1.c (pass1): Ignore missing inode table errors during the
1440                 scan, and just skip past those inodes.
1441
1442         * pass3.c (check_root): Remove root_ino argument, and assume that
1443                 the root inode must be EXT2_ROOT_INO.  Move responsibility
1444                 of setting the parent of the root inode in the directory
1445                 inode structure to pass2().
1446
1447         * pass2.c (check_dir_block): Don't allow links to the root
1448                 directory.  
1449
1450         * dirinfo.c (add_dir_info): Remove last argument to add_dir_info,
1451                 since the inode is no longer used.
1452
1453 Tue Oct 15 00:06:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1454
1455         * e2fsck.c (main): If the superblock magic number is wrong, or the
1456                 block group fails a sanity check, then automatically
1457                 restart trying to use the backup superblocks.
1458
1459         * pass1.c (mark_table_blocks): Make the inode tables ahead of
1460                 everything else; in the case where a bitmap block overlays
1461                 the inode table, the inode table should take precedence.
1462
1463         * pass2.c (maybe_clear_entry): Make the deleted/unused error
1464                 message fit on one line, since the error can happen during
1465                 a preen pass.  (We eventually need to revamp the whole
1466                 e2fsck error reporting and prompting system, but that's a
1467                 job for another day.)
1468
1469 Mon Oct 14 22:29:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1470
1471         * e2fsck.c (main): Read in the list badblocks into fs->badblocks
1472                 for the benefit of the inode scan functions. 
1473
1474         * pass1.c (pass1): If ext2fs_get_next_inode() returns an error
1475                 indicating that an inode is in a bad block, mark that
1476                 inode as being used, as well as in the inode "bb" map.
1477
1478         * pass2.c (maybe_clear_entry): New function which generalizes the
1479                 error cases when a directory entry needs to be cleared.
1480                 (check_dir_block): If an inode is in the "bb" map, offer
1481                 to clear the directory entry, since the inode is in a bad
1482                 block.
1483
1484         * pass4.c (pass4): If an inode is marked as used, but is is marked
1485                 in the "bb" map, don't process it as a disconnected inode.
1486
1487 Tue Oct  8 02:02:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1488
1489         * Release of E2fsprogs version 1.06
1490
1491 Mon Oct  7 00:45:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1492
1493         * e2fsck.c (main): Print out the version number of the shared
1494                 library when using the -V option.
1495
1496         * swapfs.c (swap_filesys): Change EXT2_SWAP to EXT2_FLAG_SWAP for
1497                 consistency's sake.
1498
1499         * e2fsck.c (main): By setting EXT2_FLAG_MASTER_SB_ONLY, only write
1500                 out the backup superblocks when we know we have a valid
1501                 filesystem.
1502
1503 Tue Oct  1 22:00:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1504
1505         * util.c (preenhalt): Make it explicit on preenhalt that running
1506                 e2fsck manually means without the -a or -p flag.
1507
1508 Fri Sep 27 14:41:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1509
1510         * pass1.c (pass1): Add support for the EXT2_BOOT_LOADER inode.
1511                 (Linux/FT actually sets the mode bits, so we have to
1512                 handle it specially.)
1513
1514         * e2fsck.c (check_if_skip): Print a message if the filesystem is
1515                 just dirty, so that the user knows that it's about to be
1516                 checked (since this will take a while).
1517
1518 Mon Sep 16 17:00:01 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1519
1520         * pass4.c: If a disconnected inode is zero-length, prompt to
1521                 delete it instead of connecting it to lost+found.
1522
1523 Thu Sep 12 15:23:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1524
1525         * Release of E2fsprogs version 1.05
1526
1527 Fri Aug 30 20:24:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1528
1529         * pass4.c (pass4): If the user refuses to connect an unattached
1530                 inode to lost+found, don't try to set i_links_count.  This
1531                 is bad, since if the user says yes, the inode will be
1532                 marked as unused, which is not necessarily the right
1533                 thing, especially since the rest of the cleanup doesn't
1534                 happen here.
1535
1536         * pass2.c (deallocate_inode): Set inode_link_info[ino] when
1537                 dellocating an inode.  (Not strictly necessary, but...)
1538
1539         * pass4.c (pass4): Add "bonehead" explanation to the "programming
1540                 error" message.
1541
1542 Tue Aug 27 11:26:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1543
1544         * e2fsck.c (PRS,main): Added new options -s and -S.  -s will
1545                 byte-swap the filesystem so that it is normalized.  -S
1546                 will byte-swap the filesystem regardless of its current
1547                 byte-order.
1548
1549         * swapfs.c: New file, which will byte-swap a filesystem.
1550
1551 Tue Aug 20 09:41:37 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1552
1553         * pass1.c (pass1): Change handling on files with non-zero dtime
1554                 and non-zero i_link_count; before we treated them as
1555                 deleted file per botched ext2 0.3c kernel behavior.  We
1556                 now clear dtime instead.
1557
1558 Mon Aug 19 23:33:57 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1559
1560         * e2fsck.c (main): If e2fsck sets the clean bit, even if
1561                 nothing else is changed, make sure FSCK_NONDESTRUCT is
1562                 set (since after all having the filesystem set to
1563                 invalid is an error.  :-)
1564
1565 Fri Aug  9 10:25:13 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1566
1567         * pass1.c (process_block): Make sure that meta data doesn't get
1568                 accidentally set in the dir_blocks array (which could
1569                 happen in some error condtions).
1570         
1571         * pass1.c (pass1): 
1572         * pass2.c (process_bad_inode): Check for fragments in a
1573                 OS-independent fashion.
1574
1575 Thu Aug  8 15:20:54 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1576
1577         * e2fsck.c (check_if_skip): Close the filesystem when skipping the
1578                 cleanup for the filesystem.
1579
1580 Mon Jul 22 22:03:28 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1581
1582         * e2fsck.c: Improve corrupt_msg, so that it's less confusing.
1583
1584 Thu May 16 11:12:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1585
1586         * Release of E2fsprogs version 1.04
1587
1588 Wed May 15 21:41:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
1589
1590         * e2fsck.c (relocate_hint): Issue a hint that the user may wish to
1591                 try "e2fsck -b 8193" before allowing e2fsck to relocate
1592                 inode table blocks.
1593
1594         * Makefile.in (e2fsck): Build e2fsck statically or dynamically
1595                 depending on the option to configure.  Added targets for
1596                 e2fsck.static and e2fsck.shared for people who want to
1597                 build a static or shared variant manually.
1598
1599 Wed Mar 27 00:33:40 1996    <tytso@rsts-11.mit.edu>
1600
1601         * Release of E2fsprogs version 1.03
1602
1603 Tue Mar 26 12:03:42 1996    <tytso@rsts-11.mit.edu>
1604
1605         * e2fsck.c (show_stats): Don't use floating point to display
1606                 percentage of non-contiguous files, as different libc
1607                 handle result truncation differently, and this causes the
1608                 test suite to bomb out depending on which libc you are
1609                 using.
1610
1611         * util.c (allocate_memory): Fix error message to omit extraneous
1612                 %%s.
1613
1614 Tue Mar  5 03:50:40 1996    <tytso@rsts-11.mit.edu>
1615
1616         * pass4.c (pass4): 
1617         * pass2.c (check_dir_block): 
1618         * pass1.c (pass1): Add support for dynamic first inode revision.
1619
1620 Wed Feb 14 16:27:30 1996    <tytso@rsts-11.mit.edu>
1621
1622         * pass3.c (check_root): Fix spelling typo
1623
1624 Mon Feb  5 22:30:30 1996    <tytso@rsts-11.mit.edu>
1625
1626         * e2fsck.c (check_super_block): If the superblock fails certain
1627                 internal consistency checks, exit with a fatal error after
1628                 printing the "superblock is corrupt message".
1629
1630 Wed Jan 31 11:06:08 1996    <tytso@rsts-11.mit.edu>
1631
1632         * Release of E2fsprogs version 1.02
1633
1634 Wed Dec 15 21:24:26 1996    <tytso@rsts-11.mit.edu>
1635
1636         * pass1.c (process_block): Check to see if a file is "fragmented".
1637                 i.e., non-contiguous.  Note that any file which is larger
1638                 than the block group is guaranteed to be non-contiguous.
1639                 We may want to use a different hueristic for deciding
1640                 whether or not a file is "fragmented".
1641
1642         * e2fsck.c (show_stats): Print statistics of how many
1643                 non-contiguous files are on the system.
1644
1645 Fri Dec 15 19:19:47 1995    <tytso@rsts-11.mit.edu>
1646
1647         * badblocks.c (read_bad_blocks_file, test_disk): Fold
1648                 functionality of test_disk() (which runs badblocks) into
1649                 read_bad_blocks_file(); test_disk() now calls
1650                 read_bad_blocks_file() with a NULL bad_blocks_file
1651                 argument.
1652
1653 Mon Nov 20 18:30:10 1995    <tytso@rsts-11.mit.edu>
1654
1655         * e2fsck.c (check_mount): Use #if defined(__linux__) instead of
1656                 #if defined(linux).  The latter won't work if we're
1657                 compiling -ansi.
1658
1659 Mon Oct 30 20:31:17 1995    <tytso@rsts-11.mit.edu>
1660
1661         * e2fsck.c (check_mount): For Linux systems, the check to see if
1662                 the root is mounted read-only has to be done for all
1663                 filesystems, not just for the root filesystem, due to the
1664                 way that some /etc/rc scripts are set up.
1665
1666 Thu Oct 26 12:05:30 1995    <tytso@rsts-11.mit.edu>
1667
1668         * Makefile.in (install): Strip programs when they are installed.
1669                 (e2fsck): Build e2fsck statically.
1670
1671 Wed Oct 25 21:18:16 1995    <tytso@rsts-11.mit.edu>
1672
1673         * util.c (preenhalt): Preenhalt now takes an argument, which is an
1674                 ext2fs_filsys; this allows it to set the EXT2_ERROR_FS
1675                 flag in the superblock in cases where preenhalt is called.
1676                 All calls to preenhalt() were changed to either
1677                 preenhalt(fs) or preenhalt(NULL) in a few cases where the
1678                 fs pointer was not available.  (Most notable, for block
1679                 read/write errors.)
1680
1681 Mon Sep  4 21:41:03 1995  Remy Card  <card@bbj>
1682
1683         * ehandler.c:
1684           util.c: Include <sys/time.h> before <sys/resource.h>.  BSD needs it.
1685
1686 Mon Sep  4 10:14:49 1995    <tytso@rsts-11.mit.edu>
1687
1688         * e2fsck.c (show_stats): Show statistics about how many inodes
1689                 have indirect, doubly indirect, and triply indirect
1690                 blocks.  Allow up to 8 digits for statistics, instead of
1691                 merely 6, so things look pretty for large filesystems.
1692
1693         * pass1.c (pass1): Keep statistics about indirect, doubly
1694                 indirect, and triply indirect blocks.
1695
1696         * pass1.c (unwind_pass1): Clear the above statistics when unwinding
1697                 pass 1.
1698
1699 Fri Aug 18 15:17:10 1995  Theodore Y. Ts'o  <tytso@dcl>
1700
1701         * util.c, ehandler.c: Move #include of <sys/resource.h> after
1702                 #include of "e2fsck.h", since sys/resource.h may depend on
1703                 sys/time.h, which is #included in e2fsck.h.
1704
1705 Thu Aug 17 22:33:37 1995    <tytso@rsts-11.mit.edu>
1706
1707         * e2fsck.c (check_mount):  Use the new ext2fs_check_if_mounted()
1708                 function to determine if the device is mounted.
1709
1710         * e2fsck.c (main):  Add better error messages if ext2fs_open()
1711                 fails. 
1712
1713 Wed Aug 16 16:25:02 1995    <tytso@rsts-11.mit.edu>
1714
1715         * pass1.c (check_blocks): If we're clearing a directory, clear
1716                 pb.is_dir so we don't do the following check of making
1717                 sure the directory size matches; this is pointless, since
1718                 we've already cleared the inode.
1719
1720 Fri Aug 11 09:08:54 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
1721
1722         * pass1.c (bad_primary_block): New function, called by
1723                 process_bad_block, which explains the facts of life to the
1724                 user when a block in the primary superblock or primary
1725                 group descriptors is bad.
1726
1727         * pass2.c (check_dot): Handle the case where the first directory
1728                 entry is used, but not ".".
1729
1730         * pass2.c (check_dotdot): Handle the case where the second directory
1731                 entry is used, but is not "..".
1732
1733 Thu Aug 10 10:05:10 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
1734
1735         * e2fsck.c (check_super_block): Get the size of the physical
1736                 device and if it is smaller than the reported size of the
1737                 filesystem, report an error.
1738
1739 Sat Aug 12 03:39:18 1995  Remy Card  <card@bbj>
1740
1741         * e2fsck.c (check_if_skip): Print the number of allocated files and
1742                 blocks on clean filesystems.
1743
1744 Fri Aug 11 14:15:36 1995  Remy Card  <card@bbj>
1745
1746         * e2fsck.8: Updated date and version number.
1747
1748 Thu Aug 10 14:26:01 1995  Remy Card  <card@bbj>
1749
1750         * pass1.c (check_blocks): Check that directory size matches *exactly*
1751                 the count of allocated blocks.
1752
1753 Wed Aug  9 21:21:24 1995  Theodore Y. Ts'o  <tytso@dcl>
1754
1755         * pass1b.c (pass1d): Free the shared[] array when we're done with
1756                 it to avoid a memory leak.
1757
1758         * pass1.c (unwind_pass1): Use ext2fs_free_block_bitmap to free the
1759                 block_dup_map.
1760
1761         * pass2.c (process_bad_inode): When clearing the inode, make sure
1762                 the pathname is freed, to prevent a memory leak.
1763
1764         * pass5.c (check_inode_bitmaps): Free free_array and dir_array
1765                 when we're finished with them.
1766                 (check_block_bitmaps): Free free_array when we're finished
1767                 with them.
1768
1769         * Makefile.in (e2fsck, flushb): Use $(LD) instead of $(CC) when
1770                 linking the executable.
1771
1772         * pass2.c (process_bad_inode): Even on OS's that don't support the
1773                 fragment fields, make sure the Linux equivalent fields are
1774                 set to zero.  If an OS wants to reuse these fields, which
1775                 is probably a bad idea (although we may get desperate in
1776                 the future) this code will have to be changed.
1777
1778         * pass1.c (dir_block_cmp): If the block numbers are equal, compare
1779                 on the inode field, and then blockcnt field.  This is just
1780                 to keep the ordering of dir_blocks the same on all
1781                 platforms when there are more than on missing directory
1782                 blocks, which are indicated directories with holes, which
1783                 are indicated with the block number being set to zero.
1784
1785 Sun Aug  6 15:40:58 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
1786
1787         * pass1.c (check_blocks, process_block): check_blocks() modified
1788                 to call the ext2fs_block_iterate() with BLOCK_FLAG_HOLE if
1789                 the inode is a directory.  process_block() now checks to
1790                 see if a directory has a "hole", or missing block.  If so,
1791                 this fact is recorded in the directory block list so that
1792                 the problem can be resolved in pass #2.
1793
1794         * pass2.c (allocate_dir_block): Added allocate_dir_block() to
1795                 allocate new blocks for directories with "holes".  Called
1796                 out of check_dir_block if a block in the directory block
1797                 list is zero.
1798
1799         * pass3.c (get_lost_and_found): Move location of free(block) to
1800                 prevent possible memory leak.
1801
1802 Sat Aug  5 12:42:22 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
1803
1804         * pass2.c (check_dir_block): Use a automatic, fixed-saize array
1805                 instead of alloca() --- alloca is not portable!  Check to
1806                 make sure the filename is not longer than EXT2_NAME_LEN,
1807                 and offer to fix it by truncating it, since it should
1808                 never happen.
1809
1810         * e2fsck.c (PRS): Use malloc() instead of alloca() --- alloca() is
1811                 not portable!!  In any case putenv() in some systems must
1812                 take a static character array or malloc()'ed memory;
1813                 passing memory allocated using alloca() to putenv() is not
1814                 advisable.
1815
1816         * pass2.c (check_dot, check_dotdot): Use malloc() instead of
1817                 alloca() --- alloca() is not portable!!!
1818
1819 Tue Jul 18 20:04:02 1995    <tytso@rsx-11.mit.edu>
1820
1821         * pass1b.c (pass1c): 
1822         * pass3.c (check_root, get_lost_and_found): 
1823         * pass2.c (check_dir_block): Use ext2fs_{read,write}_dir_block
1824                 to read/write the directory block.
1825
1826 Mon Jul 17 04:00:56 1995    <tytso@rsx-11.mit.edu>
1827
1828         * util.c (ask_yn): Apply patch supplied by Peter A. Zaitcev to
1829                 make sure VMIN and VTIME are set correct.
1830
1831 Fri Jul 14 19:26:29 1995    <tytso@rsx-11.mit.edu>
1832
1833         * pass1.c (mark_block_used): Change to be an inline function.
1834                 Assume that the block validity checks are already done,
1835                 and use the fast variant of the bitmap functions.
1836
1837 Thu Jul 13 08:10:55 1995    <tytso@rsx-11.mit.edu>
1838
1839         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Check the
1840                 bounds of the bitmaps in advance, and then use the fast
1841                 variant of e2fs_test_{block,inode}_bitmap.
1842
1843         * pass1.c (mark_block_used): Use ext2_fast_mark_block_bitmap since
1844                 the bounds checking has already been done earlier.
1845
1846 Wed Jul 12 02:22:46 1995    <tytso@rsx-11.mit.edu>
1847
1848         * pass1.c (pass1): Allocate and free the block_illegal_map, which
1849                 is used for shortcut processing in process_block.
1850                 (mark_table_blocks): Initialize block_illegal_map with the
1851                 filesystem blocks.
1852                 (describe_illegal_block): New helper function that
1853                 describes why a block is illegal.
1854                 (process_block): Use block_illegal_map as a shortcut
1855                 to determine whether a block is bad.  Use
1856                 describe_illegal_block to print out why the block is illegal.
1857
1858 Mon Jun 12 19:11:06 1995  Theodore Y. Ts'o  (tytso@dcl)
1859
1860         * flushb.c: Don't include <linux/fs.h> if it doesn't exist.
1861
1862         * scantest.c: Don't include <linux/fs.h>, <getopt.h>, or
1863                 <mntent.h> if they don't exist.  (Mostly so that "make
1864                 depend" works.)
1865
1866         * pass1.c, pass1b.c, pass3.c, badblocks.c: Include <errno.h> (if
1867                 it exists).
1868
1869         * e2fsck.c, scantest.c: Don't include <getopt.h> if it doesn't
1870                 exist. 
1871
1872 Mon Jun 12 08:37:49 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
1873
1874         * pass2.c (process_bad_inode, check_for_zero_long,
1875                 check_for_zero_char):  Change long to u32, and char to u8.
1876
1877 Sun Jun 11 15:05:57 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
1878
1879         * util.c (inode_has_valid_blocks): 
1880         * pass2.c (process_bad_inode): 
1881         * pass1.c (pass1, check_blocks, pass1_check_directory): Use
1882                 LINUX_S_IS* instead of S_IS*.
1883
1884         * e2fsck.h: Don't #include <sys/stat.h>
1885
1886         * flushb.c (main): Add #ifdef BLKFLSBUF around ioctl.  (Although
1887                 this program is pretty much useless if BLKFLSBUF isn't
1888                 supported.)
1889
1890         * e2fsck.c, badblocks.c: Add #include <errno.h>, since errno is
1891                 used.
1892
1893 Thu Jun  8 12:31:19 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>
1894
1895         * pass2.c (check_dot, check_dotdot, check_dir_block): Use alloca
1896         to allocate space for file names instead of using fixed size buffers.
1897         (process_bad_inode): Only check inode frag fields if
1898         HAVE_EXT2_FRAGS is defined (by configure).
1899         * pass1.c (pass1): Only check the inode frag fields if
1900         HAVE_EXT2_FRAGS is defined (by configure).
1901
1902         * e2fsck.c (check_mount): Only check for a mounted filesystem if
1903         HAVE_MNTENT_H is defined (by configure).
1904         (PRS): Use alloca to allocate the new path string, instead of
1905         having a fixed size buffer (which was the wrong size anyway).
1906         (PRS): Only support the -F (flush) option if the BLKFLSBUF ioctl
1907         is defined.
1908
1909         * e2fsck.h: Only include <linux/fs.h> if HAVE_LINUX_FS_H is
1910         defined (by configure).
1911
1912         * Makefile.in: Rewritten to conform to GNU coding standards and
1913         support separate compilation directories.
1914
1915 Thu Apr  6 15:04:36 1995  Remy Card  <card@bbj.ibp.fr>
1916
1917         * pass1.c (pass1): Test the mode in reserved inodes (must be zero).
1918
1919 Sat Mar 11 13:12:16 1995  Theodore Y. Ts'o  <tytso@localhost>
1920
1921         * pass1.c (unwind_pass1): Clear the file type statistics counter
1922                 when pass 1 needs to be restarted from scratch.
1923
1924         * pass1.c (handle_fs_bad_blocks): Fix bug where bitmap blocks were
1925                 being reallocated to blocks in the next block group,
1926                 instead of the current block grup.
1927
1928         * pass1.c (pass1, check_blocks): Set inode_link_info[ino] whenever
1929                 inode.i_links_count is set.
1930
1931 Tue Feb 14 01:38:04 1995  Theodore Y. Ts'o  (tytso@rt-11)
1932
1933         * pass1.c (process_block): Add checks for if the block is
1934                 trepassing on a superblock or group descriptor table.
1935
1936 Sat Dec 31 00:52:11 1994    <tytso@rsx-11.mit.edu>
1937
1938         * main.c (corrupt_msg): Extend the message which is printed out
1939                 when the superblock is corrupt, to include the suggestion
1940                 of using the -b option to specify an alternate superblock.
1941
1942 Thu Nov 24 09:29:58 1994  Theodore Y. Ts'o  (tytso@rt-11)
1943
1944         * badblocks.c (read_bad_blocks_file): If we are adding or
1945                 replacing bad blocks in the bad blocks inode, sanity check
1946                 the bad block inode first, and clear out any illegal blocks.
1947
1948         * pass2.c (check_name): Don't bomb out if the attempt to get the
1949                 pathname of the containing directory returns an error; the
1950                 directory may be too badly damaged to expect that
1951                 ext2fs_get_pathname will always succeed.  Use "???" if the
1952                 pathname can't be obtained (it's only for a printf to the
1953                 user anyway).
1954
1955                 The name of the containing directory and the bad filename
1956                 were incorrectly interchanged in the user message.  Fixed.
1957
1958         * pass2.c (check_name, check_dir_block): Use a common static
1959                 string for the unknown pathname.
1960
1961 Mon Nov  7 22:30:54 1994  Remy Card  <card@bbj>
1962
1963         * Fixed lots of printf formats to make sure that block and inode
1964         numbers are printed as unsigned integers.
1965
1966 Mon Oct 24 14:10:46 1994    (tytso@rsx-11)
1967
1968         * pass5.c (check_block_end): Fix calculation of how the last block
1969                 in the block bitmap should be calculated.
1970
1971 Wed Sep  7 10:01:13 1994    (tytso@rsx-11)
1972
1973         * pass1b.c (pass1_dupblocks): Fix declaration of dup_inode_map to
1974                 be an ext2fs_inode_bitmap, and free it properly.
1975
1976         * e2fsck.h
1977         * e2fsck.c (main): Folded in Remy Card's changes to add a revision
1978         level to the superblock.
1979
1980 Wed Aug 17 22:00:20 1994  Remy Card  (card@bbj)
1981
1982         * e2fsck.c (usage): Fixed bogus usage message.
1983
1984 Wed Aug 17 11:21:45 1994  Theodore Y. Ts'o  (tytso@rt-11)
1985
1986         * pass1.c (process_bad_block): Fixed bug so that blocks in the
1987         backup superblocks and group descriptors are handled gracefully.
1988