Whamcloud - gitweb
Minor correction to e2fsck.conf man page
[tools/e2fsprogs.git] / e2fsck / ChangeLog
1 2006-10-02  Theodore Tso  <tytso@mit.edu>
2
3         * e2fsck.conf.5.in: Minor correction to man page.
4                 (Addresses Debian bug #369761)
5
6 2006-10-01  Theodore Tso  <tytso@mit.edu>
7
8         * Makefile.in (DEPLIBBLKID): Use DEPLIBBLKID not LIBBLKID to
9                 define the dependencies used by the blkid library.
10
11 2006-08-30  Eric Sandeen <esandeen@redhat.com>
12
13         * pass1.c (handle_bad_fs_blocks): use blk_t, not int for first_block.
14
15 2006-08-30  Eric Sandeen <esandeen@redhat.com>
16
17         * unix.c (show_stats): use ext2_ino_t for inode containers.
18
19 2006-08-30  Eric Sandeen <esandeen@redhat.com>
20
21         * pass1.c (new_table_block, handle_fs_bad_blocks):
22         * super.c (check_super_block):
23                 Use new inlines to calculate group first & last blocks.
24
25 2006-08-30  Eric Sandeen <esandeen@redhat.com>
26
27         * e2fsck.h (e2fsck): Use unsigned types for filesystem counters.
28         * emptydir.c (add_empty_dirblock):
29         * iscan.c (main):
30         * unix.c (show_stats, check_if_skip): Fix printf formats.
31
32 2006-08-30  Eric Sandeen <esandeen@redhat.com>
33
34         * pass1.c (handle_fs_bad_blocks): Remove unused variables.
35
36 2006-08-30  Eric Sandeen <esandeen@redhat.com>
37
38         * pass1b.c (check_if_fs_block): Change block group loop to use 
39                 a common pattern of first_block/last_block, etc.
40         
41         * super.c (check_super_block): Avoid overflows when iterating over
42                 group descriptors on very large filesystems
43
44 2006-08-30  Theodore Tso  <tytso@mit.edu>
45
46         * pass5.c (check_inode_bitmaps, check_inode_end, check_block_end):
47         * pass4.c (e2fsck_pass4): Fix potential overflow problems when the
48                 number of blocks is close to 2**31.
49
50 2006-08-29  Theodore Tso  <tytso@mit.edu>
51
52         * super.c (release_inode_blocks): Fix silly spelling error.
53                 (Addresses SourceForge Bug: #1531372)
54
55 2006-05-29  Theodore Tso  <tytso@mit.edu>
56
57         * pass1b.c: Add missing semicolon when HAVE_INTPTR_T is not defined
58
59 2006-05-22  Theodore Tso  <tytso@mit.edu>
60
61         * e2fsck.8.in: Fixed spelling mistake.  (Addresses Debian Bug:
62                 #368392)
63
64 2006-05-14  Theodore Tso  <tytso@mit.edu>
65
66         * recovery.c (do_one_pass), journal.c (e2fsck_get_journal): Add
67                 missing brelse() calls to avoid memory leaks in error
68                 paths.  (Thanks to Michael C. Thompson for pointing these
69                 out; they were originally found using Coverity.)
70
71 2006-05-13  Theodore Tso  <tytso@mit.edu>
72
73         * badblocks.c (read_bad_blocks_file): Pass the private option -X
74                 to badblocks so that e2fsck -cc will work correctly.
75
76 2006-05-08  Theodore Tso  <tytso@mit.edu>
77
78         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Add support
79                 for the lazy_bg feature; if the block group does not have
80                 an initialized block or inode bitmaps/table, emulate what
81                 the allocation bitmap would look like if no blocks or
82                 inodes have been allocated.
83
84 2006-03-27  Theodore Ts'o  <tytso@mit.edu>
85
86         * e2fsck.8.in: Add badblocks(8) to the See Also section.
87                 (Addresses Debian Bug: #347295)
88
89         * Makefile.in, e2fsck.conf.5.in: Add man page documenting the
90                 configuration file /etc/e2fsck.conf.
91
92 2006-03-22  Theodore Ts'o  <tytso@mit.edu>
93
94         * profile.c (profile_update_file, profile_parse_file, parse_line,
95                 parse_std_line): Integrate profile_std_line() into
96                 parse_line(), and profile_parse_file() into
97                 profile_update_file() to make the code tighter.
98
99 2006-03-18  Theodore Ts'o  <tytso@mit.edu>
100
101         * unix.c (show_stats): Use blk_t instead of int when referring to
102                 block numbers.
103
104         * emptydir.c, message.c, pass1b.c, pass2.c, recovery.c, unix.c:
105                 Change printf statements to use %u instead of %d when
106                 printing block numbers.
107
108         * unix.c (main): If the filesystem is not mounted, open the
109                 filesystem in exclusive mode (to prevent 2.6 kernels from
110                 mounting the filesystem while it is being checked).
111
112 2006-03-10  Theodore Ts'o  <tytso@mit.edu>
113
114         * e2fsck.h, journal.c (e2fsck_fix_ext3_journal_hint), 
115                 problem.c (PR_0_EXTERNAL_JOURNAL_HINT), 
116                 problem.h (PR_0_EXTERNAL_JOURNAL_HINT), super.c: Check
117                 to see if the superblock hint for the external journal
118                 needs to be updated, and if so, offer to update it.
119                 (Addresses Debian Bug: #355644)
120
121 2006-01-29  Theodore Ts'o  <tytso@mit.edu>
122
123         * unix.c (check_if_skip): When skipping a check due to being on
124                 battery, print an explanatory message to this effect.  Add
125                 an e2fsck configuration option defer_check_on_battery
126                 which defaults to true.  If the configuration option is
127                 turned off, then e2fsck will not attempt to defer
128                 filesystem checks when the system is running on battery.
129                 (Addresses Debain Bug: #350306)
130
131 2006-01-06  Theodore Ts'o  <tytso@mit.edu>
132
133         * profile.c (parse_std_line, dump_profile): Add support for
134                 quoted strings in tag and section names.  Changed
135                 top-level section name parsing to ignore leading and
136                 trailing whitespace.
137
138 2006-01-05  Theodore Ts'o  <tytso@mit.edu>
139
140         * profile.c (profile_init): If a directory is passed to
141                 profile_init, then read all files which match [0-9a-zA-Z]*
142                 in sort order.  This allows handling of /etc/foo/conf.d
143                 style directories.
144
145 2006-01-04  Theodore Ts'o  <tytso@mit.edu>
146
147         * profile.c: Eliminate the prf_data_t data structure and fold it
148                 back into prof_file_t.  Eschew needless complexity!
149
150         * profile.c: Change syntax accepted by the profile parser.  The
151                 value of profile relations must not contain spaces unless
152                 it is quoted; otherwise the parser will throw an error.
153                 Comments are allowed anywhere and can be started with
154                 either a ';' or a '#' character.  The only place where
155                 comments will not be intepreted as beginning a comment is
156                 in a quoted string.
157
158         * profile.c (profile_parse_file, profile_set_syntax_err_cb): Add
159                 support for a syntax error callback to allow better error
160                 reporting to the user.
161
162         * e2fsck(PRS): Set a profile syntax error callback so we can
163                 report errors in /etc/e2fsck.conf.
164
165 2006-01-02  Theodore Ts'o  <tytso@mit.edu>
166
167         * profile.c, profile_helpers.c, profile_helpers.h: Boil down and
168                 simplify profile.c, and move extra functionality that's
169                 not needed into profile_helpers.c
170
171 2006-01-01  Theodore Ts'o  <tytso@mit.edu>
172
173         * profile.c: Fix #include of com_err.h so that it isn't required
174                 that the com_err development environment be installed.
175                 (Addresses Debian Bug: #345519)
176
177 2005-12-31  Theodore Ts'o  <tytso@mit.edu>
178
179         * problem.c (fix_problem), problemP.h: Add the ability for the
180                 e2fsck configuration file to override the behaviour of
181                 e2fsck when a particular filesystem problem is
182                 encountered.  This allows reconnecting an inode to
183                 lost+found to not stop the boot sequence, if a system
184                 administrator really badly wants this behaviour for some
185                 specialized reason, for example.
186
187         * unix.c (main): If the e2fsck configuration file sets the
188                 allow_cancellation option to be true, then if the
189                 filesystem does not have any known problems, and was known
190                 to be cleanly unmounted, then let e2fsck exit with a
191                 status code of 0 instead of 32 (FSCK_CANCELED) so that the
192                 bootup scripts will continue without stopping the boot.
193                 (Addresses Debian Bug: #150295)
194
195 2005-12-30  Theodore Ts'o  <tytso@mit.edu>
196
197         * e2fsck.c (e2fsck_free_context), unix.c (PRS), e2fsck.h: Use
198                 the profile library to read in the /etc/e2fsck.conf file
199                 at startup.     
200
201         * profile.c, profile.h, prof_err.et: Add the profile library code
202                 to e2fsck.  The profile library was originally written by
203                 Theodore Ts'o in 1995 for use in the MIT Kerberos v5
204                 library.  It has been modified/enhanced/bug-fixed over
205                 time by other members of the MIT Kerberos team.  This
206                 version was originally taken from the Kerberos v5
207                 distribution, version 1.4.2, and radically simplified for
208                 use in e2fsprogs.  (Support for locking for multi-threaded
209                 operations, being able to modify and update the
210                 configuration file programmatically, and Mac/Windows
211                 portability have been removed.  It has been folded into a
212                 single C source file to make it easier to fold into an
213                 application program.)
214
215         * argv_parse.c, argv_parse.h: Added auxiliary programs used only
216                 for building the profile test program.
217
218 2005-12-18  Theodore Ts'o  <tytso@mit.edu>
219
220         * problem.c (PR_0_FUTURE_SB_LAST_MOUNT,
221                 PR_0_FUTURE_SB_LAST_WRITE): Make these problems things
222                 which can be fixd by preen, since Debian's boot sequence
223                 bogusly doesn't set the time correctly until potentially
224                 very late in the bootup process, and this can cause false
225                 positives that will cause users' systems to fail to
226                 booting.  (Addresses Debian Bugs #343662 and #343645)
227
228 2005-12-09  Theodore Ts'o  <tytso@mit.edu>
229
230         * e2fsck.8.in: Clarify that e2fsck -c does a read-only scan of the
231                 device.
232
233         * unix.c (PRS): Fix typo in error message; thanks to Solar
234                 Designer for pointing out the missing preposition.
235                 (check_mount): Don't let the user run e2fsck -ccn on the
236                 root partition, without warning that he or she might
237                 be doing something Really Stupid.
238
239         * e2fsck.8.in: Clarify description of differences between the -p,
240                 -n, and -y options.
241
242 2005-09-24  Theodore Ts'o  <tytso@mit.edu>
243
244         * super.c (check_super_block), problem.c, problem.h: Detect if the
245                 superblock's last mount field or last write field is in
246                 the future, and offer to fix if so.  (Addresses Debian Bug
247                 #327580)
248
249 2005-07-25  Theodore Ts'o  <tytso@mit.edu>
250
251         * unix.c (main): Fix a use-after-free bug of the e2fsck context
252                 structure at the very end of the e2fsck run.
253
254         * pass1.c (pass1_write_inode): Fix false positive from valgrind;
255                 don't do a needless structure copy via an assignment when
256                 it is a no-op.
257
258 2005-07-04  Theodore Ts'o  <tytso@mit.edu>
259
260         * problem.c: Remove period from the Pass 1C header, to be
261                 consistent with the other Pass headers.
262
263         * pass2.c (e2fsck_process_bad_inode): Fixed bug which could cause
264                 e2fsck to core dump if a disconnected inode contained an
265                 extended attribute.  This was actually caused by two bugs.
266                 The first bug is that if the inode has been fully fixed
267                 up, the code will attempt to remove the inode from the
268                 inode_bad_map without checking to see if this bitmap is
269                 present.  Since it is cleared at the end of pass 2, if
270                 e2fsck_process_bad_inode is called in pass 4 (as it is for
271                 disconnected inodes), this would result in a core dump.
272                 This bug was mostly hidden by a second bug, which caused
273                 e2fsck_process_bad_inode() to consider all inodes without
274                 an extended attribute to be not fixed.  (Addresses Debian
275                 Bug: #316736)
276
277 2006-06-30  Theodore Ts'o  <tytso@mit.edu>
278
279         * Release of E2fsprogs 1.38
280
281 2005-06-20  Theodore Ts'o  <tytso@mit.edu>
282
283         * unix.c (usage, parse_extended_opts): Clean up messages printed
284                 by e2fsck for grammar and consistency.
285
286 2005-06-19  Theodore Ts'o  <tytso@mit.edu>
287
288         * e2fsck.8.in: Make it clear that the -c, -l, and -L options are
289                 never safe to use on a mounted filesystem, and in general,
290                 running e2fsck on mounted filesystems is a bad idea.
291
292 2005-06-16  Theodore Ts'o  <tytso@mit.edu>
293
294         * message.c: Add @m (multiply-claimed) and @n (invalid)
295                 expansions.
296
297         * problem.c: Clean up the problem messages displayed by e2fsck,
298                 mostly based on suggestions from Benno Schulenberg.
299
300 2005-06-05  Theodore Ts'o  <tytso@mit.edu>
301
302         * e2fsck.8.in: Add a request to the REPORTING BUGS section of the
303                 man page to make sure that e2fsck's messages are printed
304                 in English, and to send a raw e2image filesystem dump if
305                 possible.
306
307 2005-05-05  Theodore Ts'o  <tytso@mit.edu>
308
309         * badblocks.c (check_bb_inode_blocks): Clean up warning printf.
310                 Thanks to Benno Schulenberg for the patch.  (Addresses
311                 Sourceforge Bug: #1189803)
312
313 2005-04-16  Theodore Ts'o  <tytso@mit.edu>
314
315         * e2fsck.8.in: Fix spelling mistakes in man pages.  (Addresses
316                 Debian Bugs: #304593)
317
318 2005-04-14  Theodore Ts'o  <tytso@mit.edu>
319
320         * pass1b.c (pass1d): Don't offer to clone or delete the resize
321                 inode; it's not allowed!
322
323         * e2fsck.c, e2fsck.h, journal.c, pass1.c, pass1b.c, pass2.c,
324                 pass3.c, pass4.c, super.c, unix.c: Use a centrally stored
325                 current time for "now" which can be overridden using the
326                 E2FSCK_TIME environment variable, for better
327                 reproducibility for regression tests.
328
329 2005-04-06  Theodore Ts'o  <tytso@mit.edu>
330
331         * pass1.c (e2fsck_pass1): If the superblock last mount time (not
332                 just the last write time) looks insane, then assume that
333                 we can't do the LOW_DTIME checks.
334
335 2005-03-21  Theodore Ts'o  <tytso@mit.edu>
336
337         * Release of E2fsprogs 1.37
338
339 2005-03-21  Theodore Ts'o  <tytso@mit.edu>
340
341         * message.c, pass1.c, problem.c, problem.h, util.c: Integrate code
342                 from Alex Thomas at Clusterfs to check extended attributes
343                 stored in inodes.
344
345         * message.c (expand_inode_expression): Add support for %IS in
346                 problem descriptions.  Note that this only works if the
347                 problem context has a pointer to a large inode!
348
349         * problem.h, problem.c (PR_1_EXTRA_ISIZE, PR_1_ATTR_NAME_LEN,
350                 PR_1_ATTR_VALUE_OFFSET, PR_1_ATTR_VALUE_BLOCK,
351                 PR_1_ATTR_VALUE_SIZE, PR_1_ATTR_HASH): Add new problem
352                 codes.
353
354         * util.c (e2fsck_write_inode_full): New function.
355
356         * pass1.c (check_ea_in_inode, check_inode_extra_space): New
357                 function which tests the validity of extended attributes
358                 stored in a large inode.
359                 (e2fsck_pass1): Call ext2fs_get_next_inode_full() instead
360                 of get_next_inode(), and use an allocated inode which is
361                 big enough to store extra portion of large inodes.
362
363 2005-03-20  Theodore Ts'o  <tytso@mit.edu>
364
365         * super.c (check_super_block): Add sanity checks for the
366                 superblock's inode_size field.
367
368         * pass3.c (check_root, e2fsck_get_lost_and_found): Call
369                 ext2fs_write_new_inode() instead of ext2fs_write_inode().
370
371         * pass1.c (check_blocks): Move counting the extended attribute
372                 block earlier so that we don't have to worry about
373                 num_blocks wrapping for files which are too big.
374
375 2006-02-05  Theodore Ts'o  <tytso@mit.edu>
376
377         * Release of E2fsprogs 1.36
378
379 2005-02-04  Theodore Ts'o  <tytso@mit.edu>
380
381         * pass2.c (e2fsck_pass2), problem.c (PR_2_HTREE_FCLR), problem.h
382                 (PR_2_HTREE_FCLR): Remove support for
383                 --enable-clear-htree; this was only needed during the
384                 early development of the htree patch.
385
386 2005-01-28  Theodore Ts'o  <tytso@mit.edu>
387
388         * pass2.c (e2fsck_process_bad_inode): Fix a corner case involving
389                 big-endian systems, long symlinks and i_file_acl set when
390                 it shouldn't be.  Without this bugfix, f_clear_xattr will
391                 fail on big-endian machines.
392
393         * super.c (check_resize_inode): Deal with the case where the
394                 resize inode can't be read; don't try to recreate the
395                 resize inode unless the resize feature is actually
396                 enabled.
397
398 2005-01-27  Theodore Ts'o  <tytso@mit.edu>
399
400         * super.c (check_resize_inode): If the resize inode has a zero
401                 i_links_count or isn't a regular file, consider the resize
402                 inode as invalid, and offer to recreate it.
403
404         * pass2.c (e2fsck_process_bad_inode): Offer to clear i_file_acl
405                 before checking to see if an invalid inode should be
406                 removed, since otherwise the fast symlink detection code
407                 can get confused.  Also clear the inode's entry in
408                 inode_bad_map if the inode has been completely fixed.
409                 (Addresses Red Hat Bugzilla #146284)
410
411 2005-01-25  Theodore Ts'o  <tytso@mit.edu>
412
413         * unix.c (main, check_if_skip): Set the valid flag earlier, and if
414                 it is cleared by the superblock tests, then assume that
415                 the filesystem contains errors and must be checked.
416
417         * super.c (check_super_block): Check the individual block group
418                 inode and block free counts, as well as the filesystem
419                 inode and block free counts.  If any of the block/inode
420                 free counts is too large, force a full filesystem check.
421                 (Addresses Debian Bug: #291571)
422
423 2005-01-19  Theodore Ts'o  <tytso@mit.edu>
424
425         * unix.c (e2fsck_simple_progress): Use fixed integer math
426                 to check to see if we're at 0 or 100%
427                 (is_on_batt): Clean up gcc -Wall warning
428                 (main): Remove dead code
429
430 2005-01-13  Matthias Andree  <matthias.andree@gmx.de>
431
432         * unix.c: Do not call closedir if the handle is zero, to avoid
433                 crashes when the /proc/acpi/ac_adapter directory is
434                 missing, for instance on non-ACPI or non-Linux systems.
435
436 2005-01-09  Theodore Ts'o  <tytso@mit.edu>
437
438         * pass1b.c: As part of converting configure.in from using the
439                 "broken by design" 2.13 version of AC_CHECK_TYPE to
440                 AC_CHECK_TYPES, if intptr_t isn't defined, manually
441                 typedef it to long.  (Addresses Debian Bug #289133)
442
443 2005-01-06  Theodore Ts'o  <tytso@mit.edu>
444
445         * super.c (check_resize_inode): Use ext2fs_{read,write}_ind_block
446                 so that byte swapping is handled on big-endian systems.
447                 (check_super_block): Allow the number of reserved blocks
448                 to be 50% of the number of blocks available, in order to
449                 be consistent to what is allowed by tune2fs.
450
451 2004-12-24  Theodore Ts'o  <tytso@mit.edu>
452
453         * pass1.c (e2fsck_pass1): At the end of the pass 1 processing, if
454                 we have been signalled to do so, recreate the resize inode.
455
456         * super.c (check_resize_inode): New function which checks to make
457                 sure the resize inode is valid.  It is called by
458                 check_super_block().  If it is invalid, it will signal to
459                 pass1.c that the resize inode needs to recreate.
460
461         * e2fsck.h (E2F_FLAG_RESIZE_INODE): New flag
462
463         * problem.c, problem.h (PR_0_RESIZE_INODE_INVALID,
464                 PR_1_RESIZE_INODE_CREATE): Add new problem codes.
465
466 2004-12-23  Theodore Ts'o  <tytso@mit.edu>
467
468         * swapfs.c (swap_inodes): Since swap_inodes bypasses the inode
469                 cache for speed reasons, we must flush it to avoid cache
470                 coherency problems.
471
472 2004-12-16  Theodore Ts'o  <tytso@mit.edu>
473
474         * super.c (check_super_block): If the resize_inode feature is not
475                 set, check to make sure that s_reserved_gdt_blocks is
476                 zero, and that the resize inode is clear.
477
478         * problem.h (PR_0_NONZERO_RESERVED_GDT_BLOCKS,
479                 PR_0_CLEAR_RESIZE_INODE): Add new problem codes.
480
481 2004-12-15  Theodore Ts'o  <tytso@mit.edu>
482
483         * pass1.c (process_block): Applied resize inode patch.  Mark the
484                 DIND block of the resize inode as being in use.
485         
486 2004-12-14  Theodore Ts'o  <tytso@mit.edu>
487
488         * Makefile.in: Move strip command to install-strip target.
489                 Use Linux-kernel-style makefile output for "make install"
490
491         * Makefile.in (installdirs): Use $(MKINSTALLDIRS) macro.
492                 Remove sync in the "all" target.
493
494 2004-11-30  Theodore Ts'o  <tytso@mit.edu>
495
496         * message.c (expand_inode_expression): If the TZ environment
497                 variable is set to GMT, use gmtime() instead of
498                 localtime() or ctime() to force the use of GMT.  This is
499                 because the dietlibc doesn't honor the TZ environment
500                 variable.
501         
502         * e2fsck.h: Add io_options to e2fsck_struct
503
504         * unix.c: If there is a question mark in the device name, separate
505                 out the options to the IO layer, and pass it on to
506                 ext2fs_open2().
507
508         * Makefile.in: Use Linux-kernel-style makefile output to make it
509                 easier to see errors/warnings.
510
511 2004-10-04  Richard Mortimer  <richm@oldelvet.org.uk>
512
513         * journal.c (e2fsck_check_ext3_journal): Attempt recovery of the
514                 filesystem if the journal contains illegal block numbers.
515
516 2004-07-26  Theodore Ts'o  <tytso@mit.edu>
517
518         * pass1.c (process_block): Change the limit of directory size from
519                 32 MB to 2GB.
520
521 2004-05-11  Theodore Ts'o  <tytso@mit.edu>
522
523         * journal.c (sync_blockdev): Flush I/O caches to preserve ordering
524                 constraints required by the journal recovery code.  Thanks
525                 to Junfeng Yang from the Stanford Metacompilation group
526                 for pointing this out.
527
528         * jfs_user.h: Define sync_blockdev() as an emulated function,
529                 instead just being a no-op.
530
531 2004-05-04  Theodore Ts'o  <tytso@mit.edu>
532
533         * unix.c (check_if_skip): If the checkinterval is zero, then
534                 disregard it when calculating when the next check will
535                 take place.
536
537 2004-04-12  Theodore Ts'o  <tytso@mit.edu>
538
539         * unix.c (is_on_batt): Be more flexible about the name of the ACPI
540                 device that corresponds to the AC adapter.  (Addresses
541                 Debian bug #242136)
542
543 2004-04-03  Theodore Ts'o  <tytso@mit.edu>
544
545         * Makefile.in: Update the modtime even if subst doesn't need to
546                 update the e2fsck man page, to avoid always re-running
547                 subst, especially since there are no dependencies on the
548                 man page.
549
550 2004-02-28  Theodore Ts'o  <tytso@mit.edu>
551
552         * Release of E2fsprogs 1.35
553
554 2004-02-24  Theodore Ts'o  <tytso@mit.edu>
555
556         * unix.c (main, PRS), e2fsck.8.in: Add a new -k option which keeps
557                 the existing badblocks list when using the -c option.
558                 (Addresses Debian bug #229103)
559
560 2004-02-23  Theodore Ts'o  <tytso@mit.edu>
561
562         * Makefile.in (PROFILED_LIBS, PROFILED_DEPLIBS): Fix reference to
563                 libblkid so that the build will work with --enable-profile
564                 (Addresses Sourceforge bug #811408)
565
566 2004-02-14  Theodore Ts'o  <tytso@mit.edu>
567
568         * e2fsck.c (e2fsck_run): Clear the SETJMP_OK flag when returning
569                 so we don't double longjump into an invalid stack frame.
570                 (Thanks to Matthias Andree for providing this fix.)
571
572 2004-01-31  Theodore Ts'o  <tytso@mit.edu>
573
574         * problem.c (fix_problem): Don't call print_e2fsck_message if the
575                 message is empty; otherwise, the NLS substitution will
576                 print the .po header, which is Just Wrong.
577
578 2004-01-30  Theodore Ts'o  <tytso@mit.edu>
579
580         * pass2.c (deallocate_inode_block): Check to make sure the block
581                 number is invalid before deallocating it, to avoid core
582                 dumping e2fsck.
583
584 2003-12-12  Theodore Ts'o  <tytso@mit.edu>
585
586         * pass3.c (check_directory): When reconnecting a directory, we may
587                 need to create a lost+found directory.  This may
588                 invalidate our pointer to the directory information, so we
589                 must look it up again after calling
590                 e2fsck_reconnect_file().  (Addresses Debian bug #219640).
591
592 2003-12-10  Theodore Ts'o  <tytso@mit.edu>
593
594         * e2fsck.h (E2F_FLAG_RESTARTED): Assign a unique flag bitfield to
595                 E2F_FLAG_RESTARTED.  This fixes a bug where if the user
596                 specifies an alternate superblock, and the journal needs
597                 to be replayed, e2fsck would erroneously assume that
598                 journal had been run already without clearing the
599                 NEEDS_RECOVERY flag, and bomb out with an error.
600
601 2003-12-07  Theodore Ts'o  <tytso@mit.edu>
602
603         * badblocks.c, dict.c, ea_refcount.c, ehandler.c, journal.c,
604                 pass1.c, pass1b.c, pass2.c, pass3.c, pass5.c, problem.c,
605                 rehash.c, super.c, swapfs.c, unix.c, util.c, e2fsck.h: Fix
606                 gcc -Wall nitpicks.
607
608         * recovery.c, jfs_user.h: Sync recovery.c with latest 2.5 kernel
609                 version.
610
611 2003-12-02  Theodore Ts'o  <tytso@mit.edu>
612
613         * unix.c (main): When testing a disk using e2fsck -c, use the list
614                 of new bad blocks to replace the current list of bad
615                 blocks.  This way "e2fsck -c" can be used to recover from
616                 a corrupted bad block inode.
617
618         * badblocks.c (test_disk): Remove the test_disk() file; e2fsck
619                 will just call read_bad_blocks_file() directly with the
620                 file parameter set to NULL.
621
622 2003-09-14  Theodore Ts'o  <tytso@mit.edu>
623
624         * unix.c (is_on_batt, check_if_skip): If running on battery, then
625                 give an extra grace period before actually forcing a
626                 check.  That way the laptop will be biased to waiting
627                 until we are on AC power before doing the filesystem
628                 check.  (Addresses Debian bug #205177)
629
630 2003-09-13  Theodore Ts'o  <tytso@mit.edu>
631
632         * unix.c (check_if_skip): If the number of mounts until the next
633                 forced filesystem check is 5 or less, mention this to the
634                 user.  (Addresses Debian bug #157194)
635
636         * pass1.c (e2fsck_pass1), problem.h (PR_1_BB_FS_BLOCK), 
637           problem.c (PR_1_BB_FS_BLOCK, PR_1_BBINODE_BAD_METABLOCK_PROMPT): 
638                 Fix up the handling of corrupted indirect blocks in the 
639                 bad block.  We now correctly handle the case where there
640                 is an overlap between a block group descriptor or
641                 a superblock and a bad block indirect block.  In the case
642                 where the indirect block is corrupted, we now suggest
643                 "e2fsck -c".
644         
645 2003-09-12  Theodore Ts'o  <tytso@mit.edu>
646
647         * unix.c (PRS): Check the returned name from blkid_get_devname and
648                 print an error if the requested LABEL/UUID does not exist.
649         
650 2003-09-03  Theodore Ts'o  <tytso@mit.edu>
651
652         * pass1.c (mark_table_blocks): Use the new function
653                 ext2fs_reserve_super_and_bgd to calculate the blocks to be
654                 reserved.
655
656 2003-08-24  Theodore Ts'o  <tytso@mit.edu>
657
658         * util.c (get_backup_sb): Check to make sure the context is passed
659                 in non-NULL before trying to dereference it.  Otherwise we
660                 might core dump when called to expand %S in a problem
661                 description.
662
663         * e2fsck.8.in: Adjust description line so that apropos
664                 "ext2" or "ext3" will find the man page.  (Addresses
665                 Debian Bug #206845)
666
667 2003-08-21  Theodore Ts'o  <tytso@mit.edu>
668
669         * journal.c (e2fsck_move_ext3_journal): When moving the journal or
670                 backing up the journal inode, make sure it gets written to
671                 all the superblocks.
672
673 2003-08-20  Theodore Ts'o  <tytso@mit.edu>
674
675         * journal.c (e2fsck_move_ext3_journal): If the superblock's backup
676                 journal information is not set, copy the journal inode
677                 information to the superblock.
678                 (e2fsck_get_journal): If the journal inode is corrupted,
679                 synthesize one from the backup information in the
680                 superblock.
681
682         * problem.c, problem.h (PR_0_BACKUP_JNL): Add new problem code
683                 which is used when we make a backup of the journal inode.
684
685 2003-08-19  Theodore Ts'o  <tytso@mit.edu>
686
687         * e2fsck.h, unix.c (PRS, e2fsck_clear_progbar, 
688                 e2fsck_simple_progress): Don't print the ^A and ^B
689                 characters which bracket the progress bar when the e2fsck
690                 program is talking directly to a tty, but only when it is
691                 being piped to another program.  (Addresses Debian bug
692                 #204137)
693         * unix.c: Move some initialized variables to the BSS segment to 
694                 shrink the size of the e2fsck executable.
695
696 2003-08-01  Philipp Thomas <pthomas@suse.de>
697
698         * Include inttypes.h if present.  New macros INT_TO_VOIDPTR and
699                 VOIDPTR_TO_INT.  Use them throughout for int<->void *
700                 casts to fix 64-bit warnings.
701
702         * dirinfo.c, dx_dirinfo.c, e2fsck.c, ea_refcount.c, journal.c,
703                 message.c, pass1.c, pass1b.c, pass2.c, pass3.c, pass4.c,
704                 pass5.c, super.c, swapfs.c: ext2fs_getmem(),
705                 ext2fs_free_mem(), and ext2fs_resize_mem() all now take a
706                 'void *' instead of a 'void **' in order to avoid pointer
707                 aliasing problems with GCC 3.x.
708
709 2003-07-25  Theodore Ts'o  <tytso@mit.edu>
710
711         * Release of E2fsprogs 1.34
712
713 2003-07-06  Theodore Ts'o  <tytso@mit.edu>
714
715         * pass2.c: Fix gcc -Wall nitpicks (missing #include <string.h>)
716
717         * dict.c, dict.h: Fix gcc -Wall nitpicks (indented cpp directives)
718
719 2003-06-8  Theodore Ts'o  <tytso@mit.edu>
720
721         * problem.c: Fix spelling error.
722
723 2003-05-17  Theodore Ts'o  <tytso@mit.edu>
724
725         * unix.c (show_stats), e2fsck.h: Use ngettext (abbreivated with
726                 the macro P_(str1, str2, n)) to simplify the statistics
727                 reporting.
728
729 2003-05-05  Theodore Ts'o  <tytso@mit.edu>
730
731         * unix.c (main): If --enable-testio-debug is set, then use the
732                 test_io manager so we can watch what e2fsck is doing.
733
734 2003-05-03  Theodore Ts'o  <tytso@mit.edu>
735
736         * unix.c (show_stats): Remove uneeded use of _() around string
737                 under #ifndef NLS
738
739         * problem.c: Mark two strings (PR_1_RELOC_TO and
740                 PR_2_NON_UNIQUE_FILE) as not being printf format strings.
741                 Fix typo (doubled 'is') in PR_2_FILE_ACL_BAD.
742
743         * Makefile.in: Add $(LIBINTL) to the link line so we can support
744                 using the internal gettext library.
745
746         * e2fsck.h: Add #ifndef protection around LOCALEDIR definition.
747
748 2003-04-27  Theodore Ts'o  <tytso@mit.edu>
749
750         * message.c (expand_at_expression): Fixed NLS support for message
751                 abbreviations. 
752
753 2003-04-21  Theodore Ts'o  <tytso@mit.edu>
754
755         * Release of E2fsprogs 1.33
756
757 2003-04-19  Theodore Ts'o  <tytso@mit.edu>
758
759         * rehash.c: Fix lint warnings by including string.h and ctype.h
760
761         * pass2.c (dict_de_cmp): Fix lint warnings by using const pointers.
762
763         * unix.c (e2fsck_simple_progress), e2fsck.h: Fix lint warnings by
764                 using const pointers.  Remove unused variables.
765         
766 2003-04-17  Theodore Ts'o  <tytso@mit.edu>
767
768         * rehash.c (name_cmp): Sort the deleted inodes to the end of the
769                 list, for portability to systems that whose qsort does not
770                 perform a stable sort.
771
772 2003-04-16  Theodore Ts'o  <tytso@mit.edu>
773
774         * unix.c: Bracket progress bar output with control-A and control-B
775                 characters.  These characters are used as in-band
776                 signalling to allow a logging program to filter out the
777                 progress bar.
778                 (PRS): Use setvbuf instead of setbuf to force stdout and
779                 stderr to be non-buffered when the stdout/stderr are a pipe.
780                 This fixes a cosmetic problem when using e2fsck under
781                 logsave. 
782         
783 2003-04-12  Theodore Ts'o  <tytso@mit.edu>
784
785         * unix.c: Add #ifdef around #include <sys/ioctl.h>
786
787 2003-04-05  Theodore Ts'o  <tytso@mit.edu>
788
789         * super.c (check_super_block): Update the global free block and
790                 inode counters from the block group specific counters
791                 quietly.  This is needed for an experimental patch which
792                 eliminates locking the entire filesystem when allocating
793                 blocks or inodes; if the filesystem is not unmounted
794                 cleanly, the global counts may not be accurate.
795
796 2003-03-17  Theodore Ts'o  <tytso@mit.edu>
797
798         * util.c: Explicitly declare e2fsck_global_ctx as extern for the
799                 benefit of the Apple Darwin port.
800
801 2003-03-15  Theodore Ts'o  <tytso@mit.edu>
802
803         * rehash.c (e2fsck_rehash_dir): If user specified the -n option,
804                 skip trying to write out directory.
805                 (e2fsck_rehash_directories): Fix the percentage
806                 calculation in the progress bar.
807
808 2003-03-14  Theodore Ts'o  <tytso@mit.edu>
809
810         * problem.c, problem.h (PR_2_REPORT_DUP_DIRENT): Add new problem
811                 code. 
812
813         * pass2.c (check_dir_block): Check for duplicate filenames within
814                 a single directory block (because this is the easy case;
815                 we don't currently check for duplicates that span
816                 directory blocks, for now.  Eventually for htree
817                 directories we can do this by searching for all directory
818                 blocks that have a hash overflow, and then searching the
819                 adjacent blocks to find all other potential duplicates.)
820
821         * iscan.c, scantest.c, unix.c: And #ifdef protection around
822                 #include of malloc.h
823
824         * rehash.c (duplicate_search_and_fix): Now search for duplicates
825                 filenames, and either prompt to remove a complete
826                 duplicate entry, or to rename a duplicate filename.
827                 (e2fsck_rehash_dir): Use a progress bar to report
828                 progress, and don't print all of the directory inodes as
829                 they are optimized.
830
831         * problem.c, problem.h (PR_2_DUPLICATE_DIRENT,
832                 PR_2_NON_UNIQUE_FILE):  New problem codes.
833         
834         * unix.c (e2fsck_simple_progress), e2fsck.h: New function which
835                 can be called to provide specialized progress bars that
836                 are not related to the top-level pass-based completion
837                 percentage.
838
839         * pass3.c (e2fsck_adjust_inode_count), e2fsck.h: Export previously
840                 static function.
841
842 2003-03-06    <tytso@mit.edu>
843
844         * e2fsck.8.in: Fix minor nit in the -C option.  (Addresses Debian
845                 bug #173612)
846
847 2003-03-01  Theodore Ts'o  <tytso@mit.edu>
848
849         * Makefile.in, journal.c, unix.c: Use blkid functions to find the
850                 journal from the UUID, and to interpret the device
851                 specification.
852
853         * e2fsck.c: Free the blkid_cache when releasing the e2fsck context
854                 structure.
855
856         * e2fsck.h: If strnlen is not present, define it as a macro which
857                 calls e2fsck_strlen().  Add prototype for string_copy().
858                 Add blkid_cache to e2fsck context, and make
859                 filesystem_name, device_name, and journal_name be
860                 non-const variables.
861         
862         * pass1.c, pass2.c: Remove static strnlen function
863
864         * util.c (string_copy, e2fsck_strnlen): New functions
865
866 2003-01-29  Theodore Ts'o  <tytso@mit.edu>
867
868         * unix.c (usage): Make descripton -c be a bit more explicit
869
870 2003-01-22  Theodore Ts'o  <tytso@mit.edu>
871
872         * pass1.c (check_blocks): Use the EXT2_I_SIZE macro.
873
874 2003-01-02  Theodore Ts'o  <tytso@mit.edu>
875
876         * unix.c (main): Detect if there is an attempt to run the journal
877                 twice, and abort with an error if this is the case.
878                 (Address IBM Bugzilla bug #1226)
879
880 2002-12-18  Theodore Ts'o  <tytso@mit.edu>
881
882         * pass2.c (strnlen): Provide strnlen if libc doesn't. 
883
884 2003-11-19  Theodore Ts'o  <tytso@mit.edu>
885
886         * unix.c (PRS): Print an error if more than one of the -p/-a, -n
887                 or -y options are specified.
888
889 2002-11-12  Theodore Ts'o  <tytso@mit.edu>
890
891         * problem.c: Make HTREE problems PR_PREEN_OK, so that we don't
892                 abort an e2fsck after the filesystem has been mounted
893                 using the 2.4 ext2 codebase.
894
895 2002-11-09  Theodore Ts'o  <tytso@mit.edu>
896
897         * Release of E2fsprogs 1.32
898
899 2002-11-08  Theodore Ts'o  <tytso@mit.edu>
900
901         * Release of E2fsprogs 1.31
902
903 2002-11-08    <tytso@snap.thunk.org>
904
905         * unix.c (main): Fix a bug where e2fsck could erroneously mark a
906                 filesystem as being valid if it was being checked and it
907                 is interrupted with a ^C.  (Bug introduced in e2fsprogs
908                 1.28.)
909
910         * unix.c (PRS), journal.c: Set the default level of journal
911                 debugging to be 0, and allow the user to set the level of
912                 journal debugging by using the E2FSCK_JBD_DEBUG
913                 environment variable.
914
915         * pass1.c (new_table_block), super.c (check_super_block), swapfs.c
916                 (swap_filesys): Clear EXT2_FLAG_MASTER_SB_ONLY to make
917                 sure the backup superblocks and group descriptors are
918                 updated when we make an important change to the
919                 superblocks and/or group descriptors.  (i.e., generating a
920                 UUID, allocating filesystem metadata, or byte-swapping the
921                 filesystem.)
922
923 2002-11-07  Theodore Ts'o  <tytso@mit.edu>
924
925         * e2fsck.h, unix.c (main, check_mount): Fix e2fsck so that it
926                 returns the appropriate exit code, so that the boot
927                 scripts will be told that they need to automatically
928                 reboot.
929
930 2002-10-31  Theodore Ts'o  <tytso@mit.edu>
931
932         * Release of E2fsprogs 1.30
933
934 2002-10-31  Theodore Ts'o  <tytso@mit.edu>
935
936         * unix.c (usage), e2fsck.8.in: Add the -D option to the usage and
937                 command synopsis.  (Addresses Debian bug #167108)
938
939         * pass1.c (e2fsck_pass1): Check the superblock write time to see
940                 whether or not we can safely do the LOW_DTIME checks.
941                 (Addresses Sourceforge bug #620980)
942
943 2002-10-30  Theodore Ts'o  <tytso@mit.edu>
944
945         * Makefile.in (install): Search all compression extensions when
946                 deleting old man pages.
947
948         * pass1.c (mark_table_blocks): Fix bug in meta_bg support; only
949                 mark blocks legacy group descriptor blocks up to 
950                 s_first_meta_bg.
951
952 2002-10-20  Theodore Ts'o  <tytso@valinux.com>
953
954         * pass1.c (mark_table_blocks): Add support for the meta_blockgroup
955                 filesystem format.
956
957 2002-10-13  Theodore Ts'o  <tytso@mit.edu>
958
959         * pass3.c (e2fsck_get_lost_and_found): Pass in mode 700 to
960                 ext2fs_new_inode().
961
962         * unix.c (show_stats): Fix format bug if NLS is in use.
963
964         * journal.c, pass1.c, revoke.c, util.c: Fix gcc -Wall nits.
965
966 2002-10-08  Theodore Ts'o  <tytso@mit.edu>
967
968         * pass3.c (e2fsck_get_lost_and_found): Create the lost+found
969                 directory with mode 0700.
970
971 2002-10-02  Theodore Y. Ts'o  <tytso@mit.edu>
972         
973         * pass2.c (parse_int_node, check_dir_block): Add byte-swap
974                 functions around the htree code, so that it works on
975                 big-endian machines.
976
977         * swapfs.c (swap_filesys): For PPC machines, byte-swap the bitmap,
978                 since PPC big-endian filesystems were historically wierd.
979                 This is just for the regression test, since no one
980                 actually uses them anymore...
981
982 2002-09-30  Theodore Ts'o  <tytso@mit.edu>
983
984         * problem.c, problem.h (PR_2_HTREE_BAD_LIMIT,
985                 PR_2_HTREE_BAD_COUNT, PR_2_HTREE_HASH_ORDER, 
986                 PR_2_HTREE_BAD_DEPTH): Add new problem codes.
987
988         * pass2.c (salvage_directory, check_dir_block): Avoid counting
989                 directory entries twice during a directory salvage.  Make
990                 the salvaging algorithm smarter about directory entry size
991                 overruns.
992                 (parse_int_node): Add check to make sure the limit and
993                 count fields in the node headers are sane.  Also check
994                 to make sure the hash table in ascending order.
995                 (pass2, htree_depth): For all leaf nodes, determine their
996                 depth in the tree, and make sure it matches with the depth
997                 in the htree root information.
998
999 2002-09-29  Theodore Ts'o  <tytso@mit.edu>
1000
1001         * pass2.c (check_dir_block): Do a more paranoid check when trying
1002                 to determine whether or not a directory entry is a
1003                 completely empty leaf block or leaf node.  Otherwise
1004                 e2fsck might get confused into thinking that a valid dxdir
1005                 was corrupted.
1006
1007         * rehash.c (e2fsck_rehash_dir): Apply patch from Christopher Li
1008                 which avoids creating an empty directory entry at the end
1009                 of the directory block.  This screws up earlier versions
1010                 of the indexed directory patch.
1011         
1012 2002-09-28  Theodore Ts'o  <tytso@mit.edu>
1013
1014         * rehash.c (write_directory): Clear the index flag if by
1015                 reoptimizing the directory, we bring it back into a
1016                 non-indexed state.
1017                 (e2fsck_rehash_dir): Allow directories that contain two
1018                 blocks to be indexed.  Otherwise when they grow, they
1019                 never will be indexed by the kernel.
1020
1021         * unix.c (main): Only update the master superblock; there's no
1022                 point updating the backup superblocks, and it speeds up
1023                 fsck slightly.
1024
1025         * pass2.c (salvage_directory): New function called by
1026                 check_dir_block() which is much more sophisticated about
1027                 how it salvages corrupted filesystems.
1028
1029 2001-09-24  Theodore Tso  <tytso@mit.edu>
1030
1031         * Release of E2fsprogs 1.29
1032
1033 2002-09-06  Theodore Ts'o  <tytso@mit.edu>
1034
1035         * rehash.c (copy_dir_entries): Fix bug which caused corrupted
1036                 directories if there are 4 or 8 bytes left over in a
1037                 directory page when optimizing/reindexing a directory.
1038
1039 2001-08-31  Theodore Tso  <tytso@thunk.org>
1040
1041         * Release of E2fsprogs 1.28
1042
1043 2002-08-31  Theodore Ts'o  <tytso@mit.edu>
1044
1045         * ehandler.c (e2fsck_handle_read_error): If the user asks to
1046                 ignore the error, offer to try forcing a write of the
1047                 block to the disk; sometimes this will cause the drive to
1048                 remap the bad block.
1049
1050 2002-08-31  Theodore Ts'o  <tytso@valinux.com>
1051
1052         * pass2.c (e2fsck_pass2): If this is a HTREE directory, sort the
1053                 dblist so that the first block of all of the directories
1054                 is handled first so we can read the hash version
1055                 information.
1056                 (check_dir_block): Examine the root node for correctness,
1057                 and offer to clear it if it is not correct.  Also copy the
1058                 hash version to the dx_dir structure, so that the proper
1059                 hash function can be used for other blocks in the
1060                 directory.
1061
1062         * problem.c, problem.h (PR_2_HTREE_BAD_ROOT): Add new problem code.
1063
1064 2002-08-21  Theodore Ts'o  <tytso@mit.edu>
1065
1066         * problem.c: Fix PR_1_RELOC_BLOCK_ALLOCATE message to explain that
1067                 it is necessary to find contiguous blocks in a particular
1068                 block group.
1069
1070 2002-08-17  Theodore Ts'o  <tytso@mit.edu>
1071
1072         * e2fsck.8.in: Add clarifying text describing how e2fsck works
1073                 with ext3 filesytems.  (Addresses Debian bug #145044).
1074
1075         * pass1.c (handle_htree): Add support for EXT2_HASH_TEA
1076
1077         * e2fsck.h, e2fsck.c (e2fsck_allocate_context): Add new field to
1078                 the e2fsck context, ext_attr_ver, which specifies the EA
1079                 format version.
1080
1081         * unix.c (usage, parse_extended_opts, PRS), e2fsck.8.in: Add new
1082                 option -E, which allows the users to specify extended
1083                 options.  Added ea_ver extended option.
1084
1085         * pass1.c (e2fsck_pass1_check_device_inode): Add ext2_filsys
1086                 argument to this function, so we can account for the
1087                 presence of extended attribute blocks attached to device
1088                 inodes.
1089                 (e2fsck_pass1_check_symlink, e2fsck_pass1): Take into
1090                 account the fact that symlinks can also have extended
1091                 attribute blocks.
1092                 (check_ext_attr): Don't be flexible about the EA format
1093                 version.  Check against the version number in
1094                 ctx->ext_attr_ver. 
1095                 (check_blocks): Check all inodes, so that we account for
1096                 extended attribute blocks belonging to special files.
1097                 Clean up i_size checks.
1098
1099         * pass1b.c (pass1b): Check all inodes, so that we account for
1100                 extended attribute blocks belonging to special files.
1101                 (delete_file_block): Use ext2fs_alloc_block_stats() to
1102                 update the filesystem statistics.
1103                 (delete_file): Attempt to decrement the extended
1104                 attribute refcount, and free the EA block if the count
1105                 hits zero.
1106                 (clone_file): Fixed bugs in EA handling.  Don't call
1107                 block_iterate on inodes that don't have a valid i_block[]
1108                 array.  Reread the base inode since it may have been
1109                 changed by ext2fs_block_iterate.  When updating inodes as
1110                 part of cloning an EA block, write out the correct inode
1111                 structure.
1112
1113         * pass2.c (deallocate_inode_block, deallocate_inode): Use standard
1114                 ext2fs_alloc_*_stats functions to update the filesystem 
1115                 statistics.
1116                 (deallocate_inode): Attempt to decrement the extended
1117                 attribute refcount, and free the EA block if the count
1118                 hits zero. 
1119                 (e2fsck_process_bad_inode): Add extra argument to calls 
1120                 to e2fsck_pass1_check_device_inode ().
1121
1122         * pass3.c (e2fsck_get_lost_and_found): Use standard
1123                 ext2fs_alloc_*_stats functions to update the filesystem.
1124                 statistics when creating /lost+found.
1125                 (adjust_inode_count): Remove debugging code that can never
1126                 be triggered.
1127
1128         * pass4.c (disconnect_inode): Add explanation about why we only
1129                 clear inodes that have no data blocks and no EA blocks.
1130                 Use ext2fs_inode_alloc_stats2 function to update the
1131                 filesystem statistics when clearing a zero-length inode.
1132
1133         * problem.c, problem.h (PR_1B_ADJ_EA_REFCOUNT,
1134                 PR_2_ADJ_EA_REFCOUNT): Add new problem codes.
1135
1136         * super.c (release_inode_block), (release_orphan_inodes): Use the
1137                 standard ext2fs_alloc_*_stats functions to update the
1138                 filesystem statistics.
1139                 (release_inode_blocks): Attempt to decrement the extended
1140                 attribute refcount, and free the EA block if the count
1141                 hits zero.
1142
1143 2002-08-01  Theodore Ts'o  <tytso@mit.edu>
1144
1145         * dict.c, dict.h: New file from kazlib 1.20 which implements a
1146                 red-black tree
1147         
1148         * pass1b.c: Massive changes to take advantage of dict.c.  This
1149                 removes several O(n**2) algorithms from the rare case
1150                 where there are a large number of blocks claimed by
1151                 multiple inodes.
1152
1153 2002-07-24  Theodore Ts'o  <tytso@mit.edu>
1154
1155         * e2fsck.8.in, e2fsck.h, pass3.c (e2fsck_pass3), unix.c, rehash.c:
1156                 Add new option -D, which requests e2fsck to optimize all
1157                 directories.  Rehash.c will also compress and sort
1158                 non-indexed directories.
1159
1160         * problem.c, problem.h: Rename PR_3A_REHASH_* to PR_3A_OPTIMIZE_*
1161
1162         * unix.c (PRS): Make sure the signal_cancel is registered without
1163                 SA_RESTART.
1164
1165         * rehash.c (e2fsck_rehash_dir, copy_dir_entries, calculate_tree):
1166                 Restructured code in e2fsck_rehash_dir into two new
1167                 subroutines to make the code more understandable/maintainable.
1168                 (set_root_node): Fixed bug which caused the root node to
1169                 be invalid on non-FILETYPE filesystems due to an
1170                 unitialized variable.
1171                 (calculate_tree): Fix bug where pointers which might get
1172                 invalidated if realloc() moves outdir->buf around.
1173                 (e2fsck_rehash_dir): Fix memory leak bug.
1174
1175         * pass3.c (e2fsck_get_lost_and_found), e2fsck.h, e2fsck.c:
1176                 Exported as a public interface a function for finding the
1177                 lost and found directory.  Cache the location of the lost
1178                 and found directory in the e2fsck context structure.
1179
1180         * util.c (ask_yn, read_a_char): Note when the user has typed ^C,
1181                 and abort processing by longjmp'ing to ctx->abort_loc.
1182
1183 2002-07-23  Theodore Ts'o  <tytso@mit.edu>
1184
1185         * pass1.c (e2fsck_pass1): If e2fsck is run with -n, don't create
1186                 the dirs_to_hash list, since we don't want to reindex
1187                 directories if the filesystem is opened read-only.
1188
1189 2002-07-21  Theodore Ts'o  <tytso@mit.edu>
1190
1191         * e2fsck.8.in: Document new exit code FSCK_CANCELED
1192
1193         * unix.c (PRS, signal_cancel): Capture SIGINT and SIGTERM signals
1194                 and set a flag in the e2fsck context indicating that
1195                 cancellation has been requested, so that e2fsck will exit
1196                 only at safe points.
1197                 (main): Change the exit handling so that if a cancellation
1198                 is requested, return FSCK_CANCELED (a new exit code 32).
1199                 e2fsck can now return more than one exit code as part of a
1200                 bitmask (as had been documented in the man page).
1201
1202         * pass2.c (e2fsck_pass2, check_dir_block), pass3.c (e2fsck_pass3),
1203                 pass4.c (e2fsck_pass4): Check to see if a cancellation was
1204                 requested, and abort processing if necessary.
1205
1206 2002-07-19  Theodore Ts'o  <tytso@mit.edu>
1207
1208         * rehash.c, Makefile.in: New file which rewrites directories using
1209                 the htree format.
1210         
1211         * problem.c (fix_problem), problemP.h (PR_PREEN_NOHDR): Add option
1212                 which suppresses the header printed when in preen mode.
1213
1214         * pass3.c (e2fsck_pass3): If there are entries on the dirs_to_hash
1215                 list, call e2fsck_rehash_directories to reindex those
1216                 directories.
1217                 (e2fsck_expand_directory): Generalize the old
1218                 expand_dirctory() function so it can expand a directory to
1219                 a guaranteed minimum size. 
1220
1221         * e2fsck.h (struct e2fsck_struct): Add the dirs_to_hash list.  Add
1222                 new function prototypes for rehash.c and for
1223                 e2fsck_expand_directory().
1224         
1225         * e2fsck.c (e2fsck_reset_context): Free the dirs_to_hash list.
1226
1227         * pass1.c (e2fsck_pass1): Initialize the dirs_to_hash list if the
1228                 htree feature is present in the filesystem.
1229                 (check_blocks): If a non-htree directory has more than 2
1230                 blocks, put it on the dirs_to_hash list.
1231
1232         * pass2.c (clear_htree): Add corrupt htree directories to the
1233                 dirs_to_hash list.
1234
1235         * problem.h, problem.c (PR_3A_PASS_HEADER, PR_3A_REHASH_ITER, 
1236                 PR_3A_REHASH_DIR_ERR, PR_3A_REHASH_DIR_HEADER,
1237                 PR_3A_REHASH_DIR, PR_3A_REHASH_DIR_END): Add new problem codes
1238
1239         * pass2.c (parse_int_node), problem.c (PR_2_HTREE_BADBLK): Fix
1240                 problem display.
1241         
1242 2002-07-15  Theodore Ts'o  <tytso@mit.edu>
1243
1244         * pass2.c (e2fsck_pass2): Use dx_dir->numblocks instead of
1245                 dx_dir->ino to indicate that a bad inode was cleared.
1246
1247 2002-06-26  Theodore Ts'o  <tytso@mit.edu>
1248
1249         * pass1.c (check_blocks): Move htree handling to handle_htree().
1250                 Factor out calls to ext2fs_write_inode so that it happens
1251                 if dirty_inode is non-zero.
1252                 (handle_htree): Add checks for invalid htree root, invalid
1253                 hash version, invalid hash version, and htree depth too deep.
1254
1255         * problem.h, problem.c (PR_1_HTREE_NODIR, PR_1_HTREE_BADROOT,
1256                 PR_1_HTREE_HASHV, PR_1_HTREE_INCOMPAT, PR_1_HTREE_DEPTH): 
1257                 Add new problem codes.
1258
1259         * pass2.c (parse_int_node): Fix silly typo.
1260                 (check_dir_block): Change to use new ext2fs_dirhash()
1261                 function prototype.
1262                 (pass2): Fixed two minor bugs discovered by the test case:
1263                 Don't stop checking dxdir's after clearing a bad inode.  
1264                 If there is a bad max hash, make sure the bad_dir flag
1265                 is set to make sure we try to clear inode.
1266
1267 2002-06-25  Theodore Ts'o  <tytso@mit.edu>
1268
1269         * e2fsck.c (e2fsck_reset_context): Free the dx_dirinfo structure.
1270
1271         * message.c: Add new abbrevations @h and @p, "HTREE directory
1272                 inode" and "problem in".
1273
1274         * pass1.c (check_blocks): If the inode has the INDEX_FL flag,
1275                 register the block into the indexed directory data
1276                 structures.  Or if the filesystem doesn't have the
1277                 DIR_INDEX flag, offer to clear the INDEX_FL.
1278
1279         * pass2.c (e2fsck_pass2, parse_int_node): Add support check htree
1280                 directories (we don't check all possible corruptions yet).
1281
1282         * problem.h, problem.h (PR_1_HTREE_SET, PR_2_HTREE_NOTREF, 
1283                 PR_2_HTREE_DUPREF, PR_2_HTREE_MIN_HASH, PR_2_HTREE_MAX_HASH,
1284                 PR_2_HTREE_CLEAR, PR_2_HTREE_FCLR, PR_2_HTREE_BADBLK): Add
1285                 new problem codes.
1286
1287         * unix.c (main): If ENABLE_HTREE is not defined, complain if the
1288                 filesystem has the dir_index feature.
1289
1290         * Makefile.in, e2fsck.h, dx_dirinfo.c: New file (and group of
1291                 functions) which keeps track of blocks in HTREE directory
1292                 blocks.
1293
1294 2002-05-22  Andreas Dilger <adilger@clusterfs.com>
1295
1296         * super.c (check_superblock): Check that the number of inodes and
1297                 blocks in a group is less than 2^16, so that the free inode
1298                 and block counts for a group fit into the group descriptor
1299                 table fields.  Any more than that would need a COMPAT flag.
1300
1301 2002-05-22  Theodore Ts'o  <tytso@mit.edu>
1302
1303         * pass1.c (check_ext_attr): Update to support the V2 Bestbits EA
1304                 format.  We automatically determine from the first EA
1305                 block we visit whether we are using the V1 or V2 format.
1306
1307 2002-05-21  Theodore Ts'o  <tytso@mit.edu>
1308
1309         * pass1.c (process_block): If an inode has too many blocks or
1310                 is too big, then offer to truncate the inode.
1311                 (check_blocks): Don't bother checking the size to see if
1312                 it's too big, since that's just a symptom, not the disease
1313                 (which we're now appropriately checking in process_block).
1314
1315         * problem.c, problem.h: Add new problem codes PR_1_INODE_TOOBIG,
1316                 PR_1_TOOBIG_DIR, PR_1_TOOBIG_REG, PR_1_TOOBIG_SYMLINK, and
1317                 add the latch code PR_LATCH_TOOBIG.
1318
1319 2002-05-20  Theodore Ts'o  <tytso@mit.edu>
1320
1321         * e2fsck.h, pass1.c (e2fsck_pass1_check_symlink), pass2.c
1322                 (e2fsck_process_bad_inode): Add an extra
1323                 argument so a scratch buffer can be passed into the
1324                 function.
1325
1326         * pass1.c (e2fsck_pass1_check_device_inode,
1327                 e2fsck_pass1_check_symlink): If the EXT2_INDEX_FL flag is
1328                 set, then the device/FIFO is invalid.
1329                 (check_immutable): Don't check for EXT2_INDEX_FL; we take
1330                 care of that elsewhere now.
1331                 (e2fsck_pass1): Check to see if the symlink is valid
1332                 before we offer to clear any immutable bits.  This matches
1333                 the order in which we check other special files.
1334
1335         * pass2.c (e2fsck_pass2): Allocate a bigger scratch buffer so we
1336                 can pass part of it to e2fsck_process_bad_inode.
1337
1338         * pass4.c (e2fsck_pass4): If we need to call
1339                 e2fsck_process_bad_inode(), allocate the necessary scratch
1340                 buffer.
1341
1342         * problem.h, problem.c: Change PR_2_SYMLINK_SIZE to be
1343                 PR_2_INVALID_SYMLINK, and change the text
1344                 accordingly.  Revert the text change for PR_1_SET_IMMUTABLE
1345                 since we no longer check for EXT2_INDEX_FL in
1346                 check_immutable().
1347
1348 2002-05-18  Andreas Dilger <adilger@clusterfs.com>
1349
1350         * pass1.c (e2fsck_pass1_check_symlink): Remove checks of
1351                 immutable/append-only checks, since this is handled by
1352                 check_immutable.  For non-fast symlinks, read in the
1353                 data block and check the length to make sure it
1354                 matches with the inode size.
1355                 (check_immutable): Generalize to also check for the 
1356                 EXT2_INDEX_FL flag. 
1357                 (check_blocks): For non-regular files, signal a bad inode 
1358                 size if i_size_high is non-zero.
1359
1360         * pass2.c: Only count large files if they are regular files
1361                 (not just if they aren't directories).
1362
1363         * problem.c, problem.h: Change comment for PR_2_SYMLINK_SIZE
1364                 to indicate that it can be triggered by any symlink,
1365                 not fast symlink.  Change text for PR_1_SET_IMMUTABLE
1366                 to indicate that it the EXT2_INDEX_FL was set.
1367
1368 2002-05-17  Theodore Ts'o  <tytso@mit.edu>
1369
1370         * pass1.c (e2fsck_pass1): When calculating max_sizes, omit capping
1371                 this value by the calculated value of max_sect_sizes.
1372                 The inode may be a sparse inode, and the limit of
1373                 max_sect_sizes assumed a non-sparse inode and a limit
1374                 based on a 32-bit i_blocks field measured in 512 sectors.
1375
1376         * super.c (check_super_block): Fix check for s_log_block_size so
1377                 that takes into account fact that there is an offset of
1378                 EXT2_MIN_BLOCK_LOG_SIZE.
1379
1380         * pass1.c: Allocate max_sizes array to be big enough to support
1381                 the larger block sizes.
1382
1383 2002-05-16  Andreas Dilger <adilger@clusterfs.com>
1384
1385         * unix.c (main), util.c (get_backup_sb): Use EXT2_MAX_BLOCK_SIZE
1386                 instead of using a hardcoded value of 4096.
1387
1388         * super.c (check_super_block): Change checks for s_log_block_size
1389                 s_log_frag_size so they support the larger block sizes.
1390
1391         * pass1.c (e2fsck_pass1): Calculate max_sizes array for block
1392                 sizes up to EXT2_MAX_BLOCK_SIZE (to support block sizes
1393                 greater than 4k).
1394
1395 2002-03-08  Theodore Tso  <tytso@mit.edu>
1396
1397         * Release of E2fsprogs 1.27
1398
1399 2002-03-07  Theodore Tso  <tytso@mit.edu>
1400
1401         * journal.c, pass5.c, revoke.c: Fix gcc -Wall complaints
1402
1403 2002-03-07  Theodore Tso  <tytso@mit.edu>
1404
1405         * unix.c (main): Don't close the filesystem before calling
1406                 fatal_error(); this just causes a needless warning about a
1407                 bad I/O manager magic number.
1408
1409         * journal.c (e2fsck_check_ext3_journal): Offer to clear the inode
1410                 in case the journal is too small, or the inode number in
1411                 the superblock doesn't appear to be random.
1412
1413 2002-03-06  Theodore Tso  <tytso@mit.edu>
1414
1415         * problem.h, problem.c: PR_5_BLOCK_RANGE_UNUSED,
1416                 PR_5_BLOCK_RANGE_USED, PR_5_INODE_RANGE_UNUSED,
1417                 PR_5_INODE_RANGE_USED: Add new problem codes.
1418
1419         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Collapse
1420                 reporting of adjacent blocks and inodes into a range.
1421
1422 2002-03-04  Philipp Thomas  <pthomas@suse.de>
1423
1424         * unix.c (main): Newer libintl needs LC_CTYPE to be set in
1425                 addition to LC_MESSAGES.
1426
1427 2002-02-24  Theodore Tso  <tytso@mit.edu>
1428
1429         * Makefile.in (install): Install hard links for man pages for
1430                 fsck.ext2 and fsck.ext3.  Remove any compressed man
1431                 pages before installing the man pages.
1432
1433 2002-02-22  Theodore Tso  <tytso@mit.edu>
1434
1435         * journal.c: Improve code maintainability and reduce code size by 
1436                 moving common code paths in e2fsck_journal_init_dev() and
1437                 e2fsck_journal_init_inode() into e2fsck_get_journal().
1438                 Also fixed a memory leak in recover_ext3_journal().
1439
1440         * super.c (release_orphan_inodes): Fix memory leak.
1441
1442 2002-02-03  Theodore Tso  <tytso@thunk.org>
1443
1444         * Release of E2fsprogs 1.26
1445
1446 2001-12-24  Theodore Tso  <tytso@mit.edu>
1447
1448         * unix.c (PRS): Don't allow the -c and -l/-L options to be
1449                 specified at the same time.
1450
1451         * e2fsck.h (E2F_OPT_WRITECHECK), unix.c (PRS), 
1452                 badblocks.c (read_bad_blocks_file): If two -c options are
1453                 specified, then perform a non-destructive read/write scan
1454                 of the disk.
1455
1456         * e2fsck.8.in: Document the double -c option; also encourage users
1457                 to use -c instead of the -l/-L options since it's too hard
1458                 for users to get things like the blocksize parameter correct.
1459
1460 2001-12-23  Theodore Tso  <tytso@mit.edu>
1461
1462         * util.c (get_backup_sb): This function now searches for the
1463                 backup superblock by iterating over possible blocksizes
1464                 instead of defaulting a guess of 8193 if the superblock
1465                 isn't available.
1466
1467         * message.c (expand_percent_expression), unix.c (main): Pass in
1468                 new parameters to get_backup_sb.  Also, in unix.c, use the
1469                 blocksize paramter in the e2fsck context structure instead
1470                 of using a static variable, since get_backup_sb wants to
1471                 be able to set the blocksize paramter.
1472
1473         * e2fsck.h: Update function prototype for get_backup_sb; also add
1474                 the blocksize parameter to the e2fsck context structure.
1475
1476         * Makefile.in, jfs_user.h: Move linux/jbd.h to
1477                 ext2fs/kernel-jbd.h, to avoid using the system header
1478                 file version of hbd.h when using diet glibc (since it
1479                 forcibly adds /usr/include to the beginning of the
1480                 include search path.)
1481
1482 2001-12-21  Theodore Tso  <tytso@mit.edu>
1483
1484         * problem.c (fix_problem): Use ctx->filesystem_name if the
1485                 ctx->device_name is NULL.
1486
1487         * journal.c (e2fsck_check_ext3_journal): Give the opportunity to
1488                 run the journal even if recovery flag is cleared.  If
1489                 we're using a backup superblock, run the journal by
1490                 default.
1491
1492         * e2fsck.h (E2F_OPT_FORCE), unix.c (PRS, check_if_skip): Use a
1493                 bitfield in the e2fsck context flags word to indicate
1494                 whether or not a check should be forced.  This allows the
1495                 journal code to set the option if necessary to force a
1496                 filesystem check.
1497
1498         * problem.h, problem.c: Remove PR_0_JOURNAL_RESET_JOURNAL, and add
1499                 PR_0_JOURNAL_RUN and PR_0_JOURNAL_RUN_DEFAULT.  Update
1500                 problem decription texts.
1501
1502 2001-12-16  Theodore Tso  <tytso@mit.edu>
1503
1504         * e2fsck.h (ext2fs_get_refcount_size), unix.c (check_mount, PRS), 
1505                 pass1.c (adjust_extattr_refcount), 
1506                 ea_refcount.c (ea_refcount_create): Fix gcc -Wall nits.
1507         
1508         * recovery.c, revoke.c: Update to versions from 2.4.17-pre8.
1509
1510         * journal.c, jfs_user.h: Update support code for new version of
1511                 recover.c and revoke.c.  Fix support for filesystems with
1512                 external journals.
1513
1514 2001-11-30 Gabriel Paubert <paubert@iram.es>
1515
1516         * journal.c (e2fsck_journal_load): Fix an endianness bug.
1517
1518 2001-11-26  Theodore Tso  <tytso@mit.edu>
1519
1520         * super.c (check_super_block): Make sure that if the inode table
1521                 or allocation bitmap is zero, that it is marked as
1522                 invalid, so that in pass #1, a new bitmap/inode table gets
1523                 properly allocated.  (Addresses Debian Bug #116975)
1524
1525 2001-11-24  Theodore Tso  <tytso@mit.edu>
1526
1527         * e2fsck.8.in: Fix minor typo in man page and clarify device
1528                 specification.
1529
1530 2001-10-07  Theodore Tso  <tytso@mit.edu>
1531
1532         * journal.c (clear_v2_journal_fields, e2fsck_journal_load): If the
1533                 V2 fields are set on a V1 journal superblock, or an
1534                 internal V2 journal has s_nr_users is non-zero, clear the
1535                 entire journal superblock beyond the V1 superblock.  This
1536                 fixes botched V1->V2 updates.
1537
1538         * problem.c, problem.h (PR_0_CLEAR_V2_JOURNAL): Add new problem code.
1539
1540 2001-09-20  Theodore Tso  <tytso@mit.edu>
1541
1542         * e2fsck.h, journal.c (e2fsck_move_ext3_journal): Add new function
1543                 which will automatically relocate the ext3 journal from a
1544                 visible file to an invisible journal file if the
1545                 filesystem has been opened read/write.
1546
1547         * super.c (check_super_block): Add call to e2fsck_move_ext3_journal
1548
1549         * problem.c, problem.h (PR_0_MOVE_JOURNAL, PR_0_ERR_MOVE_JOURNAL):
1550                 Add new problem codes.
1551
1552 2001-09-20  Theodore Tso  <tytso@thunk.org>
1553
1554         * Release of E2fsprogs 1.25
1555
1556 2001-09-19  Theodore Tso  <tytso@mit.edu>
1557
1558         * unix.c (main): If a superblock is specified explicitly by the
1559                 user, don't try to automatically fall back to an
1560                 alternate superblock.
1561
1562 2001-09-02  Theodore Tso  <tytso@thunk.org>
1563
1564         * Release of E2fsprogs 1.24a
1565
1566 2001-08-30  Theodore Tso  <tytso@thunk.org>
1567
1568         * Release of E2fsprogs 1.24
1569
1570 2001-08-30  Theodore Tso  <tytso@valinux.com>
1571
1572         * pass1.c (e2fsck_pass1): For EXT2_RESIZE_INO, allow its i_mode to
1573                 either be zero or a regular file (for compatibility with
1574                 Andreas's on-line resizing programs).
1575
1576 2001-08-27  Theodore Tso  <tytso@valinux.com>
1577
1578         * unix.c (main): Remove EXT2FS_VERSION from the version display,
1579                 since it only confuses people.
1580
1581         * pass1.c (strnlen): Provide strnlen if libc doesn't.
1582
1583 2001-08-15  Theodore Tso  <tytso@valinux.com>
1584
1585         * Release of E2fsprogs 1.23
1586
1587 2001-08-13  Theodore Tso  <tytso@valinux.com>
1588
1589         * super.c (release_orphan_inodes): If the filesystem contains
1590                 errors, don't run the orphan * list, since the orphan list
1591                 can't be trusted.
1592
1593         * pass1.c (check_size): Fix logic in check_size; the previous code
1594                 only offered to clear the inode size fields if both size
1595                 and i_size_high were zero.
1596                 (e2fsck_pass1_check_device_inode): If i_blocks is
1597                 non-zero, then assume that the device/socket/fifo inode
1598                 is bogus.
1599
1600 2001-08-09  Theodore Tso  <tytso@valinux.com>
1601
1602         * pass1.c, pass2.c, problem.c, problem.h: Fix bug introduced by
1603                 Andreas's symlink code; check_blocks() was unconditionally
1604                 testing inode_bad_map without checking to see if it
1605                 existed first.  Fixed problem a different way; we now no
1606                 longer check inode_bad_map at all, since the file might
1607                 not get deleted in pass 2 anyway.  We move the large file
1608                 feature reconciliation code to to e2fsck_pass2(), and in
1609                 deallocate_inode() in pass2.c, we decrement the large
1610                 files counter if we're about to delete a large file.
1611
1612         * unix.c (show_stats): Print the number of large files in verbose
1613                 mode.
1614
1615 2001-08-07  Theodore Tso  <tytso@valinux.com>
1616
1617         * journal.c (recover_ext3_journal): If s_errno is set in the
1618                 journal superblock, set the EXT2_ERROR_FS flag in the
1619                 filesystem superblock after the journal is run.
1620
1621 2001-08-04  Andreas Dilger  <root@lynx.adilger.int>
1622
1623         * message.c:  Change comments for %D and %d expansion in e2fsck
1624                 problem codes.  It was not consistent which was for dirent
1625                 expansion, and which was for directory number expansion.
1626
1627         * problem.c (PR_2_FINAL_RECLEN, PR_2_BAD_FILETYPE): Fix problem
1628                 codes which got caught by the confusion between %D and %d.
1629
1630 2001-08-04  Theodore Tso  <tytso@valinux.com>
1631
1632         * problem.c (PR_2_SYMLINK_SIZE): Change description to make it
1633                 more clear (and remove %s expansion).  Also add missing
1634                 periods to the end of a number of problem descriptions.
1635
1636         * pass2.c (e2fsck_process_bad_inode): Remove unneeded problem
1637                 context string set now that the problem description for
1638                 PR_2_SYMLINK_SIZE has been changed.
1639
1640         * pass1.c (e2fsck_pass1_check_symlink): Consolidate some checks,
1641                 and check the validity of the symlink block here (so that
1642                 we detect this case here instead of later).  Also use
1643                 sizeof(inode->i_block) instead EXT2_LINK_DIR.
1644
1645 2001-07-30  Theodore Tso  <tytso@valinux.com>
1646
1647         * unix.c (check_mount): Remove the code which tested for the root
1648                 filesystem being mounted read-only, and depend on the
1649                 results flags from ext2fs_check_if_mounted.
1650
1651 2001-07-29  Theodore Tso  <tytso@valinux.com>
1652
1653         * unix.c (check_if_skip): Free the e2fsck context structure on a
1654                 normal clean filesystem exit, to make it easier to find
1655                 real memory leaks.
1656                 (PRS): Only update the path to include /sbin at the
1657                 beginning if the -c option is given, again to make it
1658                 easier to find memory leaks.
1659                 (main): Move the final print_resource_track call after the
1660                 filesystem and the context are freed.
1661
1662         * journal.c (e2fsck_journal_init_dev): Avoid memory leak if we
1663                 need to search for the journal device.
1664                 (e2fsck_journal_release): Free the journal IO channel when
1665                 we release the journal handle, to avoid a memory leak.
1666
1667         * e2fsck.c (e2fsck_reset_context): Fix bug; only close the io
1668                 channel if it is *different* from the filesystem io
1669                 channel.
1670
1671 2001-07-27  Theodore Tso  <tytso@valinux.com>
1672
1673         * problem.c (PR_1_SET_IMMUTABLE): Clarify problem message.
1674
1675         * pass1.c (e2fsck_pass1): Check for symlinks that have the
1676                 immutable flag set (and offer to clear them).
1677
1678 2001-07-26  Theodore Tso  <tytso@valinux.com>
1679
1680         * pass1.c (e2fsck_pass1): Free ctx->block_ea_map at the end of
1681                 pass 1.
1682
1683 2001-07-25  Theodore Tso  <tytso@valinux.com>
1684
1685         * pass1.c (check_ext_attr): Skip zero-length EA entries.
1686
1687         * problem.c: PR_1_EA_ALLOC_COLLISION shouldn't abort, but should
1688                 prompt to clear the EA block.
1689
1690 2001-07-22  Theodore Tso  <tytso@valinux.com>
1691
1692         * journal.c (ll_rw_block): Use ctx->journal_io instead of the
1693                 filesystem's io_channel.
1694                 (e2fsck_journal_init_dev): New function which supports 
1695                 initialization of the external journal.
1696                 (e2fsck_get_journal): Remove code which flagged an error
1697                 if the superblock reported the use of an external journal.
1698                 (ext3_journal_via_mount): Remove unsued, #ifdefed out function.
1699
1700         * problem.c, problem.h: Removed error codes no longer used
1701                 (PR_0_JOURNAL_UNSUPP_DEV, PR_0_JOURNAL_BAD_DEV,
1702                 PR_0_JOURNAL_UNSUPP_UUID) and replace them with new error
1703                 codes related with failures in loading the external
1704                 journal (PR_0_JOURNAL_UNSUPP_MULTIFS,
1705                 PR_0_CANT_FIND_JOURNAL, PR_0_EXT_JOURNAL_BAD_SUPER).
1706                 Also changed the text assocated with PR_0_JOURNAL_BAD_UUID
1707                 to reflect the case where the external journal isn't
1708                 correct for this filesystem.
1709
1710         * unix.c (PRS), e2fsck.8.in: Add new option -j which allows
1711                 the user to specify the pathname to find the external journal.
1712
1713         * e2fsck.c (e2fsck_reset_context): Close journal_io if it isn't
1714                 the same as the filesystem io_channel.
1715
1716         * e2fsck.h: Add new fields (journal_io and journal_name) in the
1717                 context structure to support external journals.
1718
1719 2001-07-20  Theodore Tso  <tytso@valinux.com>
1720
1721         * unix.c (main): Add an explicit warning when the filesystem is
1722                 left not completely fixed when e2fsck exits.  (Addresses
1723                 Debian bug #104502.)
1724
1725 2001-07-19  Theodore Tso  <tytso@valinux.com>
1726
1727         * pass1.c (check_ext_attr): The entire EA block is now checked to
1728                 make sure that parts of the EA block aren't being used for
1729                 multiple purposes.
1730
1731         * Makefile.in e2fsck.h, region.c: New file which is used to detect
1732                 collisions in extended attribute block.
1733
1734         * problem.h, problem.c (PR_1_EA_MULTI_BLOCK, PR_1_EA_ALLOC_REGION,
1735                 PR_1_EA_ALLOC_COLLISION, PR_1_EA_BAD_NAME,
1736                 PR_1_EA_BAD_VALUE): Add new problem codes.
1737
1738 2001-07-10  Theodore Tso  <tytso@valinux.com>
1739
1740         * journal.c (e2fsck_run_ext3_journal): Only call ext3_flush() if
1741                 the superblock is dirty.
1742
1743 2001-07-07  Theodore Tso  <tytso@valinux.com>
1744
1745         * pass1b.c (pass1b, process_pass1b_block): Change the num_bad
1746                 field calculation so that it only counts EA block entries
1747                 as a single multiply claimed block (since once we clone
1748                 the EA blocks for one inode, we fix the problem for all of
1749                 the other inodes).  Also, I moved the num_bad calculation
1750                 from process_pass1b_block to the end of pass1b.  This
1751                 fixes a *significant* performance bug in pass1b which hit
1752                 people who had to had a lot of multiply claimed blocks.
1753                 (Can you say O(n**3) boys and girls?  I knew you could...
1754                 Fortunately, this case didn't happen that much in actual
1755                 practice.)
1756
1757         * pass1.c (e2fsck_pass1): Defer inodes which have an extended
1758                 attribute block for later processing to avoid extra seeks
1759                 across the disk.
1760                 (process_inode_cmp): If there is no indirect block, sort
1761                 by the extended attribute (i_file_acl) block.
1762
1763         * pass1b.c (clone_file_block): Fix bugs when cloning extended
1764                 attribute blocks.  Moved free of block_buf to after the
1765                 code which clones the extattr block, and fixed logic for
1766                 changing pointers to the extended attribute field in the
1767                 inodes which were affected.
1768                 (decrement_badcount): New function which is used whenever
1769                 we need to decrement the number of files which claim a
1770                 particular bad block.  Fixed bug where delete_file wasn't
1771                 checking check_if_fs_block() before clearing the entry in
1772                 block_dup_map.  This could cause a block which was claimed
1773                 by multiple files as well as the filesystem metadata to
1774                 not be completely fixed.
1775
1776         * pass1.c (adjust_extattr_refcount): Add new function which
1777                 adjusts the reference counts of extended attribute blocks
1778                 if needed, both up and down.
1779                 (e2fsck_pass1): If the refcount or refcount_extra
1780                 structure are present, call adjust_extattr_refcount(),
1781                 and free it afterwards.
1782
1783         * problem.h, problem.c (PR_1_EXTATTR_READ_ABORT, 
1784                 PR_1_EXTATTR_REFCOUNT, PR_1_EXTATTR_WRITE): Add new
1785                 problem codes.
1786
1787 2001-07-02  Theodore Tso  <tytso@valinux.com>
1788
1789         * pass1.c (e2fsck_pass1, check_ext_attr, check_blocks): Add
1790                 initial support for scanning extended attribute blocks.
1791
1792         * e2fsck.c (e2fsck_reset_context): free extended attribute
1793                 refcount structure.
1794
1795         * e2fsck.h: Add new fields for accounting for the extended
1796                 attribute blocks.
1797
1798         * Makefile.in, ea_refcount.c, e2fsck.h: Add new file which
1799                 implements a reference count abstraction.
1800
1801         * problem.c, problem.h: Add new problem codes PR_1_ALLOCATE_REFCOUNT,
1802                 PR_1_READ_EA_BLOCK, PR_1_BAD_EA_BLOCK, PR_2_FILE_ACL_BAD
1803
1804         * message.c: Add "@a" as an abbreviation for "extended attribute"
1805
1806         * pass1b.c (clone_file): Add code which handles cloning an
1807                 extended attribute block.
1808
1809         * pass1b.c (delete_file): 
1810         * pass2.c (deallocate_inode): If the inode contains an extended
1811                 attribute block in the file_acl field, clear it and
1812                 deallocate the block.
1813
1814 2001-06-28  Theodore Tso  <tytso@valinux.com>
1815
1816         * pass2.c (e2fsck_process_bad_inode): Deal with inodes which are
1817                 marked bad because of an invalid file_acl (either because
1818                 EXT2_FEATURE_COMPAT_EXT_ATTR is not set, or because the
1819                 block number in file_acl is bad.
1820
1821 2001-06-29  Theodore Tso  <tytso@valinux.com>
1822
1823         * unix.c (show_stats): Use long long to calculate the percentage
1824                 of the number of blocks in use in the filesystem.
1825
1826 2001-06-23  Theodore Tso  <tytso@valinux.com>
1827
1828         * Release of E2fsprogs 1.22
1829
1830 2001-06-22  Theodore Tso  <tytso@valinux.com>
1831
1832         * flushb.c: Use platform independent method of defining the
1833                 BLKFLSBUF ioctl.  Also include sys/mount.h since on newer
1834                 platforms BLKFLSBUF is defined there.
1835
1836 2001-06-19  Theodore Tso  <tytso@valinux.com>
1837
1838         * super.c (release_inode_blocks): Don't try to release the blocks
1839                 if the orphaned inode is a device file, symlink, or some
1840                 other kind of special file that doesn't have a block list.
1841
1842 2001-06-15  Theodore Tso  <tytso@valinux.com>
1843
1844         * Release of E2fsprogs 1.21
1845
1846 2001-06-13  Theodore Tso  <tytso@valinux.com>
1847
1848         * unix.c (check_if_skip): Adapted patch from Andreas Dilger which
1849                 prints the number of mounts or days elapsed since the last
1850                 check when e2fsck is forced to check an otherwise clean
1851                 filesystem.
1852
1853 2001-06-12  Theodore Tso  <tytso@valinux.com>
1854
1855         * badblocks.c: Stop using the compatibility badblocks function,
1856                 and use the ext2fs_badblocks_* functions instead.
1857
1858 2001-06-11  Theodore Tso  <tytso@valinux.com>
1859
1860         * unix.c (PRS): Fix bug introduced in 1.20 which broke the -F
1861                 flag.
1862
1863         * Makefile.in: Add message.c and swapfs.c to the list of source
1864                 files to build the make depend.
1865
1866         * swapfs.c, unix.c: Only support the -s and -S options to e2fsck
1867                 if ENABLE_SWAPFS is defined.
1868
1869 2001-06-08  Theodore Tso  <tytso@valinux.com>
1870
1871         * recover.c, revoke.c: Synchronize with ext3 0.7a
1872
1873 2001-06-02  Theodore Tso  <tytso@valinux.com>
1874
1875         * recovery.c (scan_revoke_records): Fix bug in recovery code;
1876                 missing byte order conversion.
1877
1878         * pass1.c (mark_inode_bad): Replace alloc_bad_map with a function
1879                 which sets the bit in the bad inode bitmap.
1880                 (e2fsck_pass1): Check for fast symlinks with an invalid
1881                 size, and set the bad inode map in that case.
1882                 (check_size): Check i_size_high for special files and
1883                 prompt to clear it along with i_size if non-zero.
1884
1885         * pass2.c (e2fsck_process_bad_inode): Check for fast symlinks with
1886                 an invalid size and prompt the user if the inode should be
1887                 cleared.
1888
1889         * problem.h, problem.c (PR_2_SYMLINK_SIZE): Added new problem code.
1890
1891 2001-06-01  Theodore Tso  <tytso@valinux.com>
1892
1893         * problem.c, problem.h: Change PR_0_JOURNAL_UNSUPP_INCOMPAT and
1894                 PR_0_JOURNAL_UNSUPP_ROCOMPAT so they aren't fatal errors,
1895                 but prompt to see if the user should abort.  Removed the
1896                 PR_0_JOURNAL_RESET_COMPAT problem code.
1897
1898         * journal.c (e2fsck_journal_load): If there are incompatible
1899                 journal flags, just return an error code.
1900                 (e2fsck_check_ext3_journal): If e2fsck_journal_load
1901                 returns an error code indicating that there are
1902                 incompatible journal flag, check to see if we should
1903                 abort, and then offer to clear the journal.
1904                 (Addresses Debian bug #98527.)
1905
1906         * Makefile.in: Move include/asm/types.h.in to
1907                 lib/ext2fs/ext2_types.h.in.
1908
1909 2001-06-01  Theodore Tso  <tytso@valinux.com>
1910
1911         * pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode, 
1912                 pass1_check_directory): Add a safety check to make sure
1913                 ctx->stashed_inode is non-zero.
1914
1915         * pass1b.c (pass1b): Use e2fsck_use_inode_shortcuts() to disable
1916                 the inode shortcut processing, instead of manually
1917                 clearing only half of the function pointers that needed to
1918                 be NULL'ed out.  This caused nasty bugs if the last inode
1919                 in the filesystem needed dup block processing.
1920                 
1921         * pass1b.c (clone_file_block): When cloning a directory's metadata
1922                 block, don't try to update the directory block list
1923                 database, since indirect blocks aren't stored in the
1924                 database and the resulting error will abort the file clone
1925                 operation.
1926
1927 2001-05-25  Theodore Tso  <tytso@valinux.com>
1928
1929         * Release of E2fsprogs 1.20
1930
1931 2001-05-25  Theodore Tso  <tytso@valinux.com>
1932
1933         * journal.c (e2fsck_journal_reset_super): Remove extraneous line
1934
1935 2001-05-23  Theodore Tso  <tytso@valinux.com>
1936
1937         * journal.c (e2fsck_journal_reset_super): Fix bug; the reset
1938                 journal wasn't getting written out to disk since the dirty
1939                 bit wasn't being set on the buffer.
1940                 (e2fsck_journal_load): Don't print an error message if the
1941                 journal version number is wrong; just return a error code
1942                 reflecting this fact.  If the block type in the journal
1943                 superblcok is obviously not a version number, report the
1944                 journal is corrupted.
1945                 (e2fsck_check_ext3_journal): On an unsupported journal
1946                 version, prompt to abort by default, but then offer a
1947                 chance to clear the journal as corrupt.
1948
1949         * problem.c, problem.h (PR_0_JOURNAL_UNSUPP_VERSION): Added new
1950                 problem code.
1951
1952 2001-05-14  Theodore Tso  <tytso@valinux.com>
1953
1954         * pass1.c: Treat inodes with a low dtime (that were from a
1955                 corrupted orphan list) specially.
1956
1957         * problem.c, problem.h: Add new problem codes PR_1_LOW_DTIME and
1958                 PR_1_ORPHAN_LIST_REFUGEES, and a new latch group,
1959                 PR_LATCH_LOW_DTIME.
1960
1961         * problemP.h: Expand the size of the problem flag to be an int
1962                 instead of a short.  Expand space in the flag word which
1963                 is reserved for problem latch flags from 3 bits to 8 bits.
1964
1965         * e2fsck.h, scantest.c: Change location of ext2_fs.h to be
1966                 ext2fs/ext2_fs.h
1967
1968         * super.c (check_super_block): Be more strict on checking
1969                 s_r_blocks_count superblock field.
1970
1971 2001-05-13  Theodore Tso  <tytso@valinux.com>
1972
1973         * problem.c, problem.h (PR_0_JOURNAL_UNSUPP_ROCOMPAT, 
1974                 PR_0_JOURNAL_UNSUPP_INCOMPAT, PR_0_JOURNAL_RESET_COMPAT):
1975                 New problem codes.      
1976
1977         * journal.c (e2fsck_journal_load): Use a problem code to
1978                 report unsupported feature flags.  There is code to
1979                 clear unsupported flags, but since this is dangerous,
1980                 it's not allowed in the problem code table.
1981         
1982 2001-05-11  Andreas Dilger  <adilger@turbolinux.com>
1983
1984         * journal.c (e2fsck_journal_reset_super): initialize the journal
1985                 sequence number to a random value to avoid recovering
1986                 bad transactions from a corrupt journal.
1987
1988 2001-05-13  Theodore Tso  <tytso@valinux.com>
1989
1990         * journal.c: Code cleanup; initialize journal_enable_debug using
1991                 an initializer.
1992
1993 2001-05-12  Theodore Tso  <tytso@valinux.com>
1994
1995         * unix.c (PRS): Skip validation of -C's file descriptor if it is
1996                 zero, since that is special case.
1997
1998 2001-05-09  Theodore Tso  <tytso@valinux.com>
1999
2000         * super.c (release_orphan_inodes): Add gettext quoting around
2001                 "Truncating" and "Clearing" for i18n.
2002
2003 2001-05-05  Theodore Tso  <tytso@valinux.com>
2004
2005         * util.c (fatal_error): Use the correct magic number when checking
2006                 the magic number for the io_channel data structure.  Also
2007                 remove extraneous call to io_channel_flush() that was left
2008                 over from an editing session.
2009
2010         * pass2.c (check_dir_block): Ignore EXT2_ET_DIR_CORRUPTED errors
2011                 from ext2fs_read_dir_block().
2012
2013 2001-05-01  Theodore Tso  <tytso@valinux.com>
2014
2015         * unix.c (PRS): Validate the completion information file
2016                 descriptor so that the completion bar won't get
2017                 accidentally written onto the disk.
2018
2019         * e2fsck.8.in: Add explanation that you can use mke2fs -n -b
2020                 blocksize to printout alternate superblock locations.
2021
2022 2001-04-26  Theodore Tso  <tytso@valinux.com>
2023
2024         * unix.c (check_if_skip): If the max_mount_count is zero, treat it
2025                 as having no count set.
2026
2027 2001-04-16  Theodore Tso  <tytso@valinux.com>
2028
2029         * super.c (check_super_block): Fix bad calculation of
2030                 inodes_per_block, and tighten min/max checks to be a bit
2031                 more paranoid.  Thanks to Andreas Dilger for pointing out
2032                 this bug.
2033
2034 2001-03-29  Theodore Tso  <tytso@valinux.com>
2035
2036         * journal.c (mark_buffer_uptodate): Add emulation of kernel
2037                 function mark_buffer_uptodate.
2038
2039         * recovery.c, revoke.c: Synchronize with 0.6b ext3 files.
2040
2041 2001-02-12  Theodore Tso  <tytso@valinux.com>
2042
2043         * journal.c (e2fsck_run_ext3_journal): Force a flush of the
2044                 filesystem and io_channel before replaying the journal.
2045
2046 2001-01-17  Theodore Ts'o  <tytso@valinux.com>
2047
2048         * pass1.c (check_blocks): Fix large file checking code so that
2049                 files > 2GB are considered large files, and restrict
2050                 directories from being > 2GB.
2051
2052 2001-01-12  Theodore Ts'o  <tytso@valinux.com>
2053
2054         * journal.c (e2fsck_journal_fix_unsupported_super): Remove unused
2055                 function.  Add FIXME notes to e2fsck_get_journal(), from
2056                 Andreas Dilger.
2057
2058         * pass1.c (e2fsck_pass1): Cap the maximum legal size of a file by
2059                 the limit caused by the fact that i_blocks is in 512 byte
2060                 units, and that the Linux buffer cache also fundamentally
2061                 assumes 512 byte sectors.  
2062                 Make sure that the journal inode is a regular file, and
2063                 when clearing an unused journal inode, make sure the
2064                 icount db is updated.
2065         
2066         * problem.c, problem.h (PR_1_JOURNAL_BAD_MODE): Add new problem code.
2067
2068         * problem.c: For PR_1_RESERVED_BAD_MODE, print a description of
2069                 the reserved inode.  In PR_0_JOURNAL_HAS_JOURNAL, prompt
2070                 to clear the journal, rather than deleting it (which is
2071                 more accurate).  (From Andreas Dilger.)
2072
2073         * journal.c: Make sure all functions which return an error code
2074                 use the errcode_t return type, and not "int"
2075                 (e2fsck_journal_release): Add new parameter, "drop",
2076                 which is used when we just want to deallocate the journal
2077                 without trying to write out any changes.
2078                 (mark_buffer_clean): New function
2079                 (e2fsck_check_ext3_journal): If we fail loading the
2080                 journal, make sure we free all memory associated with it.
2081                 (recover_ext3_journal): If we fail to load the journal or
2082                 initialize the revoke data structures, make sure we free all
2083                 memory associated with the journal.
2084
2085         * message.c (special_inode_name): Add more special inode names
2086                 (From Andreas Dilger)
2087
2088         * util.c (fatal_error): Check to make sure the io_manager data
2089                 structure is sane before trying to flush the io_channel.
2090                 (From Andreas Dilger)
2091
2092         * mtrace.h, super.c, pass2.c: Minor whitespace cleanups, from
2093                 Andreas Dilger.
2094
2095         * journal.c (e2fsck_journal_fix_bad_inode): Set pctx->ino to the
2096                 bad journal number.
2097
2098         * problem.c (PR_0_JOURNAL_BAD_INODE): Use pctx->ino instead of
2099                 pctx->num when printing the bad journal inode number.
2100
2101 2001-01-11    <tytso@snap.thunk.org>
2102
2103         * pass1.c (process_block): Remove dead code which was never
2104                 getting executed.
2105
2106         * iscan.c, unix.c, e2fsck.h: Don't use NOARGS, and use
2107                 ext2fs_sync_device() instead of using BLKFLSBUF.
2108
2109         * flushb.c: Don't use NOARGS anymore; everything is STDC these days.
2110         
2111         * dirinfo.c, e2fsck.h, emptydir.c, iscan.c, jfs_user.h, journal.c,
2112                 message.c, pass1.c, pass1b.c, pass2.c, pass3.c, pass4.c,
2113                 pass5.c, problem.h, scantest.c, super.c, swapfs.c: Change
2114                 ino_t to ext2_ino_t.
2115
2116 2001-01-09    <tytso@snap.thunk.org>
2117
2118         * problem.c: Fix another broken @F vs @f problem.
2119
2120 2001-01-06    <tytso@snap.thunk.org>
2121
2122         * journal.c, pass1.c, pass1b.c, pass3.c, recovery.c, revoke.c,
2123                 super.c, unix.c, util.c: Fix random gcc -Wall complaints.
2124
2125         * jfs_user.h: Use more sophisticated inline handling to allow
2126                 building with --enable-gcc-wall
2127
2128 2001-01-03    <tytso@snap.thunk.org>
2129
2130         * pass1.c (e2fsck_pass1): Moved journal inode handling out to its
2131                 own block; if the journal inode is not in use, and it
2132                 contains data, offer to clear it.
2133
2134         * problem.h, problem.c (PR1_JOURNAL_INODE_NOT_CLEAR): Add new
2135                 problem code.
2136
2137         * problem.c: Modified problem table to use a new abbreviations.
2138
2139         * message.c: Add @j abbreviation for journal, and @v abbreviation
2140                 for device.
2141
2142         * jfs_user.h: Moved contents of jfs_e2fsck.h into jfs_user.h.
2143
2144         * journal.c (e2fsck_check_ext3_journal): Force a fsck if we remove
2145                 the journal stored on a reserved inode.  Also force a fsck
2146                 if the journal appears to exist while !NEEDS_RECOVERY, and
2147                 we forcibly reset the journal.
2148
2149 2001-01-01    <tytso@snap.thunk.org>
2150
2151         * journal.c, pass1.c, super.c, unix.c: Replace use of struct
2152                 ext2fs_sb with struct ext2_super_block.
2153
2154         * pass1.c (check_blocks): Remove use of EXT2_HAS_*_FEATURE macros.
2155
2156 2000-12-31    <tytso@snap.thunk.org>
2157
2158         * jfs_compat.h: Remove uneeded header file.
2159
2160 2000-12-30    <tytso@snap.thunk.org>
2161
2162         * malloc.h, mtrace.c: Renamed malloc.h to mtrace.h to avoid
2163                 conflicts with the system header file.
2164
2165         * problem.h: Fixed numbering of pass1 error messages; an extra 0
2166                 had slipped into some of the numbers.  (Pointed out by
2167                 Andreas Dilger)
2168
2169         * journal.c (e2fsck_journal_fix_corrupt_super): Clean up
2170                 unnecessary automatic variable.  Add explanatory comment
2171                 about the kernel emulation routines.  (Suggested by
2172                 Andreas Dilger)
2173
2174 2000-12-13  Theodore Ts'o  <tytso@valinux.com>
2175
2176         * journal.c (e2fsck_check_ext3_journal): Check to make sure the
2177                 journal fields are consistent if any of the superblock
2178                 fields are set.  (Backs out erroneous change made by sct,
2179                 pointed out by Andreas.)
2180
2181         * unix.c (main): Clarify coments (no code changes)
2182
2183         * super.c (release_orphan_inodes): Fix spelling typo in error message.
2184
2185         * pass1.c (e2fsck_pass1): Offer to update the filesystem revision
2186                 level if we need to set large files flag.  Patch from
2187                 Andreas Dilger.
2188
2189         * super.c (check_super_block): If we have any of the compatibility
2190                  flags set, we need to have a revision 1 filesystem.  Most
2191                  kernels will not check the flags on a rev 0 filesystem
2192                  and we may have corruption issues because of the
2193                  incompatible changes to the filesystem.  Patch from Andreas
2194                  Dilger.
2195
2196         * problem.c, problem.h (PR_0_FS_REV_LEVEL, PR_1_FS_REV_LEVEL): Add
2197                 new problem codes.
2198
2199 2000-12-09    <tytso@snap.thunk.org>
2200
2201         * flushb.c: Fix flushb so that it does something other than waste
2202                 disk space when built on systems with modern header files
2203                 and add a non-subtle Copyright Licensing restriction so
2204                 Yann will remove it from the Debian Distribution.  (Now
2205                 violates the Debian Free Software Guidelines, on purpose.)
2206
2207         * journal.c (e2fsck_check_ext3_journal): If JFS_DEBUG is defined
2208                 at the top level, set the JFS debuging level to 2.
2209
2210         * jfs_e2fsck.h, jfs_user.h: Replaces jfs_compat.h.  The jfs.h file
2211                 has been moved to the include/linux directory.
2212
2213         * journal.c, revoke.c, recovery.c: Updated files from Stephen to
2214                 support the V2 superblock and revoke processing.  The
2215                 journal.c and revoke.c files are copies from the ext3
2216                 kernel source.
2217
2218         * Makefile.in: Added revoke.c to the list of source/object files.
2219
2220 2000-11-16  Theodore Ts'o  <tytso@valinux.com>
2221
2222         * pass1b.c: Change routines to use PR_1B_BLOCK_ITERATE when
2223                 reporting problems rather than using com_err directly.
2224
2225         * problem.c, problem.h (PR_1B_BLOCK_ITERATE): Add new problem code.
2226
2227         * message.c (expand_percent_expression): Add safety check.  If
2228                 ctx->str is NULL, print "NULL" instead of dereferencing
2229                 the null pointer.
2230
2231         * pass1b.c, pass2.c, pass3.c: Change calls to ext2fs_block_iterate
2232                 to ext2fs_block_iterate2, to support 64-bit filesizes and
2233                 to speed things up slightly by avoiding the use of the
2234                 ext2fs_block_iterate's compatibility shim layer.
2235
2236 2000-10-30    <tytso@snap.thunk.org>
2237
2238         * util.c (get_backup_sb): Calculate backup superblock correctly
2239                 when the blocksize is > 1k.
2240
2241 2000-10-26    <tytso@snap.thunk.org>
2242
2243         * jfs.h, jfs_compat.h, journal.c: Updated to include the
2244                 definition of the new journal superblock format; still
2245                 only supports V1 superblocks for now.  (From sct)
2246
2247 2000-10-24    <tytso@snap.thunk.org>
2248
2249         * super.c (release_inode_block, release_inode_blocks,
2250                 release_orphan_inodes): Add code to deal with truncating
2251                 inodes which are still in use (but which are on the orphan
2252                 list because they need truncation).
2253
2254         * problem.c, problem.h: Rename PR_0_CLEAR_ORPHAN_INODE to
2255                 PR_0_ORPHAN_CLEAR_INODE, and remove
2256                 PR_0_ORPHAN_INODE_INUSE.
2257         
2258         * journal.c (e2fsck_run_ext3_journal): Add i18n support, and print
2259                 a message when the journal is being recovered.
2260
2261         * pass1.c (e2fsck_pass1): Don't check the i_mode field for the
2262                 journal inode, if it is in use.
2263
2264 2000-09-12    <tytso@valinux.com>
2265
2266         * extend.c: 
2267         * flushb.c: Add include of nls-enable.h which is necessary so that
2268                 they can compile correctly.
2269
2270 2000-08-22    <tytso@valinux.com>
2271
2272         * unix.c (main): If we're doing a read-only check, skip the
2273                 journal playback, but don't abort the e2fsck run.
2274
2275         * super.c (release_orphan_inodes): Fix typo; should do bounds
2276                 checking on next_ino instead of ino.
2277
2278         * jfs_compat.h (J_ASSERT): 
2279         * journal.c (e2fsck_run_ext3_journal): 
2280         * pass3.c (adjust_inode_count): Use fatal_error() instead of exit().
2281
2282         * unix.c: Use fatal_error() instead of exit() whenever possible.
2283                 Also fix the fsck exit codes so that we use FSCK_USAGE
2284                 when it is appropriate.  Rename global_signal_ctx to
2285                 e2fsck_global_ctx and let it be exported globally.
2286
2287         * util.c (fatal_error): Try to flush the I/O manager before
2288                 forcing an exit.
2289
2290 2000-08-20    <tytso@valinux.com>
2291
2292         * journal.c (e2fsck_journal_load): Fix **nasty** bug which caused
2293                 e2fsck_check_ext3_journal to smash the journal because
2294                 journal->j_transaction_sequence wasn't getting
2295                 initialized.
2296
2297         * journal.c: (recover_ext3_journal, e2fsck_run_ext3_journal): Move
2298                 call to e2fsck_clear_recover from recover_ext3_journal to
2299                 after the filesystem has been closed and reopened.
2300                 Otherwise, the superblock in the filesystem handle will
2301                 probably be stale, and will overwrite the newer version of
2302                 the superblock written by the log recovery.
2303
2304         * message.c (expand_inode_expression): Add support for %Iu and %Ig
2305
2306         * problem.h (PR_0_CLEAR_ORPHAN_INODE): Add new problem code.
2307
2308         * super.c (release_orphan_inodes, release_inode_block,
2309                 release_inode_blocks): Update the block group descriptor
2310                 counts when freeing the orphan inode.  Use
2311                 PR_0_CLEAR_ORPHAN_INODE to report when we clear an orphan.
2312
2313         * journal.c (e2fsck_run_ext3_journal): Fix a bug where we
2314                 attempted to reopen the filesystem using the device name
2315                 instead of the filesystem name.
2316
2317 2000-08-18    <tytso@valinux.com>
2318
2319         * Makefile.in: Update the make dependencies
2320         
2321         * problem.c, problem.h: Add the problem codes: 
2322                 PR_0_ORPHAN_ILLEGAL_BLOCK_NUM, 
2323                 PR_0_ORPHAN_ALREADY_CLEARED_BLOCK, 
2324                 PR_0_ORPHAN_ILLEGAL_HEAD_INODE, 
2325                 PR_0_ORPHAN_ILLEGAL_INODE, PR_0_ORPHAN_INODE_INUSE
2326
2327         * super.c (release_inode_blocks, release_orphan_inodes,
2328                 check_super_block): Add support for clearing orphaned
2329                 inodes from the unmounted filesystem.
2330
2331         * journal.c (e2fsck_recover_ext3_journal): Remove the last orphan
2332                 check; this is now handled in check_super_block ---
2333                 non-journaled filesystems can use the orphan list in the
2334                 future.  Also, move the the re-opening of the filesystem
2335                 to e2fsck_run_ext3_journal().
2336
2337 2000-07-12  Andreas Dilger <adilger@turbolinux.com>
2338
2339         * journal.c: implement loading of ext3 journal for recovery code
2340
2341         * problem.c (fix_problem): return answer from PR_AFTER_CODE to caller.
2342                 Add journal problems.
2343
2344         * recovery.c (journal_recover): user-space ext3 journal recovery code
2345
2346         * unix.c (main) : check journal and do recovery in separate steps
2347
2348 2000-08-07    <tytso@snap.thunk.org>
2349
2350         * unix.c (calc_percent): Make sure that we don't take a floating
2351                 exception if the max value is zero.  (should normally
2352                 never happen, but...)
2353
2354 2000-07-13    <tytso@valinux.com>
2355
2356         * Release of E2fsprogs 1.19
2357
2358 2000-07-06  Theodore Ts'o  <tytso@valinux.com>
2359
2360         * unix.c (check_if_skip): Modify algorithm for checking
2361                 s_max_mnt_count to match with the kernel.  (If
2362                 s_max_mnt_count is negative, ignore the mnt_count check.)
2363
2364         * unix.c (e2fsck_update_progress): Adjust the width of the
2365                 progress bar dynamically, based on the filesystem name
2366                 that we need to display.
2367
2368         * unix.c (main): If the ext3 needs_recovery flag is set, call
2369                 e2fsck_run_ext3_journal() and then restart the e2fsck run.
2370
2371         * journal.c (e2fsck_run_ext3_journal): New file which contains
2372                 logic to recover the ext3 journal.  This version relies on
2373                 the kernel being able to mount the filesystem in order to
2374                 run the journal.
2375
2376 2000-07-05  Theodore Ts'o  <tytso@valinux.com>
2377
2378         * unix.c (e2fsck_update_progress): Only save and check the last
2379                 percentage after multiplying it by 10, nor 1000, since we
2380                 only need to save values to a tenth of a percent (and the
2381                 percentage is already from 0 .. 100%, not 0 .. 1).
2382                 Also, re-arrange the logic so that we do the time
2383                 check only after doing the percentage check, and we
2384                 only advance the spinner if we're about to display it.
2385
2386 2000-07-04  Theodore Ts'o  <tytso@valinux.com>
2387
2388         * pass1.c (e2fsck_pass1): Check to see if the ext3 s_last_orphan
2389                 field is set; if so, clear it, so that ext3 mounting code
2390                 won't get confused by the fact that we've cleared out the
2391                 orphaned inodes.
2392
2393 2000-06-10  Theodore Ts'o  <tytso@valinux.com>
2394
2395         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Add error
2396                 checking for a "should never happen case".
2397
2398         * problem.c, problem.h (PR_5_COPY_IBITMAP_ERROR,
2399                 PR_5_COPY_BBITMAP_ERROR): Add new error codes.
2400
2401 2000-05-27  Theodore Ts'o  <tytso@valinux.com>
2402
2403         * pass1.c (pass1, check_size): Apply patch from Chris Wedgewood
2404                 (cw@foof.org) which checks to see if special devices have
2405                 a non-zero size, and deals with it.
2406
2407         * problem.c, problem.h (PR1_SET_NONZSIZE): Add new problem code.
2408
2409 2000-05-18  Theodore Ts'o  <tytso@valinux.com>
2410
2411         * Makefile.in (install): Create a symbolic link for fsck.ext3 as
2412                 well.
2413
2414 2000-05-08  Theodore Ts'o  <tytso@valinux.com>
2415
2416         * problem.c, problem.h (PR_0_HURD_CLEAR_FILETYPE): Add new problem
2417                 code. 
2418
2419         * super.c (check_super_block): If the OS type in the superblock is
2420                 the Hurd, check to see if the filetype feature is set, and
2421                 offer to clear it if so.   This needs to be done since the
2422                 Hurd doesn't properly support the filetype feature.
2423                 (And since the hurd allows the transmogrification of files
2424                 to special files and vice versa --- for no good reason
2425                 that I can understand --- it can't support the filetype
2426                 feature for the forseeable future, either.)
2427
2428 2000-04-03  Theodore Ts'o  <tytso@valinux.com>
2429
2430         * unix.c: For platforms that don't define optarg.h, manually
2431                 define optarg and optind.
2432
2433 2000-03-20  Theodore Ts'o  <tytso@valinux.com>
2434
2435         * pass1.c (check_immutable, e2fsck_pass1_check_device_inode):
2436                 Check for the append-only as well as the immutable flag.
2437
2438         * problem.c (PR_1_SET_IMMUTABLE): Adjust message to include
2439                 append-only flag.   Fix comment for compression flag.
2440         
2441 2000-02-12    <tytso@snap.thunk.org>
2442
2443         * unix.c (e2fsck_update_progress): Limit the number of updates to
2444                 the progress bars to 8 times a second.  This allows a 9600
2445                 baud console link to keep up.
2446
2447 2000-02-11    <tytso@snap.thunk.org>
2448
2449         * unix.c (main): If compression is enabled on the filesystem,
2450                 print a warning message (for now).
2451
2452         * message.c: Add new compression shortcut: @c == compress
2453
2454         * problem.c, problem.h (PR_1_COMPR_SET): Add new error code.
2455
2456         * pass1.c (check_blocks): If the inode has EXT2_COMPRBLK_FL flag
2457                 set, check to see if the filesystem supports compression.
2458                 If it does pass this information down to process_block()
2459                 so it can treat the compressed block flag words
2460                 correctly.  If not, offer to clear the flag, since it
2461                 shouldn't be set.  
2462                 (process_block): If an inode has the compressed inode flag
2463                 set, allow EXT2FS_COMPRESSED_BLKADDR.
2464
2465         * pass1b.c (process_pass1b_block, delete_file_block,
2466                 clone_file_block):
2467         * pass2.c (deallocate_inode_block): Use HOLE_BLKADDR to check to
2468                 see if the block can be skipped.
2469
2470 2000-02-08    <tytso@snap.thunk.org>
2471
2472         * util.c: Make resource tracking message more concise.
2473
2474         * e2fsck.h:
2475         * pass1.c (mark_table_blocks, e2fsck_pass1): Remove
2476                 ctx->block_illegal_map, since it's not needed by pass1,
2477                 and pass1b has been modified to calculate it manually if
2478                 needed.   This reduces the memory footprint needed by e2fsck.
2479
2480         * pass1b.c (check_if_fs_block): New static function which returns
2481                 whether or not a block overlaps with filesystem metadata.
2482                 This replaces consulting the block_illegal_map bitmap.
2483
2484         * Makefile.in: Call sync after finishing building all in this
2485                 directory. 
2486         
2487         * unix.c (PRS): sync the filesystem before trying to use
2488                 BLKFLSBUF, to minimize the chance of causing dirty blocks
2489                 to get dropped.
2490
2491         * e2fsck.h: Manually define BLKFLSBUF if not defined, and we're on
2492                 a Linux/i386 system.
2493         
2494         * pass3.c (check_directory): Only do the loop detection algorithm
2495                 if we've searched over 2048 parent directories and haven't
2496                 found the end yet.  This means that in the common case, we
2497                 don't allocate or clear the inode_loop_detection bitmap,
2498                 which for large systems, merely clearing the bitmap for
2499                 each directory was turning out to be quite expensive.
2500                 Thanks to Jani Jaakkola (jjaakkol@cs.helsinki.fi) for
2501                 identifying this problem.
2502
2503 2000-02-06  Theodore Ts'o  <tytso@valinux.com>
2504
2505         * badblocks.c, e2fsck.h, ehandler.c, emptydir.c, extend.c,
2506                 flushb.c, iscan.c, message.c, pass1.c, pass1b.c, pass3.c
2507                 pass4.c, pass5.c, problem.c, scantest.c, swapfs.c, 
2508                 unix.c, util.c: Add Internationalization support as 
2509                 suggested by Marco d'Itri <md@linux.it>.
2510
2511 2000-02-02  Theodore Ts'o  <tytso@valinux.com>
2512
2513         * e2fsck.h, flushb.c, scantest.c: Remove uneeded include of
2514                 linux/fs.h 
2515
2516 2000-01-18  Theodore Ts'o  <tytso@valinux.com>
2517
2518         * Makefile.in: Since LIBUUID can sometimes include "-lsocket"
2519                 we need a separate DEPLIBUUID that can be used in
2520                 Makefile's dependency rules.
2521
2522 1999-11-23    <tytso@valinux.com>
2523
2524         * e2fsck.8.in: Update language about where to find a backup
2525                 superblock.
2526
2527 1999-11-19    <tytso@valinux.com>
2528
2529         * pass1.c (process_inodes): Add shortcut handling; if
2530                 process_inodes_count is zero, return right away, to avoid
2531                 calling qsort with a non-positive count.
2532
2533         * message.c (safe_print): Fix to properly display ^A, ^B, etc. and
2534                 to print Delete as ^?
2535
2536         * Makefile.in (distclean): Remove TAGS and Makefile.in.old from
2537                 the source directory.
2538
2539 1999-11-10    <tytso@valinux.com>
2540
2541         * Release of E2fsprogs 1.18
2542
2543 1999-11-10    <tytso@valinux.com>
2544
2545         * problem.c (fix_problem): Support a new flag, PR_PREEN_NO which
2546                 means the answer is assumed to be no in preen mode.  This
2547                 is now used in the PR_1_SET_IMMUTABLE code, so that in
2548                 preen mode we ignore these inodes and just print a warning
2549                 message. 
2550
2551 1999-11-09    <tytso@valinux.com>
2552
2553         * pass1.c (e2fsck_pass1): If the filesystem does not support
2554                 imagic inodes, if an inode has the imagic flag set, offer
2555                 to clear the imagic flag.  If a valid device/fifo/socket
2556                 has the immutable flag set, call the new helper function
2557                 check_immutable() to offerto clear the immutable flag.
2558
2559         * pass2.c (check_filetype): Use the new ext2_file_type() helper
2560                 function instead of calculating the file_type information
2561                 manually.
2562
2563         * pass3.c (e2fsck_reconnect_file): When adding a link to
2564                 lost+found, calculate the filetype information so that
2565                 ext2fs_link() can use the information if applicable.
2566                 (get_lost_and_found): Create the /lost+found directory
2567                 with the correct filetype information if applicable.
2568
2569         * util.c (ext2_file_type), e2fsck.h: New function which returns
2570                 the directory entry file type information given the
2571                 inode's mode bits.
2572
2573         * problem.c, problem.h: Added new problem codes PR_1_SET_IMAGIC
2574                 and PR_1_SET_IMMUTABLE.
2575
2576 1999-11-07    <tytso@valinux.com>
2577
2578         * pass4.c (e2fsck_pass4): Clear inode_imagic_map after freeing it,
2579                 to prevent it from getting freed twice.
2580
2581 1999-11-06    <tytso@valinux.com>
2582
2583         * unix.c (main): Close the filesystem before freeing the context,
2584                 so that in the event of a free()-related segmentation
2585                 violation, the filesystem is properly closed and written
2586                 out.
2587
2588 1999-10-27    <tytso@valinux.com>
2589
2590         * e2fsck.c (e2fsck_reset_context): When freeing
2591                 ctx->inode_reg_map, we weren't zero'ing
2592                 ctx->inode_reg_map, which could cause a segfault later on
2593                 in the e2fsck run.
2594
2595 1999-10-26    <tytso@valinux.com>
2596
2597         * problem.h (PR_2_SPLIT_DOT): Fix excess zero in problem code (now
2598                 matches the standard convention).
2599
2600 1999-10-26    <tytso@valinux.com>
2601
2602         * Release of E2fsprogs 1.17
2603
2604 1999-10-26    <tytso@valinux.com>
2605
2606         * message.c (safe_print): Make safe_print take an char instead of
2607                 an unsigned char to fix gcc warnings.
2608
2609 1999-10-25    <tytso@valinux.com>
2610
2611         * util.c: For NT portability, don't redefine getchar(), since
2612                 stdio defines that.  Instead we introduce a new
2613                 abstract macro read_a_char() which is #defined to the
2614                 right function as necessary.
2615
2616         * problem.c, problem.h (PR_2_NULL_NAME): Add new problem code.
2617
2618         * pass2.c (check_dir_block): Require that the length of the
2619                 directory entry be at least 12 bytes.  Check to see if the
2620                 filename is zero-length, and flag that as an error.
2621
2622 1999-10-22    <tytso@valinux.com>
2623
2624         * Release of E2fsprogs 1.16
2625
2626 1999-10-22    <tytso@valinux.com>
2627
2628         * pass2.c (check_filetype): If the filetype filesystem feature is
2629                 not set, and a directory entry has a dirent feature, offer
2630                 to clear it (since 2.0 kernels will do complain will
2631                 interpret it as a very large name length field).
2632
2633         * problem.c (PR_2_CLEAR_FILETYPE): Add new problem code.
2634
2635 1999-10-21    <tytso@valinux.com>
2636
2637         * e2fsck.8.in: Update man page to use a more standard format (bold
2638                 option flags and italicized variables), as suggested by
2639                 Andreas Dilger (adilger@enel.ucalgary.ca)
2640
2641         * pass4.c (e2fsck_pass4): If an inode is set in the
2642                 inode_imagic_map bitmap, don't check to see if it is
2643                 disconnected from the inode tree (because it almost
2644                 certainly will be).  Free inode_imagic_map at the end of
2645                 pass 4.
2646
2647         * pass2.c (check_dir_block, check_filetype): If the FILETYPE
2648                 feature is set, check the directory entry's filetype
2649                 information field, and fix/set it if necessary.
2650                 (e2fsck_pass2): Free the inode_reg_map bitmap at the end
2651                 of pass 2.
2652
2653         * pass1.c (e2fsck_pass1, alloc_imagic_map): Allocate and fill in
2654                 information for inode_reg_map and inode_imagic_map, which
2655                 indicates which inodes are regular files and AFS inodes,
2656                 respectively.
2657                 Since only the master superblock is written during a
2658                 restart, force that superblock to be used after a restart;
2659                 otherwise changes to the block group descriptors end up
2660                 getting ignored.
2661
2662         * problem.c, problemP.h: If e2fsck is run -n, make def_yn variable
2663                 be 0 for "no".  Add support for a new flag, PR_NO_NOMSG,
2664                 which supresses the problem message if e2fsck is run with
2665                 the -n option.
2666
2667         * problem.c, problem.h (PR_2_SET_FILETYPE, PR_2_BAD_FILETYPE): Add
2668                 new problem codes.
2669
2670         * message.c (expand_dirent_expression): Add support for %dt which
2671                 prints the dirent type information.
2672
2673         * e2fsck.c (e2fsck_reset_context): Free new bitmaps (inode_reg_map
2674                 and inode_imagic_map).
2675
2676         * e2fsck.h (e2fsck_t): Add new inode_reg_map and inode_magic_map
2677                 to the context structure.
2678         
2679 1999-09-24    <tytso@valinux.com>
2680
2681         * unix.c (PRS), util.c (ask_yn): Add #ifdef's to make
2682                 e2fsprogs easier to port to non-Unix platforms.
2683
2684 1999-09-07    <tytso@valinux.com>
2685
2686         * pass3.c (adjust_inode_count): Fix bug where we didn't keep the
2687                 internal and external inode counts in sync when we
2688                 decremented an inode whose link count was already zero.
2689                 Now we skip incrementing or decrementing both link counts
2690                 if we would cause an overflow condition.
2691                 (expand_dir, expand_dir_proc): Change where we update the
2692                 inode block count and size files so that the block count
2693                 field is updated correctly when we create an indirect block.
2694
2695 1999-08-05    <tytso@valinux.com>
2696
2697         * super.c (check_super_block): Check to see whether the
2698                 inodes_per_group value in the superblock is insanely too
2699                 high.
2700
2701 1999-08-02    <tytso@valinux.com>
2702
2703         * pass1b.c (clone_file_block): Don't clear the dup_map flag if
2704                 the block also shares data with the fs metadata when
2705                 the count drops to 1, since the block should still be
2706                 cloned, as fs metadata isn't included in the count.
2707
2708 1999-07-18  Theodore Ts'o  <tytso@valinux.com>
2709
2710         * Release of E2fsprogs 1.15
2711
2712 1999-07-19    <tytso@valinux.com>
2713
2714         * unix.c (usage): Add minimalist emergency help to the usage
2715                 message. 
2716
2717 1999-07-18    <tytso@valinux.com>
2718
2719         * unix.c: Add support for calculating a progress bar if the -C0
2720                 option is given.   The function e2fsck_clear_progbar()
2721                 clears the progress bar and must be called before any
2722                 message is issued.  SIGUSR1 will enable the progress bar,
2723                 and SIGUSR2 will disable the progress bar.  This is used
2724                 by fsck to handle parallel filesystem checks.  Also, set
2725                 the device_name from the filesystem label if it is
2726                 available. 
2727
2728         * e2fsck.h: Add new flags E2F_FLAG_PROG_BAR and
2729                 E2F_FLAG_PROG_SUPRESS.  Add new field in the e2fsck
2730                 structure which contains the last tenth of a percent
2731                 printed for the user.
2732
2733         * message.c (print_e2fsck_message): Add call to
2734                 e2fsck_clear_progbar(). 
2735
2736         * pass1.c (e2fsck_pass1):
2737         * pass2.c (e2fsck_pass2):
2738         * pass3.c (e2fsck_pass3):
2739         * pass4.c (e2fsck_pass4):
2740         * pass5.c (e2fsck_pass5): Add call to e2fsck_clear_progbar when
2741                 printing the resource tracking information.
2742
2743         * pass5.c (check_block_bitmaps, check_inode_bitmaps): If there is
2744                 an error in the bitmaps, suppress printing the progress
2745                 bar using the suppression flag for the remainder of the
2746                 check, in order to clean up the display.
2747
2748 1999-06-30    <tytso@valinux.com>
2749
2750         * unix.c (check_mount): Clean up the abort message displayed when
2751                 the filesystem is mounted and either stdout or stdin isn't
2752                 a tty.
2753
2754 1999-06-25    <tytso@valinux.com>
2755
2756         * e2fsck.h:
2757         * pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode, 
2758                 pass1_check_directory, e2fsck_use_inode_shortcuts): Make
2759                 pass1_* be private static functions, and create new
2760                 function e2fsck_use_inode_shortcuts which sets and clears
2761                 the inode shortcut functions in the fs structure.
2762
2763         * e2fsck.h:     
2764         * pass2.c (e2fsck_process_bad_inode): Make process_bad_inode() an
2765                 exported function.
2766
2767         * pass4.c (e2fsck_pass4): Call e2fsck_process_bad_inode to check
2768                 if a disconnected inode has any problems before
2769                 connecting it to /lost+found.  Bug and suggested fix by 
2770                 Pavel Machek <pavel@bug.ucw.cz>
2771
2772 1999-06-21    <tytso@valinux.com>
2773
2774         * unix.c (main): Add missing space in the disk write-protected
2775                 message. 
2776
2777 1999-05-22    <tytso@rsts-11.mit.edu>
2778
2779         * problem.c, problem.h (PR_0_INODE_COUNT_WRONG): Add new problem
2780                 code. 
2781         
2782         * super.c (check_super_block): Add check to make sure the total
2783                 number of inodes is sane, since this can be calculated
2784                 from the number of groups times the number of inodes per
2785                 group.   Offer to correct it if it is incorrect.
2786
2787 1999-03-19    <tytso@rsts-11.mit.edu>
2788
2789         * pass5.c (check_block_end): Fix fencepost condition where when
2790                 clearing the block padding we were missing the last position
2791                 in the bitmap.
2792
2793 1999-05-17    <tytso@rsts-11.mit.edu>
2794
2795         * unix.c (reserve_stdio_fds): Add safety check in case
2796                 reserve_stdio_fds couldn't open /dev/null.
2797
2798 1999-03-14  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2799
2800         * util.c (print_resource_track): Use mallinfo if present to get
2801                 more accurate malloc statistics.
2802
2803         * pass3.c (get_lost_and_found): Check to see if lost+found is a
2804                 plain file; if so, offer to unlink it.
2805
2806         * problem.c, problem.h (PR_3_LPF_NOTDIR): Add new problem code.
2807
2808 1999-03-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2809
2810         * problem.c: Fix problem message for PR_1_BAD_GROUP_DESCRIPTORS so
2811                 that the block group number is printed.  Add new prompt,
2812                 PROMPT_UNLINK.
2813
2814 1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2815
2816         * Release of E2fsprogs 1.14
2817
2818 1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2819
2820         * message.c (safe_print): New function which prints strings,
2821                 converting non-printable characters using the '^' and
2822                 M-notation.  This function is now used to print directory
2823                 name entries and pathnames.
2824
2825 Mon Jan  4 02:28:59 1999  Theodore Y. Ts'o  <tytso@mit.edu>
2826
2827         * unix.c (main): Reset the context before calling ext2fs_close(),
2828                 to avoid referencing already freed memory.
2829
2830 1998-12-15  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2831
2832         * Release of E2fsprogs 1.13
2833
2834 1998-12-03  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2835
2836         * Makefile.in: Updated dependencies.
2837
2838 1998-11-27  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2839
2840         * pass3.c (get_lost_and_found): If the filesystem is not opened
2841                 read-only, then force /lost+found to be created if it is
2842                 not present.
2843
2844         * problem.c: Allow PR_3_NO_LF_DIR to be handled during a preen
2845                 operation. 
2846
2847 1998-10-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2848
2849         * unix.c (main): Move ext2fs_close() after e2fsck_free_context()
2850                 since e2fsck_free_context may reference data in ctx->fs.
2851
2852         * e2fsck.c (e2fsck_reset_context): Make sure ctx->fs is non-NULL
2853                 before checking ctx->fs->dblist.
2854
2855 1998-10-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2856
2857         * pass1.c (e2fsck_pass1): Use the device check subroutine on
2858                 FIFO's and Socket's, so that we catch bogus immutable inodes.
2859
2860         * pass2.c (process_bad_inode): Process bad socket and fifo's.
2861
2862         * problem.h, problem.c: Define new problem codes PR_2_BAD_FIFO and
2863                 PR_2_BAD_SOCKET.
2864
2865 1998-09-02  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2866
2867         * problem.c: Add PR_3_NO_DIRINFO error code.
2868
2869         * super.c (check_super_value): Rename min and max to min_val and
2870                 max_val to avoid possible cpp macro conflicts.
2871
2872         * pass4.c (e2fsck_pass4): Rename max to maxgroup, to avoid
2873                 possible cpp macro conflicts.
2874         
2875         * pass3.c (e2fsck_pass3): Rename max to maxdirs, to avoid possible
2876                 cpp macro conflicts.
2877                 (check_directory): Fix logic to avoid possible core dump
2878                 in the case of ext2fs_get_dir_info returning NULL.  (By
2879                 the time we get here, it should never happen, but...).
2880                 Also simply/streamline the control flow of the function.
2881
2882 1998-08-17  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2883
2884         * unix.c (check_if_skip): Move the "not cleanly mounted" check
2885                 ahead of the maximal mount and too long since checked tests.
2886                 (reserve_stdio_fds): Make sure 0,1,2 file descriptors are
2887                 open, so that we don't open the filesystem using the same
2888                 file descriptor as stdout or stderr.
2889
2890 1998-08-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2891
2892         * pass2.c (e2fsck_pass2): Fix the progress accounting so that we
2893                 get to 100%.
2894
2895         * pass3.c (e2fsck_pass3): Change progress accounting to be
2896                 consistent with the other e2fsck passes.                
2897
2898         * e2fsck.c (e2fsck_run): At the end of each pass, call the
2899                 progress function with the pass number set to zero. 
2900
2901         * unix.c (e2fsck_update_progress): If the pass number is zero,
2902                 ignore the call, since that indicates that we just want to
2903                 deallocate any progress structures.
2904
2905 1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2906
2907         * Release of E2fsprogs 1.12
2908
2909 1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2910
2911         * unix.c (main): Fix typo in checking the incompat feature set; it
2912                 should be checked against EXT2_LIB_FEATURE_INCOMPAT_SUPP.
2913
2914 1998-07-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2915
2916         * badblocks.c (test_disk): Don't clear the existing bad blocks
2917                 list when using e2fsck -c, since it may cause blocks with
2918                 marginal errors to be dropped from the bad blocks list.
2919
2920 Mon Jul  6 10:32:11 1998  Theodre Ts'o  <tytso@lurch.mit.edu>
2921
2922         * pass1.c (e2fsck_pass1): Use ext2fs_sb structure for
2923                 compatibility with older kernels.
2924
2925 1998-06-25  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2926
2927         * unix.c (e2fsck_update_progress): Remove unused variables.
2928
2929 1998-06-10  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2930
2931         * pass1.c, problem.h: Change blkcnt_t to be e2_blkcnt_t to avoid
2932                 collision with LFS API.
2933
2934         * pass1.c (e2fsck_pass1): Fix bug so that ext2_max_sizes is
2935                 properly initialized.  
2936                 (e2fsck_pass1): Don't allow the the boot loader inode to
2937                 be a directory (clear the inode mode field if so).
2938
2939 1998-05-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2940
2941         * unix.c (PRS): Added new option -C, which causes e2fsck to print
2942                 progress updates so that callers can keep track of the
2943                 completion progress of e2fsck.  Designed for use by
2944                 progress, except for -C 0, which prints a spinning report
2945                 which may be useful for some users.
2946
2947         * pass5.c (e2fsck_pass5): Use a finer-grained progress reporting
2948                 scheme (useful for larger filesystems).
2949
2950         * e2fsck.h: Add progress_fd and progress_pos, for use by the Unix
2951                 progress reporting functions.
2952
2953 1998-04-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2954
2955         * pass1.c (process_inode_cmp): Use EXT2_QSORT_TYPE to define the
2956                 appropriate return type for comparison functions for qsort.
2957
2958         * e2fsck.h: Add #ifdef protection for unistd.h
2959
2960         * super.c: Remove header files already included by e2fsck.h
2961
2962 1998-04-26  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2963
2964         * dirinfo.c (e2fsck_add_dir_info): Update function to pass the old
2965                   size of the memory to be resized to ext2fs_resize_mem().
2966
2967 1998-03-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2968
2969         * Makefile.in: Change to use new installation directory variables
2970                 convention.  Fix uninstall rules to take $(DESTDIR) into
2971                 account.  Remove cat8dir from the installdirs target,
2972                 since modern man package don't necessarily put the cat
2973                 directory in /usr/man/cat?.
2974
2975 1998-03-29  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2976
2977         * super.c, e2fsck.h: Always declare e2fsck_get_device_size() as an
2978                 extern in e2fsck.h to prevent -Wall warnings.
2979
2980         * pass4.c (e2fsck_pass4): Remove unused variable 'j'.
2981
2982 1998-03-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2983
2984         * super.c (check_super_block): Fix broken superblock sanity check
2985                 when calculating blocks_per_group if s_log_frag_size !=
2986                 s_log_block_size.  Since we don't support fragments, this
2987                 isn't a bug deal, but it's good to get it fixed.
2988
2989 1998-03-23  Theodore Ts'o  <tytso@rsts-11.mit.edu>
2990
2991         * unix.c: Fix bug in check of feature set, to make sure we can
2992                 really fix this filesystem.
2993
2994         * problem.h: Make blkcount type to be of type blkcnt_t.  Make the
2995                 num field be a 64 bit type.  Add the problem code
2996                 PR_1_FEATURE_LARGE_FILES
2997
2998         * problem.c: Add table entry for the problem code
2999                 PR_1_FEATURE_LARGE_FILES.
3000
3001         * pass1.c (e2fsck_pass1): A non-zero i_dir_acl field is only
3002                 a problem for directory inodes.  (Since it is also
3003                 i_size_high now.)   If there are no large_files, then
3004                 clear the LARGE_FLAG feature flag.  If there are
3005                 large_files, but the LARGE_FLAG feature flag is not set,
3006                 complain and offer to fix it.
3007                 (check_blocks): Add support to deal with non-directory
3008                 inodes that have i_size_high set (i.e., large_files).
3009                 Don't give an error if a directory has preallocated
3010                 blocks, to support the DIR_PREALLOC feature.
3011                 (process_block, process_bad_block): The blockcnt variable
3012                 is a type of blkcnt_t, for conversion to the new
3013                 block_iterate2.
3014
3015         * pass2.c (process_bad_inode): A non-zero i_dir_acl field is only
3016                 a problem for directory inodes.  (Since it is also
3017                 i_size_high now.)
3018
3019         * message.c (expand_inode_expression): Print a 64-bits of the
3020                 inode size for non-directory inodes.  (Directory inodes
3021                 can only use a 32-bit directory acl size, since
3022                 i_size_high is shared with i_dir_acl.)  Add sanity check
3023                 so that trying to print out the directory acl on a
3024                 non-directory inode will print zero.
3025                 (expand_percent_expression): %B and %N, which print 
3026                 pctx->blkcount and pctx->num, can now be 64 bit
3027                 variables.  Print them using the "%lld" format if
3028                 EXT2_NO_64_TYPE is not defined.
3029
3030         * e2fsck.h: Add the large_flagsfield to the e2fsck context.
3031
3032         * e2fsck.c (e2fsck_reset_context): Clear the large_flags
3033                 field.
3034
3035 Sun Mar  8 23:08:08 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3036
3037         * pass3.c (fix_dotdot_proc): 
3038         * pass2.c (check_dot, check_dotdot, check_name, check_dir_block): 
3039         * message.c (expand_dirent_expression): Mask off the high eight
3040                 bits of the directory entry's name_len field, so that it
3041                 can be used for other purposes.
3042
3043 Fri Feb 27 00:01:39 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3044
3045         * e2fsck.c (e2fsck_run): Since E2F_FLAG_SIGNAL_MASK doesn't
3046                 include EXT2_FLAG_RESTART anymore, we need to adjust this
3047                 routine so that it *does* return in the case of it seeing
3048                 EXT2_FLAG_RESTART.
3049
3050         * pass1.c (e2fsck_pass1): ext2_get_next_inode() may call the group
3051                 done callback function, which may set context abort
3052                 flags.  So we need to test the context abort flags after
3053                 we call ext2_get_next_inode().
3054                 (process_inodes): If we abort due out of process_inodes,
3055                 do a clean exit by breaking out of the for loop instead of
3056                 just returning.
3057
3058         * e2fsck.h (E2F_FLAG_SIGNAL_MASK): EXT2_FLAG_RESTART shouldn't be
3059                 considered a SIGNAL mask (i.e., requiring an immediate
3060                 abort of processing to restart).  FLAG_RESTART just means
3061                 that we want to restart once pass 1 is complete.
3062
3063 Tue Feb 24 15:19:40 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3064
3065         * Change the progress function to return an integer; if returns 1,
3066                 then the progress function is expected to have set the
3067                 e2fsck context flag signalling a user abort, and the
3068                 caller should also initiate a user abort.
3069
3070 Tue Feb 17 19:03:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3071
3072         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Don't call
3073                 end_problem_latch() unless there was actually a problem
3074                 latched.  Simplifies semantics of the latch processing.
3075
3076 Mon Feb 16 17:31:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3077
3078         * e2fsck.h: Add new field, priv_data to the e2fsck context
3079                 structure.  It should be used by callers of the e2fsck
3080                 functions only, and not by anything in e2fsck itself.
3081
3082 Mon Feb 7 17:31:04 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3083
3084         * super.c: Instead of call ext2fs_get_device_size(), define and call
3085                 e2fsck_get_device_size().  (This function may be stubbed
3086                 out in special versions of e2fsck.)
3087
3088         * pass3.c, pass4.c: Remove extra calls to the progress function
3089                 that weren't needed.
3090
3091         * mke2fs.8.in: Update man page to note that the format of the bad
3092                 block file is the same as the one generated by badblocks. 
3093
3094 Sun Feb  1 07:57:14 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3095
3096         * dirinfo.c, e2fsck.c: Don't include com_err.h; it isn't needed.
3097
3098         * e2fsck.h: Include <time.h> since it is needed
3099
3100         * super.c: If EXT2_SKIP_UUID is defined, then skip the UUID
3101                 processing. 
3102
3103 Tue Jan 20 15:37:01 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3104
3105         * unix.c (main): In the case where the filesystem revision is too
3106                 high, print the message about the superblock possibly
3107                 being corrupt.
3108
3109         * e2fsck.8.in: Add expanded comments about how the -b option
3110                 works. 
3111
3112 Sat Jan 17 13:02:16 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3113
3114         * e2fsck.h: If EXT2_FLAT_INCLUDES is defined, then assume all of
3115                 the ext2-specific header files are in a flat directory.
3116
3117         * dirinfo.c, ehandler.c, pass1.c, pass1b.c, pass2.c, pass5.c,
3118                 super.c, swapfs.c, unix.c: Explicitly cast all assignments
3119                 from void * to be compatible with C++.
3120
3121 Tue Jan  6 11:30:24 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3122
3123         * unix.c (sync_disk): Remove sync_disk and calls to that function,
3124                 since ext2fs_close() now takes care of this.
3125
3126 Mon Dec 29 14:45:42 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3127
3128         * pass1.c, pass1b.c, pass2.c, pass3.c, swapfs, badblocks.c,
3129                 ehandler.c, unix.c: Change use of private to be priv_data,
3130                 to avoid C++ reserved name clash.
3131
3132 Fri Nov 28 09:30:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3133
3134         * dirinfo.c (e2fsck_add_dir_info): Use ext2fs_get_num_dirs instead
3135                 of e2fsck_get_num_dirs, which has been removed.
3136
3137 Tue Nov 25 15:54:35 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3138
3139         * Makefile.in (PROGS): Remove @EXTRA_PROGS@, since we don't want
3140                 to compile and install flushb.
3141
3142 Mon Nov 24 06:48:00 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3143
3144         * pass1.c (e2fsck_pass1_check_device_inode): For now, only check
3145                 to make sure the extra i_blocks in a device are cleared if
3146                 the immutable flag is set.
3147
3148         * util.c (print_resource_track): Fix typo which caused the
3149                 time/resource tracking to print "Pass 1 :" instead of
3150                 "Pass 1: ".
3151
3152 Thu Nov 20 16:02:23 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3153
3154         * pass3.c (expand_directory): Fix bug which could cause core dump
3155                 when expanding the directory, and the bitmaps hadn't yet
3156                 been read in.  Also, only use ext2fs_write_dir_block when
3157                 writing a directory block, not when writing out a fresh
3158                 indirect block.
3159
3160 Wed Nov 19 16:15:44 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3161
3162         * pass1.c (process_bad_block): Fix bug where first_block wasn't
3163                 getting incremented, which caused user to get a
3164                 "Programming error?" warning if there was a bad block in a
3165                 non-primary superblock/group_descriptor.  Also fixed
3166                 another bug so that ext2fs_bg_has_super() is consulted, to
3167                 avoid problems when using a filesystem with the
3168                 sparse_groups option set and there are bad blocks at the
3169                 beginning of a group which doesn't have a superblock.
3170
3171 Thu Nov  6 16:10:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3172
3173         * pass1.c, pass2.c, pass3.c, pass4.c, pass5.c: Add calls to the 
3174                 progress indicator function.
3175
3176         * pass1.c (scan_callback): Add call to the progress feedback
3177                 function (if it exists).
3178
3179 Tue Nov  4 09:45:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3180
3181         * super.c (check_super_block): Skip the device size check if the
3182                 get_device_size returns EXT2_EXT_UNIMPLEMENTED.
3183
3184         * iscan.c (main): Don't use fatal_error() anymore.
3185
3186         * pass1b.c, swapfs.c, badblocks.c: Set E2F_FLAG_ABORT instead of
3187                 calling fatal_error(0).
3188
3189         * problem.c, pass3.c (PR_3_ROOT_NOT_DIR_ABORT, 
3190                 PR_3_NO_ROOT_INODE_ABORT): New problem codes.
3191         
3192         * problem.c, pass2.c (PR_2_SPLIT_DOT): New problem code.
3193
3194         * problem.c, pass1.c (PR_1_SUPPRESS_MESSAGES): New problem code.
3195         
3196         * problemP.h: New file which separates out the private fix_problem
3197                 data structures.
3198
3199         * util.c, dirinfo.c, pass1.c, pass1b.c, pass2.c, pass5.c, super.c,
3200                 swapfs.c util.c: allocate_memory() now takes a e2fsck
3201                 context as its first argument, and rename it to be
3202                 e2fsck_allocate_memory().
3203
3204 Mon Nov  3 14:35:29 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3205
3206         * unix.c (main): Add a special case check for the error code EROFS
3207                 and display an appropriate error message for this case.
3208
3209         * [lots of files]:  Change ext2fs_read_inode, ext2fs_write_inode
3210                 to take the e2fsck context as their first argument.
3211                 Change dir_info.c routines to take an e2fsck_context,
3212                 renamed them to start with e2fsck_ to avoid namespace
3213                 issues, and changed them to store the directory
3214                 information inside the e2fsck context.
3215                 Added e2fsck_run() which calls all of the e2fsck passes in
3216                 the correct order, and which handles the return of abort
3217                 codes.  Added abort processing, both via setjmp/longjmp
3218                 and via flags in the e2fsck context.  Use a flag in the
3219                 e2fsck context instead of the restart_e2fsck global
3220                 variable.   Change uses of free and malloc to
3221                 ext2fs_free_mem and ext2fs_get_mem.
3222         
3223 Fri Oct 31 01:12:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3224
3225         * pass1.c, pass3.c: Rename new error codes to _ET_ in them for
3226                 consistency.
3227
3228 Sat Oct 25 00:10:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3229
3230         * pass3.c (get_lost_and_found): Check error return of 
3231                 EXT2_FILE_NOT_FOUND instead of ENOTDIR
3232
3233         * pass1.c (pass1_check_directory): Return EXT2_NO_DIRECTORY
3234                 instead of ENOTDIR
3235
3236 Fri Oct 24 00:12:39 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3237
3238         * unix.c (PRS): Make the variable which getopt returns into be
3239                 an int, so that it won't lose on platforms where char is
3240                 unsigned. 
3241
3242         * pass1b.c (clone_file): Fix bug in error reporting in the case
3243                 where cs.errcode is non-zero.
3244
3245 Sun Oct 19 21:12:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3246
3247         * pass*.c, super.c, unix.c, util.c, e2fsck.h: Place #ifdef
3248                 RESOURCE_TRACK around code which uses init_resource_track
3249                 and print_resource_track.  (Not all systems have timeval)
3250
3251         * super.c: Remove excess #includes which are not necessary.
3252
3253         * e2fsck.h: Add #ifdef's for HAVE_SYS_TYPES_H and HAVE_SYS_TIME_H
3254
3255 Fri Oct  3 13:40:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3256
3257         * pass*.c, super.c: Massive changes to avoid using printf and
3258                 com_err routines.   All diagnostic messages are now routed
3259                 through the fix_problem interface.
3260
3261 Sat Sep  6 17:13:28 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3262
3263         * pass2.c (check_dir_block): Check for duplicate '.' and '..'
3264                 entries. 
3265
3266         * problem.c, problem.h: Add new problem codes PR_2_DUP_DOT and
3267                 PR_2_DUP_DOT_DOT.
3268
3269 Tue Sep  2 09:04:51 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3270
3271         * problem.c: Added new problem codes for some of the
3272                 superblock corruption checks, and for the pass header
3273                 messages.  ("Pass 1: xxxxx")
3274
3275         * util.c (print_resource_track): Now takes a description
3276                 argument. 
3277
3278 Mon Aug 25 10:23:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3279
3280         * super.c, unix.c, e2fsck.c: New files to separate out the
3281                 operating-specific operations out from e2fsck.c.  
3282                 e2fsck.c now contains the global e2fsck context management
3283                 routines, and super.c contains the "pass 0" initial
3284                 validation of the superblock and global block group
3285                 descriptors. 
3286
3287         * pass1.c, pass2.c, pass3.c, pass4.c, pass5.c, util.c: Eliminate
3288                 (nearly) all global variables and moved them to the e2fsck
3289                 context structure.
3290
3291         * problem.c, problem.h: Added new problem codes PR_0_SB_CORRUPT,
3292                 PR_0_FS_SIZE_WRONG, PR_0_NO_FRAGMENTS,
3293                 PR_0_BLOCKS_PER_GROUP, PR_0_FIRST_DATA_BLOCK
3294
3295 Thu Aug 14 10:55:21 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3296
3297         * message.c: Add compression for the word "Illegal"
3298
3299         * problem.c: Added entries for PR_2_BAD_CHAR_DEV and
3300                 PR_2_BAD_BLOCK_DEV
3301
3302 Wed Aug 13 09:55:57 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3303
3304         * pass1.c (pass1, check_device_inode), pass2.c
3305                 (process_bad_inode): Use a more stringent test for a valid
3306                 device.
3307
3308 Sun Aug 10 18:58:02 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3309
3310         * e2fsck.c (check_mount): Add stronger warning message about the
3311                 perils of running e2fsck on a mounted filesystem.
3312
3313 Tue Jun 17 01:33:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3314
3315         * Release of E2fsprogs 1.11
3316
3317 Thu Jun 12 00:25:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3318
3319         * pass1.c (mark_table_blocks): Mark the superblock and group
3320                 descriptor blocks first, so that any conflicts between
3321                 these and the bitmap or inode table blocks is noticed.
3322
3323         * problem.c: Fix message printed out when a block or inode bitmap
3324                 conflicts with other fs data, has the correct group number
3325                 in it.
3326
3327 Tue Jun 10 12:07:37 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3328
3329         * pass2.c (pass2): Check the error return from ext2fs_dblist_iterate.
3330
3331 Thu May  8 22:45:27 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3332
3333         * e2fsck.8.in: Fix minor typos and grammer oops found by Bill
3334                 Hawes (whawes@star.net).
3335
3336         * badblocks.c (read_bad_blocks_file): Pass the blocksize to the
3337                 bad blocks command so that all of the filesystem gets
3338                 tested in the case where the blocksize 2048 or 4096.
3339
3340 Thu Apr 24 12:16:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
3341
3342         * Release of E2fsprogs version 1.10
3343
3344 Mon Apr 21 22:43:08 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3345
3346         * pass1b.c (pass1b): While scanning for inodes, simply skip inodes
3347                 where ext2fs_get_next_inode returns the 
3348                 EXT2_ET_BAD_BLOCK_IN_INODE_TABLE error.
3349
3350 Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3351
3352         * Release of E2fsprogs version 1.09
3353
3354 Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3355
3356         * Release of E2fsprogs version 1.08
3357
3358 Thu Apr 10 13:51:16 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3359
3360         * pass1b.c (clone_file_block): If we clone a directory, we need to
3361                 update the dblist entry so that we check (and correct) the
3362                 right directory block.
3363
3364 Sun Apr  6 09:13:12 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3365
3366         * pass1.c (process_block): Don't clear blocks references to
3367                 filesystem metadata; let pass 1B handle this case.
3368
3369         * problem.c, problem.h: Add new problem, PR_1B_SHARE_METADATA.
3370
3371         * pass1b.c (pass1d): Deal with a block which is shared with
3372                 filesystem metadata.
3373
3374         * e2fsck.h: Make block_illegal_map be a global variable
3375
3376 Sat Apr  5 11:51:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3377
3378         * e2fsck.c, pass1.c (mark_table_blocks): Support the sparse_super
3379                 feature.
3380                 (get_backup_sb): New function which attempts to obtain the
3381                 correct backup superblock (if possible).
3382
3383 Fri Apr  4 10:46:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3384
3385         * e2fsck.c (main): Check the version of the library, and warn if
3386                 the library is out of date; this happens generally due to
3387                 users who manually install e2fsprogs.
3388
3389         * pass1.c (pass1_get_blocks): If the passed in inode number for
3390                 get_blocks isn't what we're expecting pass back
3391                 EXT2_ET_CALLBACK_NOT_HANDLED.
3392
3393 Wed Mar 12 13:32:05 1997  Theodore Y. Ts'o  <tytso@mit.edu>
3394
3395         * Release of E2fsprogs version 1.07
3396
3397 Tue Mar 11 10:31:47 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3398
3399         * icount.c: New file which implements an inode count abstraction.
3400                 This significantly reduces amount of memory needed to
3401                 check really large filesystems.
3402
3403         * pass1.c, pass2.c, pass3.c, pass4.c: Modified to use the icount
3404                 abstraction.
3405
3406 Fri Mar  7 08:28:55 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3407
3408         * dirinfo.c (dir_info_iter): New function which allows iteration
3409                 over the directories in the dir_info map.
3410
3411         * pass3.c (pass3, check_directory): Speed up pass 3 by iterating
3412                 over all directories in the dir_info structure, instead of
3413                 iterating all inodes looking for directories, and then
3414                 looking up the directories using get_dir_info().
3415
3416 Sat Feb  1 11:33:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3417
3418         * pass1.c (pass1, process_block): 
3419         * pass2.c (pass2): Use the ext2_dblist abstraction instead of
3420                 manual code to manage the directory block list information.
3421
3422         * pass1.c (check_blocks), pass1b.c (pass1b), pass2.c
3423                 (deallocate_inode): Call the ext2 library routine
3424                 ext2_inode_has_valid_blocks() instead of
3425                 inode_has_valid_blocks().
3426
3427         * swapfs.c (swap_inodes): Add check so that we don't try to call
3428                 swap_inode_blocks unless the inode has valid blocks.
3429                 (Otherwise a long fast symlink might cause
3430                 swap_inode_blocks to erroneously get called.)
3431
3432 Wed Jan 22 14:42:53 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3433
3434         * problem.c, problem.h: Added entries for PR_2_DOT_NULL_TERM and
3435                 PR_2_DOT_DOT_NULL_TERM.
3436
3437         * pass2.c (check_dot, check_dot_dot): Make sure the new . and
3438                 .. entries are null-terminated, since the 2.0 kernel
3439                 requires this (for no good reason).
3440
3441 Mon Jan 20 20:05:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3442
3443         * pass1.c (pass1): Set the EXT2_SF_SKIP_MISSING_ITABLE flag so
3444                 that we can recover from missing inode tables.
3445
3446         * dirinfo.c (get_dir_info): If there are no directories in the
3447                 dir_info abstraction, don't core dump (because dir_info is
3448                 NULL).
3449
3450         * e2fsck.c (main): Don't try using the backup superblocks if there
3451                 aren't any.
3452                 (check_super_block): If there are illegal inode table or
3453                 bitmaps, set the filesystem as being in error.
3454
3455 Wed Jan 15 11:32:01 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3456
3457         * pass2.c (check_dir_block): Added check to make sure that rec_len
3458                 is a a multiple of 4 (so that the directory entries are
3459                 4-byte aligned).
3460
3461 Sat Dec 28 12:16:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3462
3463         * Makefile.in (uninstall): Uninstall all programs in the PROGS
3464                 line.
3465                 (PROGS): Don't build and install the extend program by
3466                 default. 
3467         
3468
3469 Sat Dec  7 16:41:02 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3470
3471         * pass1.c (process_inodes): Make sure the stashed_ino variable is
3472                 saved and restored as well.
3473                 (pass1): For fast sym links, skip the check_blocks
3474                 processing step altogether.
3475
3476 Mon Dec  2 09:28:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3477
3478         * problem.c, message.c: New files, to completely refurbish how
3479                 filesystem problems are reported to the user.  The
3480                 diagnostic messages are now encoded out in an easily
3481                 customizable, extensible format.  The messages printed out
3482                 in preen mode are all on one line, and contain the device
3483                 name.
3484
3485 Fri Nov 29 20:26:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3486
3487         * swapfs.c (swap_inodes): When swapping a filesystem, ignore
3488                 deleted files.
3489
3490         * pass1.c (pass1): Ignore missing inode table errors during the
3491                 scan, and just skip past those inodes.
3492
3493         * pass3.c (check_root): Remove root_ino argument, and assume that
3494                 the root inode must be EXT2_ROOT_INO.  Move responsibility
3495                 of setting the parent of the root inode in the directory
3496                 inode structure to pass2().
3497
3498         * pass2.c (check_dir_block): Don't allow links to the root
3499                 directory.  
3500
3501         * dirinfo.c (add_dir_info): Remove last argument to add_dir_info,
3502                 since the inode is no longer used.
3503
3504 Tue Oct 15 00:06:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3505
3506         * e2fsck.c (main): If the superblock magic number is wrong, or the
3507                 block group fails a sanity check, then automatically
3508                 restart trying to use the backup superblocks.
3509
3510         * pass1.c (mark_table_blocks): Make the inode tables ahead of
3511                 everything else; in the case where a bitmap block overlays
3512                 the inode table, the inode table should take precedence.
3513
3514         * pass2.c (maybe_clear_entry): Make the deleted/unused error
3515                 message fit on one line, since the error can happen during
3516                 a preen pass.  (We eventually need to revamp the whole
3517                 e2fsck error reporting and prompting system, but that's a
3518                 job for another day.)
3519
3520 Mon Oct 14 22:29:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3521
3522         * e2fsck.c (main): Read in the list badblocks into fs->badblocks
3523                 for the benefit of the inode scan functions. 
3524
3525         * pass1.c (pass1): If ext2fs_get_next_inode() returns an error
3526                 indicating that an inode is in a bad block, mark that
3527                 inode as being used, as well as in the inode "bb" map.
3528
3529         * pass2.c (maybe_clear_entry): New function which generalizes the
3530                 error cases when a directory entry needs to be cleared.
3531                 (check_dir_block): If an inode is in the "bb" map, offer
3532                 to clear the directory entry, since the inode is in a bad
3533                 block.
3534
3535         * pass4.c (pass4): If an inode is marked as used, but is is marked
3536                 in the "bb" map, don't process it as a disconnected inode.
3537
3538 Tue Oct  8 02:02:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3539
3540         * Release of E2fsprogs version 1.06
3541
3542 Mon Oct  7 00:45:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3543
3544         * e2fsck.c (main): Print out the version number of the shared
3545                 library when using the -V option.
3546
3547         * swapfs.c (swap_filesys): Change EXT2_SWAP to EXT2_FLAG_SWAP for
3548                 consistency's sake.
3549
3550         * e2fsck.c (main): By setting EXT2_FLAG_MASTER_SB_ONLY, only write
3551                 out the backup superblocks when we know we have a valid
3552                 filesystem.
3553
3554 Tue Oct  1 22:00:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3555
3556         * util.c (preenhalt): Make it explicit on preenhalt that running
3557                 e2fsck manually means without the -a or -p flag.
3558
3559 Fri Sep 27 14:41:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3560
3561         * pass1.c (pass1): Add support for the EXT2_BOOT_LOADER inode.
3562                 (Linux/FT actually sets the mode bits, so we have to
3563                 handle it specially.)
3564
3565         * e2fsck.c (check_if_skip): Print a message if the filesystem is
3566                 just dirty, so that the user knows that it's about to be
3567                 checked (since this will take a while).
3568
3569 Mon Sep 16 17:00:01 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3570
3571         * pass4.c: If a disconnected inode is zero-length, prompt to
3572                 delete it instead of connecting it to lost+found.
3573
3574 Thu Sep 12 15:23:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3575
3576         * Release of E2fsprogs version 1.05
3577
3578 Fri Aug 30 20:24:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3579
3580         * pass4.c (pass4): If the user refuses to connect an unattached
3581                 inode to lost+found, don't try to set i_links_count.  This
3582                 is bad, since if the user says yes, the inode will be
3583                 marked as unused, which is not necessarily the right
3584                 thing, especially since the rest of the cleanup doesn't
3585                 happen here.
3586
3587         * pass2.c (deallocate_inode): Set inode_link_info[ino] when
3588                 dellocating an inode.  (Not strictly necessary, but...)
3589
3590         * pass4.c (pass4): Add "bonehead" explanation to the "programming
3591                 error" message.
3592
3593 Tue Aug 27 11:26:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3594
3595         * e2fsck.c (PRS,main): Added new options -s and -S.  -s will
3596                 byte-swap the filesystem so that it is normalized.  -S
3597                 will byte-swap the filesystem regardless of its current
3598                 byte-order.
3599
3600         * swapfs.c: New file, which will byte-swap a filesystem.
3601
3602 Tue Aug 20 09:41:37 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3603
3604         * pass1.c (pass1): Change handling on files with non-zero dtime
3605                 and non-zero i_link_count; before we treated them as
3606                 deleted file per botched ext2 0.3c kernel behavior.  We
3607                 now clear dtime instead.
3608
3609 Mon Aug 19 23:33:57 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3610
3611         * e2fsck.c (main): If e2fsck sets the clean bit, even if
3612                 nothing else is changed, make sure FSCK_NONDESTRUCT is
3613                 set (since after all having the filesystem set to
3614                 invalid is an error.  :-)
3615
3616 Fri Aug  9 10:25:13 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3617
3618         * pass1.c (process_block): Make sure that meta data doesn't get
3619                 accidentally set in the dir_blocks array (which could
3620                 happen in some error condtions).
3621         
3622         * pass1.c (pass1): 
3623         * pass2.c (process_bad_inode): Check for fragments in a
3624                 OS-independent fashion.
3625
3626 Thu Aug  8 15:20:54 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3627
3628         * e2fsck.c (check_if_skip): Close the filesystem when skipping the
3629                 cleanup for the filesystem.
3630
3631 Mon Jul 22 22:03:28 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3632
3633         * e2fsck.c: Improve corrupt_msg, so that it's less confusing.
3634
3635 Thu May 16 11:12:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3636
3637         * Release of E2fsprogs version 1.04
3638
3639 Wed May 15 21:41:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
3640
3641         * e2fsck.c (relocate_hint): Issue a hint that the user may wish to
3642                 try "e2fsck -b 8193" before allowing e2fsck to relocate
3643                 inode table blocks.
3644
3645         * Makefile.in (e2fsck): Build e2fsck statically or dynamically
3646                 depending on the option to configure.  Added targets for
3647                 e2fsck.static and e2fsck.shared for people who want to
3648                 build a static or shared variant manually.
3649
3650 Wed Mar 27 00:33:40 1996    <tytso@rsts-11.mit.edu>
3651
3652         * Release of E2fsprogs version 1.03
3653
3654 Tue Mar 26 12:03:42 1996    <tytso@rsts-11.mit.edu>
3655
3656         * e2fsck.c (show_stats): Don't use floating point to display
3657                 percentage of non-contiguous files, as different libc
3658                 handle result truncation differently, and this causes the
3659                 test suite to bomb out depending on which libc you are
3660                 using.
3661
3662         * util.c (allocate_memory): Fix error message to omit extraneous
3663                 %%s.
3664
3665 Tue Mar  5 03:50:40 1996    <tytso@rsts-11.mit.edu>
3666
3667         * pass4.c (pass4): 
3668         * pass2.c (check_dir_block): 
3669         * pass1.c (pass1): Add support for dynamic first inode revision.
3670
3671 Wed Feb 14 16:27:30 1996    <tytso@rsts-11.mit.edu>
3672
3673         * pass3.c (check_root): Fix spelling typo
3674
3675 Mon Feb  5 22:30:30 1996    <tytso@rsts-11.mit.edu>
3676
3677         * e2fsck.c (check_super_block): If the superblock fails certain
3678                 internal consistency checks, exit with a fatal error after
3679                 printing the "superblock is corrupt message".
3680
3681 Wed Jan 31 11:06:08 1996    <tytso@rsts-11.mit.edu>
3682
3683         * Release of E2fsprogs version 1.02
3684
3685 Wed Dec 15 21:24:26 1996    <tytso@rsts-11.mit.edu>
3686
3687         * pass1.c (process_block): Check to see if a file is "fragmented".
3688                 i.e., non-contiguous.  Note that any file which is larger
3689                 than the block group is guaranteed to be non-contiguous.
3690                 We may want to use a different hueristic for deciding
3691                 whether or not a file is "fragmented".
3692
3693         * e2fsck.c (show_stats): Print statistics of how many
3694                 non-contiguous files are on the system.
3695
3696 Fri Dec 15 19:19:47 1995    <tytso@rsts-11.mit.edu>
3697
3698         * badblocks.c (read_bad_blocks_file, test_disk): Fold
3699                 functionality of test_disk() (which runs badblocks) into
3700                 read_bad_blocks_file(); test_disk() now calls
3701                 read_bad_blocks_file() with a NULL bad_blocks_file
3702                 argument.
3703
3704 Mon Nov 20 18:30:10 1995    <tytso@rsts-11.mit.edu>
3705
3706         * e2fsck.c (check_mount): Use #if defined(__linux__) instead of
3707                 #if defined(linux).  The latter won't work if we're
3708                 compiling -ansi.
3709
3710 Mon Oct 30 20:31:17 1995    <tytso@rsts-11.mit.edu>
3711
3712         * e2fsck.c (check_mount): For Linux systems, the check to see if
3713                 the root is mounted read-only has to be done for all
3714                 filesystems, not just for the root filesystem, due to the
3715                 way that some /etc/rc scripts are set up.
3716
3717 Thu Oct 26 12:05:30 1995    <tytso@rsts-11.mit.edu>
3718
3719         * Makefile.in (install): Strip programs when they are installed.
3720                 (e2fsck): Build e2fsck statically.
3721
3722 Wed Oct 25 21:18:16 1995    <tytso@rsts-11.mit.edu>
3723
3724         * util.c (preenhalt): Preenhalt now takes an argument, which is an
3725                 ext2fs_filsys; this allows it to set the EXT2_ERROR_FS
3726                 flag in the superblock in cases where preenhalt is called.
3727                 All calls to preenhalt() were changed to either
3728                 preenhalt(fs) or preenhalt(NULL) in a few cases where the
3729                 fs pointer was not available.  (Most notable, for block
3730                 read/write errors.)
3731
3732 Mon Sep  4 21:41:03 1995  Remy Card  <card@bbj>
3733
3734         * ehandler.c:
3735           util.c: Include <sys/time.h> before <sys/resource.h>.  BSD needs it.
3736
3737 Mon Sep  4 10:14:49 1995    <tytso@rsts-11.mit.edu>
3738
3739         * e2fsck.c (show_stats): Show statistics about how many inodes
3740                 have indirect, doubly indirect, and triply indirect
3741                 blocks.  Allow up to 8 digits for statistics, instead of
3742                 merely 6, so things look pretty for large filesystems.
3743
3744         * pass1.c (pass1): Keep statistics about indirect, doubly
3745                 indirect, and triply indirect blocks.
3746
3747         * pass1.c (unwind_pass1): Clear the above statistics when unwinding
3748                 pass 1.
3749
3750 Fri Aug 18 15:17:10 1995  Theodore Y. Ts'o  <tytso@dcl>
3751
3752         * util.c, ehandler.c: Move #include of <sys/resource.h> after
3753                 #include of "e2fsck.h", since sys/resource.h may depend on
3754                 sys/time.h, which is #included in e2fsck.h.
3755
3756 Thu Aug 17 22:33:37 1995    <tytso@rsts-11.mit.edu>
3757
3758         * e2fsck.c (check_mount):  Use the new ext2fs_check_if_mounted()
3759                 function to determine if the device is mounted.
3760
3761         * e2fsck.c (main):  Add better error messages if ext2fs_open()
3762                 fails. 
3763
3764 Wed Aug 16 16:25:02 1995    <tytso@rsts-11.mit.edu>
3765
3766         * pass1.c (check_blocks): If we're clearing a directory, clear
3767                 pb.is_dir so we don't do the following check of making
3768                 sure the directory size matches; this is pointless, since
3769                 we've already cleared the inode.
3770
3771 Fri Aug 11 09:08:54 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
3772
3773         * pass1.c (bad_primary_block): New function, called by
3774                 process_bad_block, which explains the facts of life to the
3775                 user when a block in the primary superblock or primary
3776                 group descriptors is bad.
3777
3778         * pass2.c (check_dot): Handle the case where the first directory
3779                 entry is used, but not ".".
3780
3781         * pass2.c (check_dotdot): Handle the case where the second directory
3782                 entry is used, but is not "..".
3783
3784 Thu Aug 10 10:05:10 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
3785
3786         * e2fsck.c (check_super_block): Get the size of the physical
3787                 device and if it is smaller than the reported size of the
3788                 filesystem, report an error.
3789
3790 Sat Aug 12 03:39:18 1995  Remy Card  <card@bbj>
3791
3792         * e2fsck.c (check_if_skip): Print the number of allocated files and
3793                 blocks on clean filesystems.
3794
3795 Fri Aug 11 14:15:36 1995  Remy Card  <card@bbj>
3796
3797         * e2fsck.8: Updated date and version number.
3798
3799 Thu Aug 10 14:26:01 1995  Remy Card  <card@bbj>
3800
3801         * pass1.c (check_blocks): Check that directory size matches *exactly*
3802                 the count of allocated blocks.
3803
3804 Wed Aug  9 21:21:24 1995  Theodore Y. Ts'o  <tytso@dcl>
3805
3806         * pass1b.c (pass1d): Free the shared[] array when we're done with
3807                 it to avoid a memory leak.
3808
3809         * pass1.c (unwind_pass1): Use ext2fs_free_block_bitmap to free the
3810                 block_dup_map.
3811
3812         * pass2.c (process_bad_inode): When clearing the inode, make sure
3813                 the pathname is freed, to prevent a memory leak.
3814
3815         * pass5.c (check_inode_bitmaps): Free free_array and dir_array
3816                 when we're finished with them.
3817                 (check_block_bitmaps): Free free_array when we're finished
3818                 with them.
3819
3820         * Makefile.in (e2fsck, flushb): Use $(LD) instead of $(CC) when
3821                 linking the executable.
3822
3823         * pass2.c (process_bad_inode): Even on OS's that don't support the
3824                 fragment fields, make sure the Linux equivalent fields are
3825                 set to zero.  If an OS wants to reuse these fields, which
3826                 is probably a bad idea (although we may get desperate in
3827                 the future) this code will have to be changed.
3828
3829         * pass1.c (dir_block_cmp): If the block numbers are equal, compare
3830                 on the inode field, and then blockcnt field.  This is just
3831                 to keep the ordering of dir_blocks the same on all
3832                 platforms when there are more than on missing directory
3833                 blocks, which are indicated directories with holes, which
3834                 are indicated with the block number being set to zero.
3835
3836 Sun Aug  6 15:40:58 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
3837
3838         * pass1.c (check_blocks, process_block): check_blocks() modified
3839                 to call the ext2fs_block_iterate() with BLOCK_FLAG_HOLE if
3840                 the inode is a directory.  process_block() now checks to
3841                 see if a directory has a "hole", or missing block.  If so,
3842                 this fact is recorded in the directory block list so that
3843                 the problem can be resolved in pass #2.
3844
3845         * pass2.c (allocate_dir_block): Added allocate_dir_block() to
3846                 allocate new blocks for directories with "holes".  Called
3847                 out of check_dir_block if a block in the directory block
3848                 list is zero.
3849
3850         * pass3.c (get_lost_and_found): Move location of free(block) to
3851                 prevent possible memory leak.
3852
3853 Sat Aug  5 12:42:22 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
3854
3855         * pass2.c (check_dir_block): Use a automatic, fixed-saize array
3856                 instead of alloca() --- alloca is not portable!  Check to
3857                 make sure the filename is not longer than EXT2_NAME_LEN,
3858                 and offer to fix it by truncating it, since it should
3859                 never happen.
3860
3861         * e2fsck.c (PRS): Use malloc() instead of alloca() --- alloca() is
3862                 not portable!!  In any case putenv() in some systems must
3863                 take a static character array or malloc()'ed memory;
3864                 passing memory allocated using alloca() to putenv() is not
3865                 advisable.
3866
3867         * pass2.c (check_dot, check_dotdot): Use malloc() instead of
3868                 alloca() --- alloca() is not portable!!!
3869
3870 Tue Jul 18 20:04:02 1995    <tytso@rsx-11.mit.edu>
3871
3872         * pass1b.c (pass1c): 
3873         * pass3.c (check_root, get_lost_and_found): 
3874         * pass2.c (check_dir_block): Use ext2fs_{read,write}_dir_block
3875                 to read/write the directory block.
3876
3877 Mon Jul 17 04:00:56 1995    <tytso@rsx-11.mit.edu>
3878
3879         * util.c (ask_yn): Apply patch supplied by Peter A. Zaitcev to
3880                 make sure VMIN and VTIME are set correct.
3881
3882 Fri Jul 14 19:26:29 1995    <tytso@rsx-11.mit.edu>
3883
3884         * pass1.c (mark_block_used): Change to be an inline function.
3885                 Assume that the block validity checks are already done,
3886                 and use the fast variant of the bitmap functions.
3887
3888 Thu Jul 13 08:10:55 1995    <tytso@rsx-11.mit.edu>
3889
3890         * pass5.c (check_block_bitmaps, check_inode_bitmaps): Check the
3891                 bounds of the bitmaps in advance, and then use the fast
3892                 variant of e2fs_test_{block,inode}_bitmap.
3893
3894         * pass1.c (mark_block_used): Use ext2_fast_mark_block_bitmap since
3895                 the bounds checking has already been done earlier.
3896
3897 Wed Jul 12 02:22:46 1995    <tytso@rsx-11.mit.edu>
3898
3899         * pass1.c (pass1): Allocate and free the block_illegal_map, which
3900                 is used for shortcut processing in process_block.
3901                 (mark_table_blocks): Initialize block_illegal_map with the
3902                 filesystem blocks.
3903                 (describe_illegal_block): New helper function that
3904                 describes why a block is illegal.
3905                 (process_block): Use block_illegal_map as a shortcut
3906                 to determine whether a block is bad.  Use
3907                 describe_illegal_block to print out why the block is illegal.
3908
3909 Mon Jun 12 19:11:06 1995  Theodore Y. Ts'o  (tytso@dcl)
3910
3911         * flushb.c: Don't include <linux/fs.h> if it doesn't exist.
3912
3913         * scantest.c: Don't include <linux/fs.h>, <getopt.h>, or
3914                 <mntent.h> if they don't exist.  (Mostly so that "make
3915                 depend" works.)
3916
3917         * pass1.c, pass1b.c, pass3.c, badblocks.c: Include <errno.h> (if
3918                 it exists).
3919
3920         * e2fsck.c, scantest.c: Don't include <getopt.h> if it doesn't
3921                 exist. 
3922
3923 Mon Jun 12 08:37:49 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
3924
3925         * pass2.c (process_bad_inode, check_for_zero_long,
3926                 check_for_zero_char):  Change long to u32, and char to u8.
3927
3928 Sun Jun 11 15:05:57 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
3929
3930         * util.c (inode_has_valid_blocks): 
3931         * pass2.c (process_bad_inode): 
3932         * pass1.c (pass1, check_blocks, pass1_check_directory): Use
3933                 LINUX_S_IS* instead of S_IS*.
3934
3935         * e2fsck.h: Don't #include <sys/stat.h>
3936
3937         * flushb.c (main): Add #ifdef BLKFLSBUF around ioctl.  (Although
3938                 this program is pretty much useless if BLKFLSBUF isn't
3939                 supported.)
3940
3941         * e2fsck.c, badblocks.c: Add #include <errno.h>, since errno is
3942                 used.
3943
3944 Thu Jun  8 12:31:19 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>
3945
3946         * pass2.c (check_dot, check_dotdot, check_dir_block): Use alloca
3947         to allocate space for file names instead of using fixed size buffers.
3948         (process_bad_inode): Only check inode frag fields if
3949         HAVE_EXT2_FRAGS is defined (by configure).
3950         * pass1.c (pass1): Only check the inode frag fields if
3951         HAVE_EXT2_FRAGS is defined (by configure).
3952
3953         * e2fsck.c (check_mount): Only check for a mounted filesystem if
3954         HAVE_MNTENT_H is defined (by configure).
3955         (PRS): Use alloca to allocate the new path string, instead of
3956         having a fixed size buffer (which was the wrong size anyway).
3957         (PRS): Only support the -F (flush) option if the BLKFLSBUF ioctl
3958         is defined.
3959
3960         * e2fsck.h: Only include <linux/fs.h> if HAVE_LINUX_FS_H is
3961         defined (by configure).
3962
3963         * Makefile.in: Rewritten to conform to GNU coding standards and
3964         support separate compilation directories.
3965
3966 Thu Apr  6 15:04:36 1995  Remy Card  <card@bbj.ibp.fr>
3967
3968         * pass1.c (pass1): Test the mode in reserved inodes (must be zero).
3969
3970 Sat Mar 11 13:12:16 1995  Theodore Y. Ts'o  <tytso@localhost>
3971
3972         * pass1.c (unwind_pass1): Clear the file type statistics counter
3973                 when pass 1 needs to be restarted from scratch.
3974
3975         * pass1.c (handle_fs_bad_blocks): Fix bug where bitmap blocks were
3976                 being reallocated to blocks in the next block group,
3977                 instead of the current block grup.
3978
3979         * pass1.c (pass1, check_blocks): Set inode_link_info[ino] whenever
3980                 inode.i_links_count is set.
3981
3982 Tue Feb 14 01:38:04 1995  Theodore Y. Ts'o  (tytso@rt-11)
3983
3984         * pass1.c (process_block): Add checks for if the block is
3985                 trepassing on a superblock or group descriptor table.
3986
3987 Sat Dec 31 00:52:11 1994    <tytso@rsx-11.mit.edu>
3988
3989         * main.c (corrupt_msg): Extend the message which is printed out
3990                 when the superblock is corrupt, to include the suggestion
3991                 of using the -b option to specify an alternate superblock.
3992
3993 Thu Nov 24 09:29:58 1994  Theodore Y. Ts'o  (tytso@rt-11)
3994
3995         * badblocks.c (read_bad_blocks_file): If we are adding or
3996                 replacing bad blocks in the bad blocks inode, sanity check
3997                 the bad block inode first, and clear out any illegal blocks.
3998
3999         * pass2.c (check_name): Don't bomb out if the attempt to get the
4000                 pathname of the containing directory returns an error; the
4001                 directory may be too badly damaged to expect that
4002                 ext2fs_get_pathname will always succeed.  Use "???" if the
4003                 pathname can't be obtained (it's only for a printf to the
4004                 user anyway).
4005
4006                 The name of the containing directory and the bad filename
4007                 were incorrectly interchanged in the user message.  Fixed.
4008
4009         * pass2.c (check_name, check_dir_block): Use a common static
4010                 string for the unknown pathname.
4011
4012 Mon Nov  7 22:30:54 1994  Remy Card  <card@bbj>
4013
4014         * Fixed lots of printf formats to make sure that block and inode
4015         numbers are printed as unsigned integers.
4016
4017 Mon Oct 24 14:10:46 1994    (tytso@rsx-11)
4018
4019         * pass5.c (check_block_end): Fix calculation of how the last block
4020                 in the block bitmap should be calculated.
4021
4022 Wed Sep  7 10:01:13 1994    (tytso@rsx-11)
4023
4024         * pass1b.c (pass1_dupblocks): Fix declaration of dup_inode_map to
4025                 be an ext2fs_inode_bitmap, and free it properly.
4026
4027         * e2fsck.h
4028         * e2fsck.c (main): Folded in Remy Card's changes to add a revision
4029         level to the superblock.
4030
4031 Wed Aug 17 22:00:20 1994  Remy Card  (card@bbj)
4032
4033         * e2fsck.c (usage): Fixed bogus usage message.
4034
4035 Wed Aug 17 11:21:45 1994  Theodore Y. Ts'o  (tytso@rt-11)
4036
4037         * pass1.c (process_bad_block): Fixed bug so that blocks in the
4038         backup superblocks and group descriptors are handled gracefully.
4039