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