1 2006-10-02 Theodore Tso <tytso@mit.edu>
3 * e2fsck.conf.5.in: Minor correction to man page.
4 (Addresses Debian bug #369761)
6 2006-10-01 Theodore Tso <tytso@mit.edu>
8 * Makefile.in (DEPLIBBLKID): Use DEPLIBBLKID not LIBBLKID to
9 define the dependencies used by the blkid library.
11 2006-08-30 Eric Sandeen <esandeen@redhat.com>
13 * pass1.c (handle_bad_fs_blocks): use blk_t, not int for first_block.
15 2006-08-30 Eric Sandeen <esandeen@redhat.com>
17 * unix.c (show_stats): use ext2_ino_t for inode containers.
19 2006-08-30 Eric Sandeen <esandeen@redhat.com>
21 * pass1.c (new_table_block, handle_fs_bad_blocks):
22 * super.c (check_super_block):
23 Use new inlines to calculate group first & last blocks.
25 2006-08-30 Eric Sandeen <esandeen@redhat.com>
27 * e2fsck.h (e2fsck): Use unsigned types for filesystem counters.
28 * emptydir.c (add_empty_dirblock):
30 * unix.c (show_stats, check_if_skip): Fix printf formats.
32 2006-08-30 Eric Sandeen <esandeen@redhat.com>
34 * pass1.c (handle_fs_bad_blocks): Remove unused variables.
36 2006-08-30 Eric Sandeen <esandeen@redhat.com>
38 * pass1b.c (check_if_fs_block): Change block group loop to use
39 a common pattern of first_block/last_block, etc.
41 * super.c (check_super_block): Avoid overflows when iterating over
42 group descriptors on very large filesystems
44 2006-08-30 Theodore Tso <tytso@mit.edu>
46 * pass5.c (check_inode_bitmaps, check_inode_end, check_block_end):
47 * pass4.c (e2fsck_pass4): Fix potential overflow problems when the
48 number of blocks is close to 2**31.
50 2006-08-29 Theodore Tso <tytso@mit.edu>
52 * super.c (release_inode_blocks): Fix silly spelling error.
53 (Addresses SourceForge Bug: #1531372)
55 2006-05-29 Theodore Tso <tytso@mit.edu>
57 * pass1b.c: Add missing semicolon when HAVE_INTPTR_T is not defined
59 2006-05-22 Theodore Tso <tytso@mit.edu>
61 * e2fsck.8.in: Fixed spelling mistake. (Addresses Debian Bug:
64 2006-05-14 Theodore Tso <tytso@mit.edu>
66 * recovery.c (do_one_pass), journal.c (e2fsck_get_journal): Add
67 missing brelse() calls to avoid memory leaks in error
68 paths. (Thanks to Michael C. Thompson for pointing these
69 out; they were originally found using Coverity.)
71 2006-05-13 Theodore Tso <tytso@mit.edu>
73 * badblocks.c (read_bad_blocks_file): Pass the private option -X
74 to badblocks so that e2fsck -cc will work correctly.
76 2006-05-08 Theodore Tso <tytso@mit.edu>
78 * pass5.c (check_block_bitmaps, check_inode_bitmaps): Add support
79 for the lazy_bg feature; if the block group does not have
80 an initialized block or inode bitmaps/table, emulate what
81 the allocation bitmap would look like if no blocks or
82 inodes have been allocated.
84 2006-03-27 Theodore Ts'o <tytso@mit.edu>
86 * e2fsck.8.in: Add badblocks(8) to the See Also section.
87 (Addresses Debian Bug: #347295)
89 * Makefile.in, e2fsck.conf.5.in: Add man page documenting the
90 configuration file /etc/e2fsck.conf.
92 2006-03-22 Theodore Ts'o <tytso@mit.edu>
94 * profile.c (profile_update_file, profile_parse_file, parse_line,
95 parse_std_line): Integrate profile_std_line() into
96 parse_line(), and profile_parse_file() into
97 profile_update_file() to make the code tighter.
99 2006-03-18 Theodore Ts'o <tytso@mit.edu>
101 * unix.c (show_stats): Use blk_t instead of int when referring to
104 * emptydir.c, message.c, pass1b.c, pass2.c, recovery.c, unix.c:
105 Change printf statements to use %u instead of %d when
106 printing block numbers.
108 * unix.c (main): If the filesystem is not mounted, open the
109 filesystem in exclusive mode (to prevent 2.6 kernels from
110 mounting the filesystem while it is being checked).
112 2006-03-10 Theodore Ts'o <tytso@mit.edu>
114 * e2fsck.h, journal.c (e2fsck_fix_ext3_journal_hint),
115 problem.c (PR_0_EXTERNAL_JOURNAL_HINT),
116 problem.h (PR_0_EXTERNAL_JOURNAL_HINT), super.c: Check
117 to see if the superblock hint for the external journal
118 needs to be updated, and if so, offer to update it.
119 (Addresses Debian Bug: #355644)
121 2006-01-29 Theodore Ts'o <tytso@mit.edu>
123 * unix.c (check_if_skip): When skipping a check due to being on
124 battery, print an explanatory message to this effect. Add
125 an e2fsck configuration option defer_check_on_battery
126 which defaults to true. If the configuration option is
127 turned off, then e2fsck will not attempt to defer
128 filesystem checks when the system is running on battery.
129 (Addresses Debain Bug: #350306)
131 2006-01-06 Theodore Ts'o <tytso@mit.edu>
133 * profile.c (parse_std_line, dump_profile): Add support for
134 quoted strings in tag and section names. Changed
135 top-level section name parsing to ignore leading and
138 2006-01-05 Theodore Ts'o <tytso@mit.edu>
140 * profile.c (profile_init): If a directory is passed to
141 profile_init, then read all files which match [0-9a-zA-Z]*
142 in sort order. This allows handling of /etc/foo/conf.d
145 2006-01-04 Theodore Ts'o <tytso@mit.edu>
147 * profile.c: Eliminate the prf_data_t data structure and fold it
148 back into prof_file_t. Eschew needless complexity!
150 * profile.c: Change syntax accepted by the profile parser. The
151 value of profile relations must not contain spaces unless
152 it is quoted; otherwise the parser will throw an error.
153 Comments are allowed anywhere and can be started with
154 either a ';' or a '#' character. The only place where
155 comments will not be intepreted as beginning a comment is
158 * profile.c (profile_parse_file, profile_set_syntax_err_cb): Add
159 support for a syntax error callback to allow better error
160 reporting to the user.
162 * e2fsck(PRS): Set a profile syntax error callback so we can
163 report errors in /etc/e2fsck.conf.
165 2006-01-02 Theodore Ts'o <tytso@mit.edu>
167 * profile.c, profile_helpers.c, profile_helpers.h: Boil down and
168 simplify profile.c, and move extra functionality that's
169 not needed into profile_helpers.c
171 2006-01-01 Theodore Ts'o <tytso@mit.edu>
173 * profile.c: Fix #include of com_err.h so that it isn't required
174 that the com_err development environment be installed.
175 (Addresses Debian Bug: #345519)
177 2005-12-31 Theodore Ts'o <tytso@mit.edu>
179 * problem.c (fix_problem), problemP.h: Add the ability for the
180 e2fsck configuration file to override the behaviour of
181 e2fsck when a particular filesystem problem is
182 encountered. This allows reconnecting an inode to
183 lost+found to not stop the boot sequence, if a system
184 administrator really badly wants this behaviour for some
185 specialized reason, for example.
187 * unix.c (main): If the e2fsck configuration file sets the
188 allow_cancellation option to be true, then if the
189 filesystem does not have any known problems, and was known
190 to be cleanly unmounted, then let e2fsck exit with a
191 status code of 0 instead of 32 (FSCK_CANCELED) so that the
192 bootup scripts will continue without stopping the boot.
193 (Addresses Debian Bug: #150295)
195 2005-12-30 Theodore Ts'o <tytso@mit.edu>
197 * e2fsck.c (e2fsck_free_context), unix.c (PRS), e2fsck.h: Use
198 the profile library to read in the /etc/e2fsck.conf file
201 * profile.c, profile.h, prof_err.et: Add the profile library code
202 to e2fsck. The profile library was originally written by
203 Theodore Ts'o in 1995 for use in the MIT Kerberos v5
204 library. It has been modified/enhanced/bug-fixed over
205 time by other members of the MIT Kerberos team. This
206 version was originally taken from the Kerberos v5
207 distribution, version 1.4.2, and radically simplified for
208 use in e2fsprogs. (Support for locking for multi-threaded
209 operations, being able to modify and update the
210 configuration file programmatically, and Mac/Windows
211 portability have been removed. It has been folded into a
212 single C source file to make it easier to fold into an
213 application program.)
215 * argv_parse.c, argv_parse.h: Added auxiliary programs used only
216 for building the profile test program.
218 2005-12-18 Theodore Ts'o <tytso@mit.edu>
220 * problem.c (PR_0_FUTURE_SB_LAST_MOUNT,
221 PR_0_FUTURE_SB_LAST_WRITE): Make these problems things
222 which can be fixd by preen, since Debian's boot sequence
223 bogusly doesn't set the time correctly until potentially
224 very late in the bootup process, and this can cause false
225 positives that will cause users' systems to fail to
226 booting. (Addresses Debian Bugs #343662 and #343645)
228 2005-12-09 Theodore Ts'o <tytso@mit.edu>
230 * e2fsck.8.in: Clarify that e2fsck -c does a read-only scan of the
233 * unix.c (PRS): Fix typo in error message; thanks to Solar
234 Designer for pointing out the missing preposition.
235 (check_mount): Don't let the user run e2fsck -ccn on the
236 root partition, without warning that he or she might
237 be doing something Really Stupid.
239 * e2fsck.8.in: Clarify description of differences between the -p,
242 2005-09-24 Theodore Ts'o <tytso@mit.edu>
244 * super.c (check_super_block), problem.c, problem.h: Detect if the
245 superblock's last mount field or last write field is in
246 the future, and offer to fix if so. (Addresses Debian Bug
249 2005-07-25 Theodore Ts'o <tytso@mit.edu>
251 * unix.c (main): Fix a use-after-free bug of the e2fsck context
252 structure at the very end of the e2fsck run.
254 * pass1.c (pass1_write_inode): Fix false positive from valgrind;
255 don't do a needless structure copy via an assignment when
258 2005-07-04 Theodore Ts'o <tytso@mit.edu>
260 * problem.c: Remove period from the Pass 1C header, to be
261 consistent with the other Pass headers.
263 * pass2.c (e2fsck_process_bad_inode): Fixed bug which could cause
264 e2fsck to core dump if a disconnected inode contained an
265 extended attribute. This was actually caused by two bugs.
266 The first bug is that if the inode has been fully fixed
267 up, the code will attempt to remove the inode from the
268 inode_bad_map without checking to see if this bitmap is
269 present. Since it is cleared at the end of pass 2, if
270 e2fsck_process_bad_inode is called in pass 4 (as it is for
271 disconnected inodes), this would result in a core dump.
272 This bug was mostly hidden by a second bug, which caused
273 e2fsck_process_bad_inode() to consider all inodes without
274 an extended attribute to be not fixed. (Addresses Debian
277 2006-06-30 Theodore Ts'o <tytso@mit.edu>
279 * Release of E2fsprogs 1.38
281 2005-06-20 Theodore Ts'o <tytso@mit.edu>
283 * unix.c (usage, parse_extended_opts): Clean up messages printed
284 by e2fsck for grammar and consistency.
286 2005-06-19 Theodore Ts'o <tytso@mit.edu>
288 * e2fsck.8.in: Make it clear that the -c, -l, and -L options are
289 never safe to use on a mounted filesystem, and in general,
290 running e2fsck on mounted filesystems is a bad idea.
292 2005-06-16 Theodore Ts'o <tytso@mit.edu>
294 * message.c: Add @m (multiply-claimed) and @n (invalid)
297 * problem.c: Clean up the problem messages displayed by e2fsck,
298 mostly based on suggestions from Benno Schulenberg.
300 2005-06-05 Theodore Ts'o <tytso@mit.edu>
302 * e2fsck.8.in: Add a request to the REPORTING BUGS section of the
303 man page to make sure that e2fsck's messages are printed
304 in English, and to send a raw e2image filesystem dump if
307 2005-05-05 Theodore Ts'o <tytso@mit.edu>
309 * badblocks.c (check_bb_inode_blocks): Clean up warning printf.
310 Thanks to Benno Schulenberg for the patch. (Addresses
311 Sourceforge Bug: #1189803)
313 2005-04-16 Theodore Ts'o <tytso@mit.edu>
315 * e2fsck.8.in: Fix spelling mistakes in man pages. (Addresses
316 Debian Bugs: #304593)
318 2005-04-14 Theodore Ts'o <tytso@mit.edu>
320 * pass1b.c (pass1d): Don't offer to clone or delete the resize
321 inode; it's not allowed!
323 * e2fsck.c, e2fsck.h, journal.c, pass1.c, pass1b.c, pass2.c,
324 pass3.c, pass4.c, super.c, unix.c: Use a centrally stored
325 current time for "now" which can be overridden using the
326 E2FSCK_TIME environment variable, for better
327 reproducibility for regression tests.
329 2005-04-06 Theodore Ts'o <tytso@mit.edu>
331 * pass1.c (e2fsck_pass1): If the superblock last mount time (not
332 just the last write time) looks insane, then assume that
333 we can't do the LOW_DTIME checks.
335 2005-03-21 Theodore Ts'o <tytso@mit.edu>
337 * Release of E2fsprogs 1.37
339 2005-03-21 Theodore Ts'o <tytso@mit.edu>
341 * message.c, pass1.c, problem.c, problem.h, util.c: Integrate code
342 from Alex Thomas at Clusterfs to check extended attributes
345 * message.c (expand_inode_expression): Add support for %IS in
346 problem descriptions. Note that this only works if the
347 problem context has a pointer to a large inode!
349 * problem.h, problem.c (PR_1_EXTRA_ISIZE, PR_1_ATTR_NAME_LEN,
350 PR_1_ATTR_VALUE_OFFSET, PR_1_ATTR_VALUE_BLOCK,
351 PR_1_ATTR_VALUE_SIZE, PR_1_ATTR_HASH): Add new problem
354 * util.c (e2fsck_write_inode_full): New function.
356 * pass1.c (check_ea_in_inode, check_inode_extra_space): New
357 function which tests the validity of extended attributes
358 stored in a large inode.
359 (e2fsck_pass1): Call ext2fs_get_next_inode_full() instead
360 of get_next_inode(), and use an allocated inode which is
361 big enough to store extra portion of large inodes.
363 2005-03-20 Theodore Ts'o <tytso@mit.edu>
365 * super.c (check_super_block): Add sanity checks for the
366 superblock's inode_size field.
368 * pass3.c (check_root, e2fsck_get_lost_and_found): Call
369 ext2fs_write_new_inode() instead of ext2fs_write_inode().
371 * pass1.c (check_blocks): Move counting the extended attribute
372 block earlier so that we don't have to worry about
373 num_blocks wrapping for files which are too big.
375 2006-02-05 Theodore Ts'o <tytso@mit.edu>
377 * Release of E2fsprogs 1.36
379 2005-02-04 Theodore Ts'o <tytso@mit.edu>
381 * pass2.c (e2fsck_pass2), problem.c (PR_2_HTREE_FCLR), problem.h
382 (PR_2_HTREE_FCLR): Remove support for
383 --enable-clear-htree; this was only needed during the
384 early development of the htree patch.
386 2005-01-28 Theodore Ts'o <tytso@mit.edu>
388 * pass2.c (e2fsck_process_bad_inode): Fix a corner case involving
389 big-endian systems, long symlinks and i_file_acl set when
390 it shouldn't be. Without this bugfix, f_clear_xattr will
391 fail on big-endian machines.
393 * super.c (check_resize_inode): Deal with the case where the
394 resize inode can't be read; don't try to recreate the
395 resize inode unless the resize feature is actually
398 2005-01-27 Theodore Ts'o <tytso@mit.edu>
400 * super.c (check_resize_inode): If the resize inode has a zero
401 i_links_count or isn't a regular file, consider the resize
402 inode as invalid, and offer to recreate it.
404 * pass2.c (e2fsck_process_bad_inode): Offer to clear i_file_acl
405 before checking to see if an invalid inode should be
406 removed, since otherwise the fast symlink detection code
407 can get confused. Also clear the inode's entry in
408 inode_bad_map if the inode has been completely fixed.
409 (Addresses Red Hat Bugzilla #146284)
411 2005-01-25 Theodore Ts'o <tytso@mit.edu>
413 * unix.c (main, check_if_skip): Set the valid flag earlier, and if
414 it is cleared by the superblock tests, then assume that
415 the filesystem contains errors and must be checked.
417 * super.c (check_super_block): Check the individual block group
418 inode and block free counts, as well as the filesystem
419 inode and block free counts. If any of the block/inode
420 free counts is too large, force a full filesystem check.
421 (Addresses Debian Bug: #291571)
423 2005-01-19 Theodore Ts'o <tytso@mit.edu>
425 * unix.c (e2fsck_simple_progress): Use fixed integer math
426 to check to see if we're at 0 or 100%
427 (is_on_batt): Clean up gcc -Wall warning
428 (main): Remove dead code
430 2005-01-13 Matthias Andree <matthias.andree@gmx.de>
432 * unix.c: Do not call closedir if the handle is zero, to avoid
433 crashes when the /proc/acpi/ac_adapter directory is
434 missing, for instance on non-ACPI or non-Linux systems.
436 2005-01-09 Theodore Ts'o <tytso@mit.edu>
438 * pass1b.c: As part of converting configure.in from using the
439 "broken by design" 2.13 version of AC_CHECK_TYPE to
440 AC_CHECK_TYPES, if intptr_t isn't defined, manually
441 typedef it to long. (Addresses Debian Bug #289133)
443 2005-01-06 Theodore Ts'o <tytso@mit.edu>
445 * super.c (check_resize_inode): Use ext2fs_{read,write}_ind_block
446 so that byte swapping is handled on big-endian systems.
447 (check_super_block): Allow the number of reserved blocks
448 to be 50% of the number of blocks available, in order to
449 be consistent to what is allowed by tune2fs.
451 2004-12-24 Theodore Ts'o <tytso@mit.edu>
453 * pass1.c (e2fsck_pass1): At the end of the pass 1 processing, if
454 we have been signalled to do so, recreate the resize inode.
456 * super.c (check_resize_inode): New function which checks to make
457 sure the resize inode is valid. It is called by
458 check_super_block(). If it is invalid, it will signal to
459 pass1.c that the resize inode needs to recreate.
461 * e2fsck.h (E2F_FLAG_RESIZE_INODE): New flag
463 * problem.c, problem.h (PR_0_RESIZE_INODE_INVALID,
464 PR_1_RESIZE_INODE_CREATE): Add new problem codes.
466 2004-12-23 Theodore Ts'o <tytso@mit.edu>
468 * swapfs.c (swap_inodes): Since swap_inodes bypasses the inode
469 cache for speed reasons, we must flush it to avoid cache
472 2004-12-16 Theodore Ts'o <tytso@mit.edu>
474 * super.c (check_super_block): If the resize_inode feature is not
475 set, check to make sure that s_reserved_gdt_blocks is
476 zero, and that the resize inode is clear.
478 * problem.h (PR_0_NONZERO_RESERVED_GDT_BLOCKS,
479 PR_0_CLEAR_RESIZE_INODE): Add new problem codes.
481 2004-12-15 Theodore Ts'o <tytso@mit.edu>
483 * pass1.c (process_block): Applied resize inode patch. Mark the
484 DIND block of the resize inode as being in use.
486 2004-12-14 Theodore Ts'o <tytso@mit.edu>
488 * Makefile.in: Move strip command to install-strip target.
489 Use Linux-kernel-style makefile output for "make install"
491 * Makefile.in (installdirs): Use $(MKINSTALLDIRS) macro.
492 Remove sync in the "all" target.
494 2004-11-30 Theodore Ts'o <tytso@mit.edu>
496 * message.c (expand_inode_expression): If the TZ environment
497 variable is set to GMT, use gmtime() instead of
498 localtime() or ctime() to force the use of GMT. This is
499 because the dietlibc doesn't honor the TZ environment
502 * e2fsck.h: Add io_options to e2fsck_struct
504 * unix.c: If there is a question mark in the device name, separate
505 out the options to the IO layer, and pass it on to
508 * Makefile.in: Use Linux-kernel-style makefile output to make it
509 easier to see errors/warnings.
511 2004-10-04 Richard Mortimer <richm@oldelvet.org.uk>
513 * journal.c (e2fsck_check_ext3_journal): Attempt recovery of the
514 filesystem if the journal contains illegal block numbers.
516 2004-07-26 Theodore Ts'o <tytso@mit.edu>
518 * pass1.c (process_block): Change the limit of directory size from
521 2004-05-11 Theodore Ts'o <tytso@mit.edu>
523 * journal.c (sync_blockdev): Flush I/O caches to preserve ordering
524 constraints required by the journal recovery code. Thanks
525 to Junfeng Yang from the Stanford Metacompilation group
526 for pointing this out.
528 * jfs_user.h: Define sync_blockdev() as an emulated function,
529 instead just being a no-op.
531 2004-05-04 Theodore Ts'o <tytso@mit.edu>
533 * unix.c (check_if_skip): If the checkinterval is zero, then
534 disregard it when calculating when the next check will
537 2004-04-12 Theodore Ts'o <tytso@mit.edu>
539 * unix.c (is_on_batt): Be more flexible about the name of the ACPI
540 device that corresponds to the AC adapter. (Addresses
543 2004-04-03 Theodore Ts'o <tytso@mit.edu>
545 * Makefile.in: Update the modtime even if subst doesn't need to
546 update the e2fsck man page, to avoid always re-running
547 subst, especially since there are no dependencies on the
550 2004-02-28 Theodore Ts'o <tytso@mit.edu>
552 * Release of E2fsprogs 1.35
554 2004-02-24 Theodore Ts'o <tytso@mit.edu>
556 * unix.c (main, PRS), e2fsck.8.in: Add a new -k option which keeps
557 the existing badblocks list when using the -c option.
558 (Addresses Debian bug #229103)
560 2004-02-23 Theodore Ts'o <tytso@mit.edu>
562 * Makefile.in (PROFILED_LIBS, PROFILED_DEPLIBS): Fix reference to
563 libblkid so that the build will work with --enable-profile
564 (Addresses Sourceforge bug #811408)
566 2004-02-14 Theodore Ts'o <tytso@mit.edu>
568 * e2fsck.c (e2fsck_run): Clear the SETJMP_OK flag when returning
569 so we don't double longjump into an invalid stack frame.
570 (Thanks to Matthias Andree for providing this fix.)
572 2004-01-31 Theodore Ts'o <tytso@mit.edu>
574 * problem.c (fix_problem): Don't call print_e2fsck_message if the
575 message is empty; otherwise, the NLS substitution will
576 print the .po header, which is Just Wrong.
578 2004-01-30 Theodore Ts'o <tytso@mit.edu>
580 * pass2.c (deallocate_inode_block): Check to make sure the block
581 number is invalid before deallocating it, to avoid core
584 2003-12-12 Theodore Ts'o <tytso@mit.edu>
586 * pass3.c (check_directory): When reconnecting a directory, we may
587 need to create a lost+found directory. This may
588 invalidate our pointer to the directory information, so we
589 must look it up again after calling
590 e2fsck_reconnect_file(). (Addresses Debian bug #219640).
592 2003-12-10 Theodore Ts'o <tytso@mit.edu>
594 * e2fsck.h (E2F_FLAG_RESTARTED): Assign a unique flag bitfield to
595 E2F_FLAG_RESTARTED. This fixes a bug where if the user
596 specifies an alternate superblock, and the journal needs
597 to be replayed, e2fsck would erroneously assume that
598 journal had been run already without clearing the
599 NEEDS_RECOVERY flag, and bomb out with an error.
601 2003-12-07 Theodore Ts'o <tytso@mit.edu>
603 * badblocks.c, dict.c, ea_refcount.c, ehandler.c, journal.c,
604 pass1.c, pass1b.c, pass2.c, pass3.c, pass5.c, problem.c,
605 rehash.c, super.c, swapfs.c, unix.c, util.c, e2fsck.h: Fix
608 * recovery.c, jfs_user.h: Sync recovery.c with latest 2.5 kernel
611 2003-12-02 Theodore Ts'o <tytso@mit.edu>
613 * unix.c (main): When testing a disk using e2fsck -c, use the list
614 of new bad blocks to replace the current list of bad
615 blocks. This way "e2fsck -c" can be used to recover from
616 a corrupted bad block inode.
618 * badblocks.c (test_disk): Remove the test_disk() file; e2fsck
619 will just call read_bad_blocks_file() directly with the
620 file parameter set to NULL.
622 2003-09-14 Theodore Ts'o <tytso@mit.edu>
624 * unix.c (is_on_batt, check_if_skip): If running on battery, then
625 give an extra grace period before actually forcing a
626 check. That way the laptop will be biased to waiting
627 until we are on AC power before doing the filesystem
628 check. (Addresses Debian bug #205177)
630 2003-09-13 Theodore Ts'o <tytso@mit.edu>
632 * unix.c (check_if_skip): If the number of mounts until the next
633 forced filesystem check is 5 or less, mention this to the
634 user. (Addresses Debian bug #157194)
636 * pass1.c (e2fsck_pass1), problem.h (PR_1_BB_FS_BLOCK),
637 problem.c (PR_1_BB_FS_BLOCK, PR_1_BBINODE_BAD_METABLOCK_PROMPT):
638 Fix up the handling of corrupted indirect blocks in the
639 bad block. We now correctly handle the case where there
640 is an overlap between a block group descriptor or
641 a superblock and a bad block indirect block. In the case
642 where the indirect block is corrupted, we now suggest
645 2003-09-12 Theodore Ts'o <tytso@mit.edu>
647 * unix.c (PRS): Check the returned name from blkid_get_devname and
648 print an error if the requested LABEL/UUID does not exist.
650 2003-09-03 Theodore Ts'o <tytso@mit.edu>
652 * pass1.c (mark_table_blocks): Use the new function
653 ext2fs_reserve_super_and_bgd to calculate the blocks to be
656 2003-08-24 Theodore Ts'o <tytso@mit.edu>
658 * util.c (get_backup_sb): Check to make sure the context is passed
659 in non-NULL before trying to dereference it. Otherwise we
660 might core dump when called to expand %S in a problem
663 * e2fsck.8.in: Adjust description line so that apropos
664 "ext2" or "ext3" will find the man page. (Addresses
667 2003-08-21 Theodore Ts'o <tytso@mit.edu>
669 * journal.c (e2fsck_move_ext3_journal): When moving the journal or
670 backing up the journal inode, make sure it gets written to
673 2003-08-20 Theodore Ts'o <tytso@mit.edu>
675 * journal.c (e2fsck_move_ext3_journal): If the superblock's backup
676 journal information is not set, copy the journal inode
677 information to the superblock.
678 (e2fsck_get_journal): If the journal inode is corrupted,
679 synthesize one from the backup information in the
682 * problem.c, problem.h (PR_0_BACKUP_JNL): Add new problem code
683 which is used when we make a backup of the journal inode.
685 2003-08-19 Theodore Ts'o <tytso@mit.edu>
687 * e2fsck.h, unix.c (PRS, e2fsck_clear_progbar,
688 e2fsck_simple_progress): Don't print the ^A and ^B
689 characters which bracket the progress bar when the e2fsck
690 program is talking directly to a tty, but only when it is
691 being piped to another program. (Addresses Debian bug
693 * unix.c: Move some initialized variables to the BSS segment to
694 shrink the size of the e2fsck executable.
696 2003-08-01 Philipp Thomas <pthomas@suse.de>
698 * Include inttypes.h if present. New macros INT_TO_VOIDPTR and
699 VOIDPTR_TO_INT. Use them throughout for int<->void *
700 casts to fix 64-bit warnings.
702 * dirinfo.c, dx_dirinfo.c, e2fsck.c, ea_refcount.c, journal.c,
703 message.c, pass1.c, pass1b.c, pass2.c, pass3.c, pass4.c,
704 pass5.c, super.c, swapfs.c: ext2fs_getmem(),
705 ext2fs_free_mem(), and ext2fs_resize_mem() all now take a
706 'void *' instead of a 'void **' in order to avoid pointer
707 aliasing problems with GCC 3.x.
709 2003-07-25 Theodore Ts'o <tytso@mit.edu>
711 * Release of E2fsprogs 1.34
713 2003-07-06 Theodore Ts'o <tytso@mit.edu>
715 * pass2.c: Fix gcc -Wall nitpicks (missing #include <string.h>)
717 * dict.c, dict.h: Fix gcc -Wall nitpicks (indented cpp directives)
719 2003-06-8 Theodore Ts'o <tytso@mit.edu>
721 * problem.c: Fix spelling error.
723 2003-05-17 Theodore Ts'o <tytso@mit.edu>
725 * unix.c (show_stats), e2fsck.h: Use ngettext (abbreivated with
726 the macro P_(str1, str2, n)) to simplify the statistics
729 2003-05-05 Theodore Ts'o <tytso@mit.edu>
731 * unix.c (main): If --enable-testio-debug is set, then use the
732 test_io manager so we can watch what e2fsck is doing.
734 2003-05-03 Theodore Ts'o <tytso@mit.edu>
736 * unix.c (show_stats): Remove uneeded use of _() around string
739 * problem.c: Mark two strings (PR_1_RELOC_TO and
740 PR_2_NON_UNIQUE_FILE) as not being printf format strings.
741 Fix typo (doubled 'is') in PR_2_FILE_ACL_BAD.
743 * Makefile.in: Add $(LIBINTL) to the link line so we can support
744 using the internal gettext library.
746 * e2fsck.h: Add #ifndef protection around LOCALEDIR definition.
748 2003-04-27 Theodore Ts'o <tytso@mit.edu>
750 * message.c (expand_at_expression): Fixed NLS support for message
753 2003-04-21 Theodore Ts'o <tytso@mit.edu>
755 * Release of E2fsprogs 1.33
757 2003-04-19 Theodore Ts'o <tytso@mit.edu>
759 * rehash.c: Fix lint warnings by including string.h and ctype.h
761 * pass2.c (dict_de_cmp): Fix lint warnings by using const pointers.
763 * unix.c (e2fsck_simple_progress), e2fsck.h: Fix lint warnings by
764 using const pointers. Remove unused variables.
766 2003-04-17 Theodore Ts'o <tytso@mit.edu>
768 * rehash.c (name_cmp): Sort the deleted inodes to the end of the
769 list, for portability to systems that whose qsort does not
770 perform a stable sort.
772 2003-04-16 Theodore Ts'o <tytso@mit.edu>
774 * unix.c: Bracket progress bar output with control-A and control-B
775 characters. These characters are used as in-band
776 signalling to allow a logging program to filter out the
778 (PRS): Use setvbuf instead of setbuf to force stdout and
779 stderr to be non-buffered when the stdout/stderr are a pipe.
780 This fixes a cosmetic problem when using e2fsck under
783 2003-04-12 Theodore Ts'o <tytso@mit.edu>
785 * unix.c: Add #ifdef around #include <sys/ioctl.h>
787 2003-04-05 Theodore Ts'o <tytso@mit.edu>
789 * super.c (check_super_block): Update the global free block and
790 inode counters from the block group specific counters
791 quietly. This is needed for an experimental patch which
792 eliminates locking the entire filesystem when allocating
793 blocks or inodes; if the filesystem is not unmounted
794 cleanly, the global counts may not be accurate.
796 2003-03-17 Theodore Ts'o <tytso@mit.edu>
798 * util.c: Explicitly declare e2fsck_global_ctx as extern for the
799 benefit of the Apple Darwin port.
801 2003-03-15 Theodore Ts'o <tytso@mit.edu>
803 * rehash.c (e2fsck_rehash_dir): If user specified the -n option,
804 skip trying to write out directory.
805 (e2fsck_rehash_directories): Fix the percentage
806 calculation in the progress bar.
808 2003-03-14 Theodore Ts'o <tytso@mit.edu>
810 * problem.c, problem.h (PR_2_REPORT_DUP_DIRENT): Add new problem
813 * pass2.c (check_dir_block): Check for duplicate filenames within
814 a single directory block (because this is the easy case;
815 we don't currently check for duplicates that span
816 directory blocks, for now. Eventually for htree
817 directories we can do this by searching for all directory
818 blocks that have a hash overflow, and then searching the
819 adjacent blocks to find all other potential duplicates.)
821 * iscan.c, scantest.c, unix.c: And #ifdef protection around
824 * rehash.c (duplicate_search_and_fix): Now search for duplicates
825 filenames, and either prompt to remove a complete
826 duplicate entry, or to rename a duplicate filename.
827 (e2fsck_rehash_dir): Use a progress bar to report
828 progress, and don't print all of the directory inodes as
831 * problem.c, problem.h (PR_2_DUPLICATE_DIRENT,
832 PR_2_NON_UNIQUE_FILE): New problem codes.
834 * unix.c (e2fsck_simple_progress), e2fsck.h: New function which
835 can be called to provide specialized progress bars that
836 are not related to the top-level pass-based completion
839 * pass3.c (e2fsck_adjust_inode_count), e2fsck.h: Export previously
842 2003-03-06 <tytso@mit.edu>
844 * e2fsck.8.in: Fix minor nit in the -C option. (Addresses Debian
847 2003-03-01 Theodore Ts'o <tytso@mit.edu>
849 * Makefile.in, journal.c, unix.c: Use blkid functions to find the
850 journal from the UUID, and to interpret the device
853 * e2fsck.c: Free the blkid_cache when releasing the e2fsck context
856 * e2fsck.h: If strnlen is not present, define it as a macro which
857 calls e2fsck_strlen(). Add prototype for string_copy().
858 Add blkid_cache to e2fsck context, and make
859 filesystem_name, device_name, and journal_name be
862 * pass1.c, pass2.c: Remove static strnlen function
864 * util.c (string_copy, e2fsck_strnlen): New functions
866 2003-01-29 Theodore Ts'o <tytso@mit.edu>
868 * unix.c (usage): Make descripton -c be a bit more explicit
870 2003-01-22 Theodore Ts'o <tytso@mit.edu>
872 * pass1.c (check_blocks): Use the EXT2_I_SIZE macro.
874 2003-01-02 Theodore Ts'o <tytso@mit.edu>
876 * unix.c (main): Detect if there is an attempt to run the journal
877 twice, and abort with an error if this is the case.
878 (Address IBM Bugzilla bug #1226)
880 2002-12-18 Theodore Ts'o <tytso@mit.edu>
882 * pass2.c (strnlen): Provide strnlen if libc doesn't.
884 2003-11-19 Theodore Ts'o <tytso@mit.edu>
886 * unix.c (PRS): Print an error if more than one of the -p/-a, -n
887 or -y options are specified.
889 2002-11-12 Theodore Ts'o <tytso@mit.edu>
891 * problem.c: Make HTREE problems PR_PREEN_OK, so that we don't
892 abort an e2fsck after the filesystem has been mounted
893 using the 2.4 ext2 codebase.
895 2002-11-09 Theodore Ts'o <tytso@mit.edu>
897 * Release of E2fsprogs 1.32
899 2002-11-08 Theodore Ts'o <tytso@mit.edu>
901 * Release of E2fsprogs 1.31
903 2002-11-08 <tytso@snap.thunk.org>
905 * unix.c (main): Fix a bug where e2fsck could erroneously mark a
906 filesystem as being valid if it was being checked and it
907 is interrupted with a ^C. (Bug introduced in e2fsprogs
910 * unix.c (PRS), journal.c: Set the default level of journal
911 debugging to be 0, and allow the user to set the level of
912 journal debugging by using the E2FSCK_JBD_DEBUG
913 environment variable.
915 * pass1.c (new_table_block), super.c (check_super_block), swapfs.c
916 (swap_filesys): Clear EXT2_FLAG_MASTER_SB_ONLY to make
917 sure the backup superblocks and group descriptors are
918 updated when we make an important change to the
919 superblocks and/or group descriptors. (i.e., generating a
920 UUID, allocating filesystem metadata, or byte-swapping the
923 2002-11-07 Theodore Ts'o <tytso@mit.edu>
925 * e2fsck.h, unix.c (main, check_mount): Fix e2fsck so that it
926 returns the appropriate exit code, so that the boot
927 scripts will be told that they need to automatically
930 2002-10-31 Theodore Ts'o <tytso@mit.edu>
932 * Release of E2fsprogs 1.30
934 2002-10-31 Theodore Ts'o <tytso@mit.edu>
936 * unix.c (usage), e2fsck.8.in: Add the -D option to the usage and
937 command synopsis. (Addresses Debian bug #167108)
939 * pass1.c (e2fsck_pass1): Check the superblock write time to see
940 whether or not we can safely do the LOW_DTIME checks.
941 (Addresses Sourceforge bug #620980)
943 2002-10-30 Theodore Ts'o <tytso@mit.edu>
945 * Makefile.in (install): Search all compression extensions when
946 deleting old man pages.
948 * pass1.c (mark_table_blocks): Fix bug in meta_bg support; only
949 mark blocks legacy group descriptor blocks up to
952 2002-10-20 Theodore Ts'o <tytso@valinux.com>
954 * pass1.c (mark_table_blocks): Add support for the meta_blockgroup
957 2002-10-13 Theodore Ts'o <tytso@mit.edu>
959 * pass3.c (e2fsck_get_lost_and_found): Pass in mode 700 to
962 * unix.c (show_stats): Fix format bug if NLS is in use.
964 * journal.c, pass1.c, revoke.c, util.c: Fix gcc -Wall nits.
966 2002-10-08 Theodore Ts'o <tytso@mit.edu>
968 * pass3.c (e2fsck_get_lost_and_found): Create the lost+found
969 directory with mode 0700.
971 2002-10-02 Theodore Y. Ts'o <tytso@mit.edu>
973 * pass2.c (parse_int_node, check_dir_block): Add byte-swap
974 functions around the htree code, so that it works on
977 * swapfs.c (swap_filesys): For PPC machines, byte-swap the bitmap,
978 since PPC big-endian filesystems were historically wierd.
979 This is just for the regression test, since no one
980 actually uses them anymore...
982 2002-09-30 Theodore Ts'o <tytso@mit.edu>
984 * problem.c, problem.h (PR_2_HTREE_BAD_LIMIT,
985 PR_2_HTREE_BAD_COUNT, PR_2_HTREE_HASH_ORDER,
986 PR_2_HTREE_BAD_DEPTH): Add new problem codes.
988 * pass2.c (salvage_directory, check_dir_block): Avoid counting
989 directory entries twice during a directory salvage. Make
990 the salvaging algorithm smarter about directory entry size
992 (parse_int_node): Add check to make sure the limit and
993 count fields in the node headers are sane. Also check
994 to make sure the hash table in ascending order.
995 (pass2, htree_depth): For all leaf nodes, determine their
996 depth in the tree, and make sure it matches with the depth
997 in the htree root information.
999 2002-09-29 Theodore Ts'o <tytso@mit.edu>
1001 * pass2.c (check_dir_block): Do a more paranoid check when trying
1002 to determine whether or not a directory entry is a
1003 completely empty leaf block or leaf node. Otherwise
1004 e2fsck might get confused into thinking that a valid dxdir
1007 * rehash.c (e2fsck_rehash_dir): Apply patch from Christopher Li
1008 which avoids creating an empty directory entry at the end
1009 of the directory block. This screws up earlier versions
1010 of the indexed directory patch.
1012 2002-09-28 Theodore Ts'o <tytso@mit.edu>
1014 * rehash.c (write_directory): Clear the index flag if by
1015 reoptimizing the directory, we bring it back into a
1017 (e2fsck_rehash_dir): Allow directories that contain two
1018 blocks to be indexed. Otherwise when they grow, they
1019 never will be indexed by the kernel.
1021 * unix.c (main): Only update the master superblock; there's no
1022 point updating the backup superblocks, and it speeds up
1025 * pass2.c (salvage_directory): New function called by
1026 check_dir_block() which is much more sophisticated about
1027 how it salvages corrupted filesystems.
1029 2001-09-24 Theodore Tso <tytso@mit.edu>
1031 * Release of E2fsprogs 1.29
1033 2002-09-06 Theodore Ts'o <tytso@mit.edu>
1035 * rehash.c (copy_dir_entries): Fix bug which caused corrupted
1036 directories if there are 4 or 8 bytes left over in a
1037 directory page when optimizing/reindexing a directory.
1039 2001-08-31 Theodore Tso <tytso@thunk.org>
1041 * Release of E2fsprogs 1.28
1043 2002-08-31 Theodore Ts'o <tytso@mit.edu>
1045 * ehandler.c (e2fsck_handle_read_error): If the user asks to
1046 ignore the error, offer to try forcing a write of the
1047 block to the disk; sometimes this will cause the drive to
1048 remap the bad block.
1050 2002-08-31 Theodore Ts'o <tytso@valinux.com>
1052 * pass2.c (e2fsck_pass2): If this is a HTREE directory, sort the
1053 dblist so that the first block of all of the directories
1054 is handled first so we can read the hash version
1056 (check_dir_block): Examine the root node for correctness,
1057 and offer to clear it if it is not correct. Also copy the
1058 hash version to the dx_dir structure, so that the proper
1059 hash function can be used for other blocks in the
1062 * problem.c, problem.h (PR_2_HTREE_BAD_ROOT): Add new problem code.
1064 2002-08-21 Theodore Ts'o <tytso@mit.edu>
1066 * problem.c: Fix PR_1_RELOC_BLOCK_ALLOCATE message to explain that
1067 it is necessary to find contiguous blocks in a particular
1070 2002-08-17 Theodore Ts'o <tytso@mit.edu>
1072 * e2fsck.8.in: Add clarifying text describing how e2fsck works
1073 with ext3 filesytems. (Addresses Debian bug #145044).
1075 * pass1.c (handle_htree): Add support for EXT2_HASH_TEA
1077 * e2fsck.h, e2fsck.c (e2fsck_allocate_context): Add new field to
1078 the e2fsck context, ext_attr_ver, which specifies the EA
1081 * unix.c (usage, parse_extended_opts, PRS), e2fsck.8.in: Add new
1082 option -E, which allows the users to specify extended
1083 options. Added ea_ver extended option.
1085 * pass1.c (e2fsck_pass1_check_device_inode): Add ext2_filsys
1086 argument to this function, so we can account for the
1087 presence of extended attribute blocks attached to device
1089 (e2fsck_pass1_check_symlink, e2fsck_pass1): Take into
1090 account the fact that symlinks can also have extended
1092 (check_ext_attr): Don't be flexible about the EA format
1093 version. Check against the version number in
1095 (check_blocks): Check all inodes, so that we account for
1096 extended attribute blocks belonging to special files.
1097 Clean up i_size checks.
1099 * pass1b.c (pass1b): Check all inodes, so that we account for
1100 extended attribute blocks belonging to special files.
1101 (delete_file_block): Use ext2fs_alloc_block_stats() to
1102 update the filesystem statistics.
1103 (delete_file): Attempt to decrement the extended
1104 attribute refcount, and free the EA block if the count
1106 (clone_file): Fixed bugs in EA handling. Don't call
1107 block_iterate on inodes that don't have a valid i_block[]
1108 array. Reread the base inode since it may have been
1109 changed by ext2fs_block_iterate. When updating inodes as
1110 part of cloning an EA block, write out the correct inode
1113 * pass2.c (deallocate_inode_block, deallocate_inode): Use standard
1114 ext2fs_alloc_*_stats functions to update the filesystem
1116 (deallocate_inode): Attempt to decrement the extended
1117 attribute refcount, and free the EA block if the count
1119 (e2fsck_process_bad_inode): Add extra argument to calls
1120 to e2fsck_pass1_check_device_inode ().
1122 * pass3.c (e2fsck_get_lost_and_found): Use standard
1123 ext2fs_alloc_*_stats functions to update the filesystem.
1124 statistics when creating /lost+found.
1125 (adjust_inode_count): Remove debugging code that can never
1128 * pass4.c (disconnect_inode): Add explanation about why we only
1129 clear inodes that have no data blocks and no EA blocks.
1130 Use ext2fs_inode_alloc_stats2 function to update the
1131 filesystem statistics when clearing a zero-length inode.
1133 * problem.c, problem.h (PR_1B_ADJ_EA_REFCOUNT,
1134 PR_2_ADJ_EA_REFCOUNT): Add new problem codes.
1136 * super.c (release_inode_block), (release_orphan_inodes): Use the
1137 standard ext2fs_alloc_*_stats functions to update the
1138 filesystem statistics.
1139 (release_inode_blocks): Attempt to decrement the extended
1140 attribute refcount, and free the EA block if the count
1143 2002-08-01 Theodore Ts'o <tytso@mit.edu>
1145 * dict.c, dict.h: New file from kazlib 1.20 which implements a
1148 * pass1b.c: Massive changes to take advantage of dict.c. This
1149 removes several O(n**2) algorithms from the rare case
1150 where there are a large number of blocks claimed by
1153 2002-07-24 Theodore Ts'o <tytso@mit.edu>
1155 * e2fsck.8.in, e2fsck.h, pass3.c (e2fsck_pass3), unix.c, rehash.c:
1156 Add new option -D, which requests e2fsck to optimize all
1157 directories. Rehash.c will also compress and sort
1158 non-indexed directories.
1160 * problem.c, problem.h: Rename PR_3A_REHASH_* to PR_3A_OPTIMIZE_*
1162 * unix.c (PRS): Make sure the signal_cancel is registered without
1165 * rehash.c (e2fsck_rehash_dir, copy_dir_entries, calculate_tree):
1166 Restructured code in e2fsck_rehash_dir into two new
1167 subroutines to make the code more understandable/maintainable.
1168 (set_root_node): Fixed bug which caused the root node to
1169 be invalid on non-FILETYPE filesystems due to an
1170 unitialized variable.
1171 (calculate_tree): Fix bug where pointers which might get
1172 invalidated if realloc() moves outdir->buf around.
1173 (e2fsck_rehash_dir): Fix memory leak bug.
1175 * pass3.c (e2fsck_get_lost_and_found), e2fsck.h, e2fsck.c:
1176 Exported as a public interface a function for finding the
1177 lost and found directory. Cache the location of the lost
1178 and found directory in the e2fsck context structure.
1180 * util.c (ask_yn, read_a_char): Note when the user has typed ^C,
1181 and abort processing by longjmp'ing to ctx->abort_loc.
1183 2002-07-23 Theodore Ts'o <tytso@mit.edu>
1185 * pass1.c (e2fsck_pass1): If e2fsck is run with -n, don't create
1186 the dirs_to_hash list, since we don't want to reindex
1187 directories if the filesystem is opened read-only.
1189 2002-07-21 Theodore Ts'o <tytso@mit.edu>
1191 * e2fsck.8.in: Document new exit code FSCK_CANCELED
1193 * unix.c (PRS, signal_cancel): Capture SIGINT and SIGTERM signals
1194 and set a flag in the e2fsck context indicating that
1195 cancellation has been requested, so that e2fsck will exit
1196 only at safe points.
1197 (main): Change the exit handling so that if a cancellation
1198 is requested, return FSCK_CANCELED (a new exit code 32).
1199 e2fsck can now return more than one exit code as part of a
1200 bitmask (as had been documented in the man page).
1202 * pass2.c (e2fsck_pass2, check_dir_block), pass3.c (e2fsck_pass3),
1203 pass4.c (e2fsck_pass4): Check to see if a cancellation was
1204 requested, and abort processing if necessary.
1206 2002-07-19 Theodore Ts'o <tytso@mit.edu>
1208 * rehash.c, Makefile.in: New file which rewrites directories using
1211 * problem.c (fix_problem), problemP.h (PR_PREEN_NOHDR): Add option
1212 which suppresses the header printed when in preen mode.
1214 * pass3.c (e2fsck_pass3): If there are entries on the dirs_to_hash
1215 list, call e2fsck_rehash_directories to reindex those
1217 (e2fsck_expand_directory): Generalize the old
1218 expand_dirctory() function so it can expand a directory to
1219 a guaranteed minimum size.
1221 * e2fsck.h (struct e2fsck_struct): Add the dirs_to_hash list. Add
1222 new function prototypes for rehash.c and for
1223 e2fsck_expand_directory().
1225 * e2fsck.c (e2fsck_reset_context): Free the dirs_to_hash list.
1227 * pass1.c (e2fsck_pass1): Initialize the dirs_to_hash list if the
1228 htree feature is present in the filesystem.
1229 (check_blocks): If a non-htree directory has more than 2
1230 blocks, put it on the dirs_to_hash list.
1232 * pass2.c (clear_htree): Add corrupt htree directories to the
1235 * problem.h, problem.c (PR_3A_PASS_HEADER, PR_3A_REHASH_ITER,
1236 PR_3A_REHASH_DIR_ERR, PR_3A_REHASH_DIR_HEADER,
1237 PR_3A_REHASH_DIR, PR_3A_REHASH_DIR_END): Add new problem codes
1239 * pass2.c (parse_int_node), problem.c (PR_2_HTREE_BADBLK): Fix
1242 2002-07-15 Theodore Ts'o <tytso@mit.edu>
1244 * pass2.c (e2fsck_pass2): Use dx_dir->numblocks instead of
1245 dx_dir->ino to indicate that a bad inode was cleared.
1247 2002-06-26 Theodore Ts'o <tytso@mit.edu>
1249 * pass1.c (check_blocks): Move htree handling to handle_htree().
1250 Factor out calls to ext2fs_write_inode so that it happens
1251 if dirty_inode is non-zero.
1252 (handle_htree): Add checks for invalid htree root, invalid
1253 hash version, invalid hash version, and htree depth too deep.
1255 * problem.h, problem.c (PR_1_HTREE_NODIR, PR_1_HTREE_BADROOT,
1256 PR_1_HTREE_HASHV, PR_1_HTREE_INCOMPAT, PR_1_HTREE_DEPTH):
1257 Add new problem codes.
1259 * pass2.c (parse_int_node): Fix silly typo.
1260 (check_dir_block): Change to use new ext2fs_dirhash()
1262 (pass2): Fixed two minor bugs discovered by the test case:
1263 Don't stop checking dxdir's after clearing a bad inode.
1264 If there is a bad max hash, make sure the bad_dir flag
1265 is set to make sure we try to clear inode.
1267 2002-06-25 Theodore Ts'o <tytso@mit.edu>
1269 * e2fsck.c (e2fsck_reset_context): Free the dx_dirinfo structure.
1271 * message.c: Add new abbrevations @h and @p, "HTREE directory
1272 inode" and "problem in".
1274 * pass1.c (check_blocks): If the inode has the INDEX_FL flag,
1275 register the block into the indexed directory data
1276 structures. Or if the filesystem doesn't have the
1277 DIR_INDEX flag, offer to clear the INDEX_FL.
1279 * pass2.c (e2fsck_pass2, parse_int_node): Add support check htree
1280 directories (we don't check all possible corruptions yet).
1282 * problem.h, problem.h (PR_1_HTREE_SET, PR_2_HTREE_NOTREF,
1283 PR_2_HTREE_DUPREF, PR_2_HTREE_MIN_HASH, PR_2_HTREE_MAX_HASH,
1284 PR_2_HTREE_CLEAR, PR_2_HTREE_FCLR, PR_2_HTREE_BADBLK): Add
1287 * unix.c (main): If ENABLE_HTREE is not defined, complain if the
1288 filesystem has the dir_index feature.
1290 * Makefile.in, e2fsck.h, dx_dirinfo.c: New file (and group of
1291 functions) which keeps track of blocks in HTREE directory
1294 2002-05-22 Andreas Dilger <adilger@clusterfs.com>
1296 * super.c (check_superblock): Check that the number of inodes and
1297 blocks in a group is less than 2^16, so that the free inode
1298 and block counts for a group fit into the group descriptor
1299 table fields. Any more than that would need a COMPAT flag.
1301 2002-05-22 Theodore Ts'o <tytso@mit.edu>
1303 * pass1.c (check_ext_attr): Update to support the V2 Bestbits EA
1304 format. We automatically determine from the first EA
1305 block we visit whether we are using the V1 or V2 format.
1307 2002-05-21 Theodore Ts'o <tytso@mit.edu>
1309 * pass1.c (process_block): If an inode has too many blocks or
1310 is too big, then offer to truncate the inode.
1311 (check_blocks): Don't bother checking the size to see if
1312 it's too big, since that's just a symptom, not the disease
1313 (which we're now appropriately checking in process_block).
1315 * problem.c, problem.h: Add new problem codes PR_1_INODE_TOOBIG,
1316 PR_1_TOOBIG_DIR, PR_1_TOOBIG_REG, PR_1_TOOBIG_SYMLINK, and
1317 add the latch code PR_LATCH_TOOBIG.
1319 2002-05-20 Theodore Ts'o <tytso@mit.edu>
1321 * e2fsck.h, pass1.c (e2fsck_pass1_check_symlink), pass2.c
1322 (e2fsck_process_bad_inode): Add an extra
1323 argument so a scratch buffer can be passed into the
1326 * pass1.c (e2fsck_pass1_check_device_inode,
1327 e2fsck_pass1_check_symlink): If the EXT2_INDEX_FL flag is
1328 set, then the device/FIFO is invalid.
1329 (check_immutable): Don't check for EXT2_INDEX_FL; we take
1330 care of that elsewhere now.
1331 (e2fsck_pass1): Check to see if the symlink is valid
1332 before we offer to clear any immutable bits. This matches
1333 the order in which we check other special files.
1335 * pass2.c (e2fsck_pass2): Allocate a bigger scratch buffer so we
1336 can pass part of it to e2fsck_process_bad_inode.
1338 * pass4.c (e2fsck_pass4): If we need to call
1339 e2fsck_process_bad_inode(), allocate the necessary scratch
1342 * problem.h, problem.c: Change PR_2_SYMLINK_SIZE to be
1343 PR_2_INVALID_SYMLINK, and change the text
1344 accordingly. Revert the text change for PR_1_SET_IMMUTABLE
1345 since we no longer check for EXT2_INDEX_FL in
1348 2002-05-18 Andreas Dilger <adilger@clusterfs.com>
1350 * pass1.c (e2fsck_pass1_check_symlink): Remove checks of
1351 immutable/append-only checks, since this is handled by
1352 check_immutable. For non-fast symlinks, read in the
1353 data block and check the length to make sure it
1354 matches with the inode size.
1355 (check_immutable): Generalize to also check for the
1357 (check_blocks): For non-regular files, signal a bad inode
1358 size if i_size_high is non-zero.
1360 * pass2.c: Only count large files if they are regular files
1361 (not just if they aren't directories).
1363 * problem.c, problem.h: Change comment for PR_2_SYMLINK_SIZE
1364 to indicate that it can be triggered by any symlink,
1365 not fast symlink. Change text for PR_1_SET_IMMUTABLE
1366 to indicate that it the EXT2_INDEX_FL was set.
1368 2002-05-17 Theodore Ts'o <tytso@mit.edu>
1370 * pass1.c (e2fsck_pass1): When calculating max_sizes, omit capping
1371 this value by the calculated value of max_sect_sizes.
1372 The inode may be a sparse inode, and the limit of
1373 max_sect_sizes assumed a non-sparse inode and a limit
1374 based on a 32-bit i_blocks field measured in 512 sectors.
1376 * super.c (check_super_block): Fix check for s_log_block_size so
1377 that takes into account fact that there is an offset of
1378 EXT2_MIN_BLOCK_LOG_SIZE.
1380 * pass1.c: Allocate max_sizes array to be big enough to support
1381 the larger block sizes.
1383 2002-05-16 Andreas Dilger <adilger@clusterfs.com>
1385 * unix.c (main), util.c (get_backup_sb): Use EXT2_MAX_BLOCK_SIZE
1386 instead of using a hardcoded value of 4096.
1388 * super.c (check_super_block): Change checks for s_log_block_size
1389 s_log_frag_size so they support the larger block sizes.
1391 * pass1.c (e2fsck_pass1): Calculate max_sizes array for block
1392 sizes up to EXT2_MAX_BLOCK_SIZE (to support block sizes
1395 2002-03-08 Theodore Tso <tytso@mit.edu>
1397 * Release of E2fsprogs 1.27
1399 2002-03-07 Theodore Tso <tytso@mit.edu>
1401 * journal.c, pass5.c, revoke.c: Fix gcc -Wall complaints
1403 2002-03-07 Theodore Tso <tytso@mit.edu>
1405 * unix.c (main): Don't close the filesystem before calling
1406 fatal_error(); this just causes a needless warning about a
1407 bad I/O manager magic number.
1409 * journal.c (e2fsck_check_ext3_journal): Offer to clear the inode
1410 in case the journal is too small, or the inode number in
1411 the superblock doesn't appear to be random.
1413 2002-03-06 Theodore Tso <tytso@mit.edu>
1415 * problem.h, problem.c: PR_5_BLOCK_RANGE_UNUSED,
1416 PR_5_BLOCK_RANGE_USED, PR_5_INODE_RANGE_UNUSED,
1417 PR_5_INODE_RANGE_USED: Add new problem codes.
1419 * pass5.c (check_block_bitmaps, check_inode_bitmaps): Collapse
1420 reporting of adjacent blocks and inodes into a range.
1422 2002-03-04 Philipp Thomas <pthomas@suse.de>
1424 * unix.c (main): Newer libintl needs LC_CTYPE to be set in
1425 addition to LC_MESSAGES.
1427 2002-02-24 Theodore Tso <tytso@mit.edu>
1429 * Makefile.in (install): Install hard links for man pages for
1430 fsck.ext2 and fsck.ext3. Remove any compressed man
1431 pages before installing the man pages.
1433 2002-02-22 Theodore Tso <tytso@mit.edu>
1435 * journal.c: Improve code maintainability and reduce code size by
1436 moving common code paths in e2fsck_journal_init_dev() and
1437 e2fsck_journal_init_inode() into e2fsck_get_journal().
1438 Also fixed a memory leak in recover_ext3_journal().
1440 * super.c (release_orphan_inodes): Fix memory leak.
1442 2002-02-03 Theodore Tso <tytso@thunk.org>
1444 * Release of E2fsprogs 1.26
1446 2001-12-24 Theodore Tso <tytso@mit.edu>
1448 * unix.c (PRS): Don't allow the -c and -l/-L options to be
1449 specified at the same time.
1451 * e2fsck.h (E2F_OPT_WRITECHECK), unix.c (PRS),
1452 badblocks.c (read_bad_blocks_file): If two -c options are
1453 specified, then perform a non-destructive read/write scan
1456 * e2fsck.8.in: Document the double -c option; also encourage users
1457 to use -c instead of the -l/-L options since it's too hard
1458 for users to get things like the blocksize parameter correct.
1460 2001-12-23 Theodore Tso <tytso@mit.edu>
1462 * util.c (get_backup_sb): This function now searches for the
1463 backup superblock by iterating over possible blocksizes
1464 instead of defaulting a guess of 8193 if the superblock
1467 * message.c (expand_percent_expression), unix.c (main): Pass in
1468 new parameters to get_backup_sb. Also, in unix.c, use the
1469 blocksize paramter in the e2fsck context structure instead
1470 of using a static variable, since get_backup_sb wants to
1471 be able to set the blocksize paramter.
1473 * e2fsck.h: Update function prototype for get_backup_sb; also add
1474 the blocksize parameter to the e2fsck context structure.
1476 * Makefile.in, jfs_user.h: Move linux/jbd.h to
1477 ext2fs/kernel-jbd.h, to avoid using the system header
1478 file version of hbd.h when using diet glibc (since it
1479 forcibly adds /usr/include to the beginning of the
1480 include search path.)
1482 2001-12-21 Theodore Tso <tytso@mit.edu>
1484 * problem.c (fix_problem): Use ctx->filesystem_name if the
1485 ctx->device_name is NULL.
1487 * journal.c (e2fsck_check_ext3_journal): Give the opportunity to
1488 run the journal even if recovery flag is cleared. If
1489 we're using a backup superblock, run the journal by
1492 * e2fsck.h (E2F_OPT_FORCE), unix.c (PRS, check_if_skip): Use a
1493 bitfield in the e2fsck context flags word to indicate
1494 whether or not a check should be forced. This allows the
1495 journal code to set the option if necessary to force a
1498 * problem.h, problem.c: Remove PR_0_JOURNAL_RESET_JOURNAL, and add
1499 PR_0_JOURNAL_RUN and PR_0_JOURNAL_RUN_DEFAULT. Update
1500 problem decription texts.
1502 2001-12-16 Theodore Tso <tytso@mit.edu>
1504 * e2fsck.h (ext2fs_get_refcount_size), unix.c (check_mount, PRS),
1505 pass1.c (adjust_extattr_refcount),
1506 ea_refcount.c (ea_refcount_create): Fix gcc -Wall nits.
1508 * recovery.c, revoke.c: Update to versions from 2.4.17-pre8.
1510 * journal.c, jfs_user.h: Update support code for new version of
1511 recover.c and revoke.c. Fix support for filesystems with
1514 2001-11-30 Gabriel Paubert <paubert@iram.es>
1516 * journal.c (e2fsck_journal_load): Fix an endianness bug.
1518 2001-11-26 Theodore Tso <tytso@mit.edu>
1520 * super.c (check_super_block): Make sure that if the inode table
1521 or allocation bitmap is zero, that it is marked as
1522 invalid, so that in pass #1, a new bitmap/inode table gets
1523 properly allocated. (Addresses Debian Bug #116975)
1525 2001-11-24 Theodore Tso <tytso@mit.edu>
1527 * e2fsck.8.in: Fix minor typo in man page and clarify device
1530 2001-10-07 Theodore Tso <tytso@mit.edu>
1532 * journal.c (clear_v2_journal_fields, e2fsck_journal_load): If the
1533 V2 fields are set on a V1 journal superblock, or an
1534 internal V2 journal has s_nr_users is non-zero, clear the
1535 entire journal superblock beyond the V1 superblock. This
1536 fixes botched V1->V2 updates.
1538 * problem.c, problem.h (PR_0_CLEAR_V2_JOURNAL): Add new problem code.
1540 2001-09-20 Theodore Tso <tytso@mit.edu>
1542 * e2fsck.h, journal.c (e2fsck_move_ext3_journal): Add new function
1543 which will automatically relocate the ext3 journal from a
1544 visible file to an invisible journal file if the
1545 filesystem has been opened read/write.
1547 * super.c (check_super_block): Add call to e2fsck_move_ext3_journal
1549 * problem.c, problem.h (PR_0_MOVE_JOURNAL, PR_0_ERR_MOVE_JOURNAL):
1550 Add new problem codes.
1552 2001-09-20 Theodore Tso <tytso@thunk.org>
1554 * Release of E2fsprogs 1.25
1556 2001-09-19 Theodore Tso <tytso@mit.edu>
1558 * unix.c (main): If a superblock is specified explicitly by the
1559 user, don't try to automatically fall back to an
1560 alternate superblock.
1562 2001-09-02 Theodore Tso <tytso@thunk.org>
1564 * Release of E2fsprogs 1.24a
1566 2001-08-30 Theodore Tso <tytso@thunk.org>
1568 * Release of E2fsprogs 1.24
1570 2001-08-30 Theodore Tso <tytso@valinux.com>
1572 * pass1.c (e2fsck_pass1): For EXT2_RESIZE_INO, allow its i_mode to
1573 either be zero or a regular file (for compatibility with
1574 Andreas's on-line resizing programs).
1576 2001-08-27 Theodore Tso <tytso@valinux.com>
1578 * unix.c (main): Remove EXT2FS_VERSION from the version display,
1579 since it only confuses people.
1581 * pass1.c (strnlen): Provide strnlen if libc doesn't.
1583 2001-08-15 Theodore Tso <tytso@valinux.com>
1585 * Release of E2fsprogs 1.23
1587 2001-08-13 Theodore Tso <tytso@valinux.com>
1589 * super.c (release_orphan_inodes): If the filesystem contains
1590 errors, don't run the orphan * list, since the orphan list
1593 * pass1.c (check_size): Fix logic in check_size; the previous code
1594 only offered to clear the inode size fields if both size
1595 and i_size_high were zero.
1596 (e2fsck_pass1_check_device_inode): If i_blocks is
1597 non-zero, then assume that the device/socket/fifo inode
1600 2001-08-09 Theodore Tso <tytso@valinux.com>
1602 * pass1.c, pass2.c, problem.c, problem.h: Fix bug introduced by
1603 Andreas's symlink code; check_blocks() was unconditionally
1604 testing inode_bad_map without checking to see if it
1605 existed first. Fixed problem a different way; we now no
1606 longer check inode_bad_map at all, since the file might
1607 not get deleted in pass 2 anyway. We move the large file
1608 feature reconciliation code to to e2fsck_pass2(), and in
1609 deallocate_inode() in pass2.c, we decrement the large
1610 files counter if we're about to delete a large file.
1612 * unix.c (show_stats): Print the number of large files in verbose
1615 2001-08-07 Theodore Tso <tytso@valinux.com>
1617 * journal.c (recover_ext3_journal): If s_errno is set in the
1618 journal superblock, set the EXT2_ERROR_FS flag in the
1619 filesystem superblock after the journal is run.
1621 2001-08-04 Andreas Dilger <root@lynx.adilger.int>
1623 * message.c: Change comments for %D and %d expansion in e2fsck
1624 problem codes. It was not consistent which was for dirent
1625 expansion, and which was for directory number expansion.
1627 * problem.c (PR_2_FINAL_RECLEN, PR_2_BAD_FILETYPE): Fix problem
1628 codes which got caught by the confusion between %D and %d.
1630 2001-08-04 Theodore Tso <tytso@valinux.com>
1632 * problem.c (PR_2_SYMLINK_SIZE): Change description to make it
1633 more clear (and remove %s expansion). Also add missing
1634 periods to the end of a number of problem descriptions.
1636 * pass2.c (e2fsck_process_bad_inode): Remove unneeded problem
1637 context string set now that the problem description for
1638 PR_2_SYMLINK_SIZE has been changed.
1640 * pass1.c (e2fsck_pass1_check_symlink): Consolidate some checks,
1641 and check the validity of the symlink block here (so that
1642 we detect this case here instead of later). Also use
1643 sizeof(inode->i_block) instead EXT2_LINK_DIR.
1645 2001-07-30 Theodore Tso <tytso@valinux.com>
1647 * unix.c (check_mount): Remove the code which tested for the root
1648 filesystem being mounted read-only, and depend on the
1649 results flags from ext2fs_check_if_mounted.
1651 2001-07-29 Theodore Tso <tytso@valinux.com>
1653 * unix.c (check_if_skip): Free the e2fsck context structure on a
1654 normal clean filesystem exit, to make it easier to find
1656 (PRS): Only update the path to include /sbin at the
1657 beginning if the -c option is given, again to make it
1658 easier to find memory leaks.
1659 (main): Move the final print_resource_track call after the
1660 filesystem and the context are freed.
1662 * journal.c (e2fsck_journal_init_dev): Avoid memory leak if we
1663 need to search for the journal device.
1664 (e2fsck_journal_release): Free the journal IO channel when
1665 we release the journal handle, to avoid a memory leak.
1667 * e2fsck.c (e2fsck_reset_context): Fix bug; only close the io
1668 channel if it is *different* from the filesystem io
1671 2001-07-27 Theodore Tso <tytso@valinux.com>
1673 * problem.c (PR_1_SET_IMMUTABLE): Clarify problem message.
1675 * pass1.c (e2fsck_pass1): Check for symlinks that have the
1676 immutable flag set (and offer to clear them).
1678 2001-07-26 Theodore Tso <tytso@valinux.com>
1680 * pass1.c (e2fsck_pass1): Free ctx->block_ea_map at the end of
1683 2001-07-25 Theodore Tso <tytso@valinux.com>
1685 * pass1.c (check_ext_attr): Skip zero-length EA entries.
1687 * problem.c: PR_1_EA_ALLOC_COLLISION shouldn't abort, but should
1688 prompt to clear the EA block.
1690 2001-07-22 Theodore Tso <tytso@valinux.com>
1692 * journal.c (ll_rw_block): Use ctx->journal_io instead of the
1693 filesystem's io_channel.
1694 (e2fsck_journal_init_dev): New function which supports
1695 initialization of the external journal.
1696 (e2fsck_get_journal): Remove code which flagged an error
1697 if the superblock reported the use of an external journal.
1698 (ext3_journal_via_mount): Remove unsued, #ifdefed out function.
1700 * problem.c, problem.h: Removed error codes no longer used
1701 (PR_0_JOURNAL_UNSUPP_DEV, PR_0_JOURNAL_BAD_DEV,
1702 PR_0_JOURNAL_UNSUPP_UUID) and replace them with new error
1703 codes related with failures in loading the external
1704 journal (PR_0_JOURNAL_UNSUPP_MULTIFS,
1705 PR_0_CANT_FIND_JOURNAL, PR_0_EXT_JOURNAL_BAD_SUPER).
1706 Also changed the text assocated with PR_0_JOURNAL_BAD_UUID
1707 to reflect the case where the external journal isn't
1708 correct for this filesystem.
1710 * unix.c (PRS), e2fsck.8.in: Add new option -j which allows
1711 the user to specify the pathname to find the external journal.
1713 * e2fsck.c (e2fsck_reset_context): Close journal_io if it isn't
1714 the same as the filesystem io_channel.
1716 * e2fsck.h: Add new fields (journal_io and journal_name) in the
1717 context structure to support external journals.
1719 2001-07-20 Theodore Tso <tytso@valinux.com>
1721 * unix.c (main): Add an explicit warning when the filesystem is
1722 left not completely fixed when e2fsck exits. (Addresses
1723 Debian bug #104502.)
1725 2001-07-19 Theodore Tso <tytso@valinux.com>
1727 * pass1.c (check_ext_attr): The entire EA block is now checked to
1728 make sure that parts of the EA block aren't being used for
1731 * Makefile.in e2fsck.h, region.c: New file which is used to detect
1732 collisions in extended attribute block.
1734 * problem.h, problem.c (PR_1_EA_MULTI_BLOCK, PR_1_EA_ALLOC_REGION,
1735 PR_1_EA_ALLOC_COLLISION, PR_1_EA_BAD_NAME,
1736 PR_1_EA_BAD_VALUE): Add new problem codes.
1738 2001-07-10 Theodore Tso <tytso@valinux.com>
1740 * journal.c (e2fsck_run_ext3_journal): Only call ext3_flush() if
1741 the superblock is dirty.
1743 2001-07-07 Theodore Tso <tytso@valinux.com>
1745 * pass1b.c (pass1b, process_pass1b_block): Change the num_bad
1746 field calculation so that it only counts EA block entries
1747 as a single multiply claimed block (since once we clone
1748 the EA blocks for one inode, we fix the problem for all of
1749 the other inodes). Also, I moved the num_bad calculation
1750 from process_pass1b_block to the end of pass1b. This
1751 fixes a *significant* performance bug in pass1b which hit
1752 people who had to had a lot of multiply claimed blocks.
1753 (Can you say O(n**3) boys and girls? I knew you could...
1754 Fortunately, this case didn't happen that much in actual
1757 * pass1.c (e2fsck_pass1): Defer inodes which have an extended
1758 attribute block for later processing to avoid extra seeks
1760 (process_inode_cmp): If there is no indirect block, sort
1761 by the extended attribute (i_file_acl) block.
1763 * pass1b.c (clone_file_block): Fix bugs when cloning extended
1764 attribute blocks. Moved free of block_buf to after the
1765 code which clones the extattr block, and fixed logic for
1766 changing pointers to the extended attribute field in the
1767 inodes which were affected.
1768 (decrement_badcount): New function which is used whenever
1769 we need to decrement the number of files which claim a
1770 particular bad block. Fixed bug where delete_file wasn't
1771 checking check_if_fs_block() before clearing the entry in
1772 block_dup_map. This could cause a block which was claimed
1773 by multiple files as well as the filesystem metadata to
1774 not be completely fixed.
1776 * pass1.c (adjust_extattr_refcount): Add new function which
1777 adjusts the reference counts of extended attribute blocks
1778 if needed, both up and down.
1779 (e2fsck_pass1): If the refcount or refcount_extra
1780 structure are present, call adjust_extattr_refcount(),
1781 and free it afterwards.
1783 * problem.h, problem.c (PR_1_EXTATTR_READ_ABORT,
1784 PR_1_EXTATTR_REFCOUNT, PR_1_EXTATTR_WRITE): Add new
1787 2001-07-02 Theodore Tso <tytso@valinux.com>
1789 * pass1.c (e2fsck_pass1, check_ext_attr, check_blocks): Add
1790 initial support for scanning extended attribute blocks.
1792 * e2fsck.c (e2fsck_reset_context): free extended attribute
1795 * e2fsck.h: Add new fields for accounting for the extended
1798 * Makefile.in, ea_refcount.c, e2fsck.h: Add new file which
1799 implements a reference count abstraction.
1801 * problem.c, problem.h: Add new problem codes PR_1_ALLOCATE_REFCOUNT,
1802 PR_1_READ_EA_BLOCK, PR_1_BAD_EA_BLOCK, PR_2_FILE_ACL_BAD
1804 * message.c: Add "@a" as an abbreviation for "extended attribute"
1806 * pass1b.c (clone_file): Add code which handles cloning an
1807 extended attribute block.
1809 * pass1b.c (delete_file):
1810 * pass2.c (deallocate_inode): If the inode contains an extended
1811 attribute block in the file_acl field, clear it and
1812 deallocate the block.
1814 2001-06-28 Theodore Tso <tytso@valinux.com>
1816 * pass2.c (e2fsck_process_bad_inode): Deal with inodes which are
1817 marked bad because of an invalid file_acl (either because
1818 EXT2_FEATURE_COMPAT_EXT_ATTR is not set, or because the
1819 block number in file_acl is bad.
1821 2001-06-29 Theodore Tso <tytso@valinux.com>
1823 * unix.c (show_stats): Use long long to calculate the percentage
1824 of the number of blocks in use in the filesystem.
1826 2001-06-23 Theodore Tso <tytso@valinux.com>
1828 * Release of E2fsprogs 1.22
1830 2001-06-22 Theodore Tso <tytso@valinux.com>
1832 * flushb.c: Use platform independent method of defining the
1833 BLKFLSBUF ioctl. Also include sys/mount.h since on newer
1834 platforms BLKFLSBUF is defined there.
1836 2001-06-19 Theodore Tso <tytso@valinux.com>
1838 * super.c (release_inode_blocks): Don't try to release the blocks
1839 if the orphaned inode is a device file, symlink, or some
1840 other kind of special file that doesn't have a block list.
1842 2001-06-15 Theodore Tso <tytso@valinux.com>
1844 * Release of E2fsprogs 1.21
1846 2001-06-13 Theodore Tso <tytso@valinux.com>
1848 * unix.c (check_if_skip): Adapted patch from Andreas Dilger which
1849 prints the number of mounts or days elapsed since the last
1850 check when e2fsck is forced to check an otherwise clean
1853 2001-06-12 Theodore Tso <tytso@valinux.com>
1855 * badblocks.c: Stop using the compatibility badblocks function,
1856 and use the ext2fs_badblocks_* functions instead.
1858 2001-06-11 Theodore Tso <tytso@valinux.com>
1860 * unix.c (PRS): Fix bug introduced in 1.20 which broke the -F
1863 * Makefile.in: Add message.c and swapfs.c to the list of source
1864 files to build the make depend.
1866 * swapfs.c, unix.c: Only support the -s and -S options to e2fsck
1867 if ENABLE_SWAPFS is defined.
1869 2001-06-08 Theodore Tso <tytso@valinux.com>
1871 * recover.c, revoke.c: Synchronize with ext3 0.7a
1873 2001-06-02 Theodore Tso <tytso@valinux.com>
1875 * recovery.c (scan_revoke_records): Fix bug in recovery code;
1876 missing byte order conversion.
1878 * pass1.c (mark_inode_bad): Replace alloc_bad_map with a function
1879 which sets the bit in the bad inode bitmap.
1880 (e2fsck_pass1): Check for fast symlinks with an invalid
1881 size, and set the bad inode map in that case.
1882 (check_size): Check i_size_high for special files and
1883 prompt to clear it along with i_size if non-zero.
1885 * pass2.c (e2fsck_process_bad_inode): Check for fast symlinks with
1886 an invalid size and prompt the user if the inode should be
1889 * problem.h, problem.c (PR_2_SYMLINK_SIZE): Added new problem code.
1891 2001-06-01 Theodore Tso <tytso@valinux.com>
1893 * problem.c, problem.h: Change PR_0_JOURNAL_UNSUPP_INCOMPAT and
1894 PR_0_JOURNAL_UNSUPP_ROCOMPAT so they aren't fatal errors,
1895 but prompt to see if the user should abort. Removed the
1896 PR_0_JOURNAL_RESET_COMPAT problem code.
1898 * journal.c (e2fsck_journal_load): If there are incompatible
1899 journal flags, just return an error code.
1900 (e2fsck_check_ext3_journal): If e2fsck_journal_load
1901 returns an error code indicating that there are
1902 incompatible journal flag, check to see if we should
1903 abort, and then offer to clear the journal.
1904 (Addresses Debian bug #98527.)
1906 * Makefile.in: Move include/asm/types.h.in to
1907 lib/ext2fs/ext2_types.h.in.
1909 2001-06-01 Theodore Tso <tytso@valinux.com>
1911 * pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode,
1912 pass1_check_directory): Add a safety check to make sure
1913 ctx->stashed_inode is non-zero.
1915 * pass1b.c (pass1b): Use e2fsck_use_inode_shortcuts() to disable
1916 the inode shortcut processing, instead of manually
1917 clearing only half of the function pointers that needed to
1918 be NULL'ed out. This caused nasty bugs if the last inode
1919 in the filesystem needed dup block processing.
1921 * pass1b.c (clone_file_block): When cloning a directory's metadata
1922 block, don't try to update the directory block list
1923 database, since indirect blocks aren't stored in the
1924 database and the resulting error will abort the file clone
1927 2001-05-25 Theodore Tso <tytso@valinux.com>
1929 * Release of E2fsprogs 1.20
1931 2001-05-25 Theodore Tso <tytso@valinux.com>
1933 * journal.c (e2fsck_journal_reset_super): Remove extraneous line
1935 2001-05-23 Theodore Tso <tytso@valinux.com>
1937 * journal.c (e2fsck_journal_reset_super): Fix bug; the reset
1938 journal wasn't getting written out to disk since the dirty
1939 bit wasn't being set on the buffer.
1940 (e2fsck_journal_load): Don't print an error message if the
1941 journal version number is wrong; just return a error code
1942 reflecting this fact. If the block type in the journal
1943 superblcok is obviously not a version number, report the
1944 journal is corrupted.
1945 (e2fsck_check_ext3_journal): On an unsupported journal
1946 version, prompt to abort by default, but then offer a
1947 chance to clear the journal as corrupt.
1949 * problem.c, problem.h (PR_0_JOURNAL_UNSUPP_VERSION): Added new
1952 2001-05-14 Theodore Tso <tytso@valinux.com>
1954 * pass1.c: Treat inodes with a low dtime (that were from a
1955 corrupted orphan list) specially.
1957 * problem.c, problem.h: Add new problem codes PR_1_LOW_DTIME and
1958 PR_1_ORPHAN_LIST_REFUGEES, and a new latch group,
1961 * problemP.h: Expand the size of the problem flag to be an int
1962 instead of a short. Expand space in the flag word which
1963 is reserved for problem latch flags from 3 bits to 8 bits.
1965 * e2fsck.h, scantest.c: Change location of ext2_fs.h to be
1968 * super.c (check_super_block): Be more strict on checking
1969 s_r_blocks_count superblock field.
1971 2001-05-13 Theodore Tso <tytso@valinux.com>
1973 * problem.c, problem.h (PR_0_JOURNAL_UNSUPP_ROCOMPAT,
1974 PR_0_JOURNAL_UNSUPP_INCOMPAT, PR_0_JOURNAL_RESET_COMPAT):
1977 * journal.c (e2fsck_journal_load): Use a problem code to
1978 report unsupported feature flags. There is code to
1979 clear unsupported flags, but since this is dangerous,
1980 it's not allowed in the problem code table.
1982 2001-05-11 Andreas Dilger <adilger@turbolinux.com>
1984 * journal.c (e2fsck_journal_reset_super): initialize the journal
1985 sequence number to a random value to avoid recovering
1986 bad transactions from a corrupt journal.
1988 2001-05-13 Theodore Tso <tytso@valinux.com>
1990 * journal.c: Code cleanup; initialize journal_enable_debug using
1993 2001-05-12 Theodore Tso <tytso@valinux.com>
1995 * unix.c (PRS): Skip validation of -C's file descriptor if it is
1996 zero, since that is special case.
1998 2001-05-09 Theodore Tso <tytso@valinux.com>
2000 * super.c (release_orphan_inodes): Add gettext quoting around
2001 "Truncating" and "Clearing" for i18n.
2003 2001-05-05 Theodore Tso <tytso@valinux.com>
2005 * util.c (fatal_error): Use the correct magic number when checking
2006 the magic number for the io_channel data structure. Also
2007 remove extraneous call to io_channel_flush() that was left
2008 over from an editing session.
2010 * pass2.c (check_dir_block): Ignore EXT2_ET_DIR_CORRUPTED errors
2011 from ext2fs_read_dir_block().
2013 2001-05-01 Theodore Tso <tytso@valinux.com>
2015 * unix.c (PRS): Validate the completion information file
2016 descriptor so that the completion bar won't get
2017 accidentally written onto the disk.
2019 * e2fsck.8.in: Add explanation that you can use mke2fs -n -b
2020 blocksize to printout alternate superblock locations.
2022 2001-04-26 Theodore Tso <tytso@valinux.com>
2024 * unix.c (check_if_skip): If the max_mount_count is zero, treat it
2025 as having no count set.
2027 2001-04-16 Theodore Tso <tytso@valinux.com>
2029 * super.c (check_super_block): Fix bad calculation of
2030 inodes_per_block, and tighten min/max checks to be a bit
2031 more paranoid. Thanks to Andreas Dilger for pointing out
2034 2001-03-29 Theodore Tso <tytso@valinux.com>
2036 * journal.c (mark_buffer_uptodate): Add emulation of kernel
2037 function mark_buffer_uptodate.
2039 * recovery.c, revoke.c: Synchronize with 0.6b ext3 files.
2041 2001-02-12 Theodore Tso <tytso@valinux.com>
2043 * journal.c (e2fsck_run_ext3_journal): Force a flush of the
2044 filesystem and io_channel before replaying the journal.
2046 2001-01-17 Theodore Ts'o <tytso@valinux.com>
2048 * pass1.c (check_blocks): Fix large file checking code so that
2049 files > 2GB are considered large files, and restrict
2050 directories from being > 2GB.
2052 2001-01-12 Theodore Ts'o <tytso@valinux.com>
2054 * journal.c (e2fsck_journal_fix_unsupported_super): Remove unused
2055 function. Add FIXME notes to e2fsck_get_journal(), from
2058 * pass1.c (e2fsck_pass1): Cap the maximum legal size of a file by
2059 the limit caused by the fact that i_blocks is in 512 byte
2060 units, and that the Linux buffer cache also fundamentally
2061 assumes 512 byte sectors.
2062 Make sure that the journal inode is a regular file, and
2063 when clearing an unused journal inode, make sure the
2064 icount db is updated.
2066 * problem.c, problem.h (PR_1_JOURNAL_BAD_MODE): Add new problem code.
2068 * problem.c: For PR_1_RESERVED_BAD_MODE, print a description of
2069 the reserved inode. In PR_0_JOURNAL_HAS_JOURNAL, prompt
2070 to clear the journal, rather than deleting it (which is
2071 more accurate). (From Andreas Dilger.)
2073 * journal.c: Make sure all functions which return an error code
2074 use the errcode_t return type, and not "int"
2075 (e2fsck_journal_release): Add new parameter, "drop",
2076 which is used when we just want to deallocate the journal
2077 without trying to write out any changes.
2078 (mark_buffer_clean): New function
2079 (e2fsck_check_ext3_journal): If we fail loading the
2080 journal, make sure we free all memory associated with it.
2081 (recover_ext3_journal): If we fail to load the journal or
2082 initialize the revoke data structures, make sure we free all
2083 memory associated with the journal.
2085 * message.c (special_inode_name): Add more special inode names
2086 (From Andreas Dilger)
2088 * util.c (fatal_error): Check to make sure the io_manager data
2089 structure is sane before trying to flush the io_channel.
2090 (From Andreas Dilger)
2092 * mtrace.h, super.c, pass2.c: Minor whitespace cleanups, from
2095 * journal.c (e2fsck_journal_fix_bad_inode): Set pctx->ino to the
2098 * problem.c (PR_0_JOURNAL_BAD_INODE): Use pctx->ino instead of
2099 pctx->num when printing the bad journal inode number.
2101 2001-01-11 <tytso@snap.thunk.org>
2103 * pass1.c (process_block): Remove dead code which was never
2106 * iscan.c, unix.c, e2fsck.h: Don't use NOARGS, and use
2107 ext2fs_sync_device() instead of using BLKFLSBUF.
2109 * flushb.c: Don't use NOARGS anymore; everything is STDC these days.
2111 * dirinfo.c, e2fsck.h, emptydir.c, iscan.c, jfs_user.h, journal.c,
2112 message.c, pass1.c, pass1b.c, pass2.c, pass3.c, pass4.c,
2113 pass5.c, problem.h, scantest.c, super.c, swapfs.c: Change
2114 ino_t to ext2_ino_t.
2116 2001-01-09 <tytso@snap.thunk.org>
2118 * problem.c: Fix another broken @F vs @f problem.
2120 2001-01-06 <tytso@snap.thunk.org>
2122 * journal.c, pass1.c, pass1b.c, pass3.c, recovery.c, revoke.c,
2123 super.c, unix.c, util.c: Fix random gcc -Wall complaints.
2125 * jfs_user.h: Use more sophisticated inline handling to allow
2126 building with --enable-gcc-wall
2128 2001-01-03 <tytso@snap.thunk.org>
2130 * pass1.c (e2fsck_pass1): Moved journal inode handling out to its
2131 own block; if the journal inode is not in use, and it
2132 contains data, offer to clear it.
2134 * problem.h, problem.c (PR1_JOURNAL_INODE_NOT_CLEAR): Add new
2137 * problem.c: Modified problem table to use a new abbreviations.
2139 * message.c: Add @j abbreviation for journal, and @v abbreviation
2142 * jfs_user.h: Moved contents of jfs_e2fsck.h into jfs_user.h.
2144 * journal.c (e2fsck_check_ext3_journal): Force a fsck if we remove
2145 the journal stored on a reserved inode. Also force a fsck
2146 if the journal appears to exist while !NEEDS_RECOVERY, and
2147 we forcibly reset the journal.
2149 2001-01-01 <tytso@snap.thunk.org>
2151 * journal.c, pass1.c, super.c, unix.c: Replace use of struct
2152 ext2fs_sb with struct ext2_super_block.
2154 * pass1.c (check_blocks): Remove use of EXT2_HAS_*_FEATURE macros.
2156 2000-12-31 <tytso@snap.thunk.org>
2158 * jfs_compat.h: Remove uneeded header file.
2160 2000-12-30 <tytso@snap.thunk.org>
2162 * malloc.h, mtrace.c: Renamed malloc.h to mtrace.h to avoid
2163 conflicts with the system header file.
2165 * problem.h: Fixed numbering of pass1 error messages; an extra 0
2166 had slipped into some of the numbers. (Pointed out by
2169 * journal.c (e2fsck_journal_fix_corrupt_super): Clean up
2170 unnecessary automatic variable. Add explanatory comment
2171 about the kernel emulation routines. (Suggested by
2174 2000-12-13 Theodore Ts'o <tytso@valinux.com>
2176 * journal.c (e2fsck_check_ext3_journal): Check to make sure the
2177 journal fields are consistent if any of the superblock
2178 fields are set. (Backs out erroneous change made by sct,
2179 pointed out by Andreas.)
2181 * unix.c (main): Clarify coments (no code changes)
2183 * super.c (release_orphan_inodes): Fix spelling typo in error message.
2185 * pass1.c (e2fsck_pass1): Offer to update the filesystem revision
2186 level if we need to set large files flag. Patch from
2189 * super.c (check_super_block): If we have any of the compatibility
2190 flags set, we need to have a revision 1 filesystem. Most
2191 kernels will not check the flags on a rev 0 filesystem
2192 and we may have corruption issues because of the
2193 incompatible changes to the filesystem. Patch from Andreas
2196 * problem.c, problem.h (PR_0_FS_REV_LEVEL, PR_1_FS_REV_LEVEL): Add
2199 2000-12-09 <tytso@snap.thunk.org>
2201 * flushb.c: Fix flushb so that it does something other than waste
2202 disk space when built on systems with modern header files
2203 and add a non-subtle Copyright Licensing restriction so
2204 Yann will remove it from the Debian Distribution. (Now
2205 violates the Debian Free Software Guidelines, on purpose.)
2207 * journal.c (e2fsck_check_ext3_journal): If JFS_DEBUG is defined
2208 at the top level, set the JFS debuging level to 2.
2210 * jfs_e2fsck.h, jfs_user.h: Replaces jfs_compat.h. The jfs.h file
2211 has been moved to the include/linux directory.
2213 * journal.c, revoke.c, recovery.c: Updated files from Stephen to
2214 support the V2 superblock and revoke processing. The
2215 journal.c and revoke.c files are copies from the ext3
2218 * Makefile.in: Added revoke.c to the list of source/object files.
2220 2000-11-16 Theodore Ts'o <tytso@valinux.com>
2222 * pass1b.c: Change routines to use PR_1B_BLOCK_ITERATE when
2223 reporting problems rather than using com_err directly.
2225 * problem.c, problem.h (PR_1B_BLOCK_ITERATE): Add new problem code.
2227 * message.c (expand_percent_expression): Add safety check. If
2228 ctx->str is NULL, print "NULL" instead of dereferencing
2231 * pass1b.c, pass2.c, pass3.c: Change calls to ext2fs_block_iterate
2232 to ext2fs_block_iterate2, to support 64-bit filesizes and
2233 to speed things up slightly by avoiding the use of the
2234 ext2fs_block_iterate's compatibility shim layer.
2236 2000-10-30 <tytso@snap.thunk.org>
2238 * util.c (get_backup_sb): Calculate backup superblock correctly
2239 when the blocksize is > 1k.
2241 2000-10-26 <tytso@snap.thunk.org>
2243 * jfs.h, jfs_compat.h, journal.c: Updated to include the
2244 definition of the new journal superblock format; still
2245 only supports V1 superblocks for now. (From sct)
2247 2000-10-24 <tytso@snap.thunk.org>
2249 * super.c (release_inode_block, release_inode_blocks,
2250 release_orphan_inodes): Add code to deal with truncating
2251 inodes which are still in use (but which are on the orphan
2252 list because they need truncation).
2254 * problem.c, problem.h: Rename PR_0_CLEAR_ORPHAN_INODE to
2255 PR_0_ORPHAN_CLEAR_INODE, and remove
2256 PR_0_ORPHAN_INODE_INUSE.
2258 * journal.c (e2fsck_run_ext3_journal): Add i18n support, and print
2259 a message when the journal is being recovered.
2261 * pass1.c (e2fsck_pass1): Don't check the i_mode field for the
2262 journal inode, if it is in use.
2264 2000-09-12 <tytso@valinux.com>
2267 * flushb.c: Add include of nls-enable.h which is necessary so that
2268 they can compile correctly.
2270 2000-08-22 <tytso@valinux.com>
2272 * unix.c (main): If we're doing a read-only check, skip the
2273 journal playback, but don't abort the e2fsck run.
2275 * super.c (release_orphan_inodes): Fix typo; should do bounds
2276 checking on next_ino instead of ino.
2278 * jfs_compat.h (J_ASSERT):
2279 * journal.c (e2fsck_run_ext3_journal):
2280 * pass3.c (adjust_inode_count): Use fatal_error() instead of exit().
2282 * unix.c: Use fatal_error() instead of exit() whenever possible.
2283 Also fix the fsck exit codes so that we use FSCK_USAGE
2284 when it is appropriate. Rename global_signal_ctx to
2285 e2fsck_global_ctx and let it be exported globally.
2287 * util.c (fatal_error): Try to flush the I/O manager before
2290 2000-08-20 <tytso@valinux.com>
2292 * journal.c (e2fsck_journal_load): Fix **nasty** bug which caused
2293 e2fsck_check_ext3_journal to smash the journal because
2294 journal->j_transaction_sequence wasn't getting
2297 * journal.c: (recover_ext3_journal, e2fsck_run_ext3_journal): Move
2298 call to e2fsck_clear_recover from recover_ext3_journal to
2299 after the filesystem has been closed and reopened.
2300 Otherwise, the superblock in the filesystem handle will
2301 probably be stale, and will overwrite the newer version of
2302 the superblock written by the log recovery.
2304 * message.c (expand_inode_expression): Add support for %Iu and %Ig
2306 * problem.h (PR_0_CLEAR_ORPHAN_INODE): Add new problem code.
2308 * super.c (release_orphan_inodes, release_inode_block,
2309 release_inode_blocks): Update the block group descriptor
2310 counts when freeing the orphan inode. Use
2311 PR_0_CLEAR_ORPHAN_INODE to report when we clear an orphan.
2313 * journal.c (e2fsck_run_ext3_journal): Fix a bug where we
2314 attempted to reopen the filesystem using the device name
2315 instead of the filesystem name.
2317 2000-08-18 <tytso@valinux.com>
2319 * Makefile.in: Update the make dependencies
2321 * problem.c, problem.h: Add the problem codes:
2322 PR_0_ORPHAN_ILLEGAL_BLOCK_NUM,
2323 PR_0_ORPHAN_ALREADY_CLEARED_BLOCK,
2324 PR_0_ORPHAN_ILLEGAL_HEAD_INODE,
2325 PR_0_ORPHAN_ILLEGAL_INODE, PR_0_ORPHAN_INODE_INUSE
2327 * super.c (release_inode_blocks, release_orphan_inodes,
2328 check_super_block): Add support for clearing orphaned
2329 inodes from the unmounted filesystem.
2331 * journal.c (e2fsck_recover_ext3_journal): Remove the last orphan
2332 check; this is now handled in check_super_block ---
2333 non-journaled filesystems can use the orphan list in the
2334 future. Also, move the the re-opening of the filesystem
2335 to e2fsck_run_ext3_journal().
2337 2000-07-12 Andreas Dilger <adilger@turbolinux.com>
2339 * journal.c: implement loading of ext3 journal for recovery code
2341 * problem.c (fix_problem): return answer from PR_AFTER_CODE to caller.
2342 Add journal problems.
2344 * recovery.c (journal_recover): user-space ext3 journal recovery code
2346 * unix.c (main) : check journal and do recovery in separate steps
2348 2000-08-07 <tytso@snap.thunk.org>
2350 * unix.c (calc_percent): Make sure that we don't take a floating
2351 exception if the max value is zero. (should normally
2352 never happen, but...)
2354 2000-07-13 <tytso@valinux.com>
2356 * Release of E2fsprogs 1.19
2358 2000-07-06 Theodore Ts'o <tytso@valinux.com>
2360 * unix.c (check_if_skip): Modify algorithm for checking
2361 s_max_mnt_count to match with the kernel. (If
2362 s_max_mnt_count is negative, ignore the mnt_count check.)
2364 * unix.c (e2fsck_update_progress): Adjust the width of the
2365 progress bar dynamically, based on the filesystem name
2366 that we need to display.
2368 * unix.c (main): If the ext3 needs_recovery flag is set, call
2369 e2fsck_run_ext3_journal() and then restart the e2fsck run.
2371 * journal.c (e2fsck_run_ext3_journal): New file which contains
2372 logic to recover the ext3 journal. This version relies on
2373 the kernel being able to mount the filesystem in order to
2376 2000-07-05 Theodore Ts'o <tytso@valinux.com>
2378 * unix.c (e2fsck_update_progress): Only save and check the last
2379 percentage after multiplying it by 10, nor 1000, since we
2380 only need to save values to a tenth of a percent (and the
2381 percentage is already from 0 .. 100%, not 0 .. 1).
2382 Also, re-arrange the logic so that we do the time
2383 check only after doing the percentage check, and we
2384 only advance the spinner if we're about to display it.
2386 2000-07-04 Theodore Ts'o <tytso@valinux.com>
2388 * pass1.c (e2fsck_pass1): Check to see if the ext3 s_last_orphan
2389 field is set; if so, clear it, so that ext3 mounting code
2390 won't get confused by the fact that we've cleared out the
2393 2000-06-10 Theodore Ts'o <tytso@valinux.com>
2395 * pass5.c (check_block_bitmaps, check_inode_bitmaps): Add error
2396 checking for a "should never happen case".
2398 * problem.c, problem.h (PR_5_COPY_IBITMAP_ERROR,
2399 PR_5_COPY_BBITMAP_ERROR): Add new error codes.
2401 2000-05-27 Theodore Ts'o <tytso@valinux.com>
2403 * pass1.c (pass1, check_size): Apply patch from Chris Wedgewood
2404 (cw@foof.org) which checks to see if special devices have
2405 a non-zero size, and deals with it.
2407 * problem.c, problem.h (PR1_SET_NONZSIZE): Add new problem code.
2409 2000-05-18 Theodore Ts'o <tytso@valinux.com>
2411 * Makefile.in (install): Create a symbolic link for fsck.ext3 as
2414 2000-05-08 Theodore Ts'o <tytso@valinux.com>
2416 * problem.c, problem.h (PR_0_HURD_CLEAR_FILETYPE): Add new problem
2419 * super.c (check_super_block): If the OS type in the superblock is
2420 the Hurd, check to see if the filetype feature is set, and
2421 offer to clear it if so. This needs to be done since the
2422 Hurd doesn't properly support the filetype feature.
2423 (And since the hurd allows the transmogrification of files
2424 to special files and vice versa --- for no good reason
2425 that I can understand --- it can't support the filetype
2426 feature for the forseeable future, either.)
2428 2000-04-03 Theodore Ts'o <tytso@valinux.com>
2430 * unix.c: For platforms that don't define optarg.h, manually
2431 define optarg and optind.
2433 2000-03-20 Theodore Ts'o <tytso@valinux.com>
2435 * pass1.c (check_immutable, e2fsck_pass1_check_device_inode):
2436 Check for the append-only as well as the immutable flag.
2438 * problem.c (PR_1_SET_IMMUTABLE): Adjust message to include
2439 append-only flag. Fix comment for compression flag.
2441 2000-02-12 <tytso@snap.thunk.org>
2443 * unix.c (e2fsck_update_progress): Limit the number of updates to
2444 the progress bars to 8 times a second. This allows a 9600
2445 baud console link to keep up.
2447 2000-02-11 <tytso@snap.thunk.org>
2449 * unix.c (main): If compression is enabled on the filesystem,
2450 print a warning message (for now).
2452 * message.c: Add new compression shortcut: @c == compress
2454 * problem.c, problem.h (PR_1_COMPR_SET): Add new error code.
2456 * pass1.c (check_blocks): If the inode has EXT2_COMPRBLK_FL flag
2457 set, check to see if the filesystem supports compression.
2458 If it does pass this information down to process_block()
2459 so it can treat the compressed block flag words
2460 correctly. If not, offer to clear the flag, since it
2462 (process_block): If an inode has the compressed inode flag
2463 set, allow EXT2FS_COMPRESSED_BLKADDR.
2465 * pass1b.c (process_pass1b_block, delete_file_block,
2467 * pass2.c (deallocate_inode_block): Use HOLE_BLKADDR to check to
2468 see if the block can be skipped.
2470 2000-02-08 <tytso@snap.thunk.org>
2472 * util.c: Make resource tracking message more concise.
2475 * pass1.c (mark_table_blocks, e2fsck_pass1): Remove
2476 ctx->block_illegal_map, since it's not needed by pass1,
2477 and pass1b has been modified to calculate it manually if
2478 needed. This reduces the memory footprint needed by e2fsck.
2480 * pass1b.c (check_if_fs_block): New static function which returns
2481 whether or not a block overlaps with filesystem metadata.
2482 This replaces consulting the block_illegal_map bitmap.
2484 * Makefile.in: Call sync after finishing building all in this
2487 * unix.c (PRS): sync the filesystem before trying to use
2488 BLKFLSBUF, to minimize the chance of causing dirty blocks
2491 * e2fsck.h: Manually define BLKFLSBUF if not defined, and we're on
2492 a Linux/i386 system.
2494 * pass3.c (check_directory): Only do the loop detection algorithm
2495 if we've searched over 2048 parent directories and haven't
2496 found the end yet. This means that in the common case, we
2497 don't allocate or clear the inode_loop_detection bitmap,
2498 which for large systems, merely clearing the bitmap for
2499 each directory was turning out to be quite expensive.
2500 Thanks to Jani Jaakkola (jjaakkol@cs.helsinki.fi) for
2501 identifying this problem.
2503 2000-02-06 Theodore Ts'o <tytso@valinux.com>
2505 * badblocks.c, e2fsck.h, ehandler.c, emptydir.c, extend.c,
2506 flushb.c, iscan.c, message.c, pass1.c, pass1b.c, pass3.c
2507 pass4.c, pass5.c, problem.c, scantest.c, swapfs.c,
2508 unix.c, util.c: Add Internationalization support as
2509 suggested by Marco d'Itri <md@linux.it>.
2511 2000-02-02 Theodore Ts'o <tytso@valinux.com>
2513 * e2fsck.h, flushb.c, scantest.c: Remove uneeded include of
2516 2000-01-18 Theodore Ts'o <tytso@valinux.com>
2518 * Makefile.in: Since LIBUUID can sometimes include "-lsocket"
2519 we need a separate DEPLIBUUID that can be used in
2520 Makefile's dependency rules.
2522 1999-11-23 <tytso@valinux.com>
2524 * e2fsck.8.in: Update language about where to find a backup
2527 1999-11-19 <tytso@valinux.com>
2529 * pass1.c (process_inodes): Add shortcut handling; if
2530 process_inodes_count is zero, return right away, to avoid
2531 calling qsort with a non-positive count.
2533 * message.c (safe_print): Fix to properly display ^A, ^B, etc. and
2534 to print Delete as ^?
2536 * Makefile.in (distclean): Remove TAGS and Makefile.in.old from
2537 the source directory.
2539 1999-11-10 <tytso@valinux.com>
2541 * Release of E2fsprogs 1.18
2543 1999-11-10 <tytso@valinux.com>
2545 * problem.c (fix_problem): Support a new flag, PR_PREEN_NO which
2546 means the answer is assumed to be no in preen mode. This
2547 is now used in the PR_1_SET_IMMUTABLE code, so that in
2548 preen mode we ignore these inodes and just print a warning
2551 1999-11-09 <tytso@valinux.com>
2553 * pass1.c (e2fsck_pass1): If the filesystem does not support
2554 imagic inodes, if an inode has the imagic flag set, offer
2555 to clear the imagic flag. If a valid device/fifo/socket
2556 has the immutable flag set, call the new helper function
2557 check_immutable() to offerto clear the immutable flag.
2559 * pass2.c (check_filetype): Use the new ext2_file_type() helper
2560 function instead of calculating the file_type information
2563 * pass3.c (e2fsck_reconnect_file): When adding a link to
2564 lost+found, calculate the filetype information so that
2565 ext2fs_link() can use the information if applicable.
2566 (get_lost_and_found): Create the /lost+found directory
2567 with the correct filetype information if applicable.
2569 * util.c (ext2_file_type), e2fsck.h: New function which returns
2570 the directory entry file type information given the
2573 * problem.c, problem.h: Added new problem codes PR_1_SET_IMAGIC
2574 and PR_1_SET_IMMUTABLE.
2576 1999-11-07 <tytso@valinux.com>
2578 * pass4.c (e2fsck_pass4): Clear inode_imagic_map after freeing it,
2579 to prevent it from getting freed twice.
2581 1999-11-06 <tytso@valinux.com>
2583 * unix.c (main): Close the filesystem before freeing the context,
2584 so that in the event of a free()-related segmentation
2585 violation, the filesystem is properly closed and written
2588 1999-10-27 <tytso@valinux.com>
2590 * e2fsck.c (e2fsck_reset_context): When freeing
2591 ctx->inode_reg_map, we weren't zero'ing
2592 ctx->inode_reg_map, which could cause a segfault later on
2595 1999-10-26 <tytso@valinux.com>
2597 * problem.h (PR_2_SPLIT_DOT): Fix excess zero in problem code (now
2598 matches the standard convention).
2600 1999-10-26 <tytso@valinux.com>
2602 * Release of E2fsprogs 1.17
2604 1999-10-26 <tytso@valinux.com>
2606 * message.c (safe_print): Make safe_print take an char instead of
2607 an unsigned char to fix gcc warnings.
2609 1999-10-25 <tytso@valinux.com>
2611 * util.c: For NT portability, don't redefine getchar(), since
2612 stdio defines that. Instead we introduce a new
2613 abstract macro read_a_char() which is #defined to the
2614 right function as necessary.
2616 * problem.c, problem.h (PR_2_NULL_NAME): Add new problem code.
2618 * pass2.c (check_dir_block): Require that the length of the
2619 directory entry be at least 12 bytes. Check to see if the
2620 filename is zero-length, and flag that as an error.
2622 1999-10-22 <tytso@valinux.com>
2624 * Release of E2fsprogs 1.16
2626 1999-10-22 <tytso@valinux.com>
2628 * pass2.c (check_filetype): If the filetype filesystem feature is
2629 not set, and a directory entry has a dirent feature, offer
2630 to clear it (since 2.0 kernels will do complain will
2631 interpret it as a very large name length field).
2633 * problem.c (PR_2_CLEAR_FILETYPE): Add new problem code.
2635 1999-10-21 <tytso@valinux.com>
2637 * e2fsck.8.in: Update man page to use a more standard format (bold
2638 option flags and italicized variables), as suggested by
2639 Andreas Dilger (adilger@enel.ucalgary.ca)
2641 * pass4.c (e2fsck_pass4): If an inode is set in the
2642 inode_imagic_map bitmap, don't check to see if it is
2643 disconnected from the inode tree (because it almost
2644 certainly will be). Free inode_imagic_map at the end of
2647 * pass2.c (check_dir_block, check_filetype): If the FILETYPE
2648 feature is set, check the directory entry's filetype
2649 information field, and fix/set it if necessary.
2650 (e2fsck_pass2): Free the inode_reg_map bitmap at the end
2653 * pass1.c (e2fsck_pass1, alloc_imagic_map): Allocate and fill in
2654 information for inode_reg_map and inode_imagic_map, which
2655 indicates which inodes are regular files and AFS inodes,
2657 Since only the master superblock is written during a
2658 restart, force that superblock to be used after a restart;
2659 otherwise changes to the block group descriptors end up
2662 * problem.c, problemP.h: If e2fsck is run -n, make def_yn variable
2663 be 0 for "no". Add support for a new flag, PR_NO_NOMSG,
2664 which supresses the problem message if e2fsck is run with
2667 * problem.c, problem.h (PR_2_SET_FILETYPE, PR_2_BAD_FILETYPE): Add
2670 * message.c (expand_dirent_expression): Add support for %dt which
2671 prints the dirent type information.
2673 * e2fsck.c (e2fsck_reset_context): Free new bitmaps (inode_reg_map
2674 and inode_imagic_map).
2676 * e2fsck.h (e2fsck_t): Add new inode_reg_map and inode_magic_map
2677 to the context structure.
2679 1999-09-24 <tytso@valinux.com>
2681 * unix.c (PRS), util.c (ask_yn): Add #ifdef's to make
2682 e2fsprogs easier to port to non-Unix platforms.
2684 1999-09-07 <tytso@valinux.com>
2686 * pass3.c (adjust_inode_count): Fix bug where we didn't keep the
2687 internal and external inode counts in sync when we
2688 decremented an inode whose link count was already zero.
2689 Now we skip incrementing or decrementing both link counts
2690 if we would cause an overflow condition.
2691 (expand_dir, expand_dir_proc): Change where we update the
2692 inode block count and size files so that the block count
2693 field is updated correctly when we create an indirect block.
2695 1999-08-05 <tytso@valinux.com>
2697 * super.c (check_super_block): Check to see whether the
2698 inodes_per_group value in the superblock is insanely too
2701 1999-08-02 <tytso@valinux.com>
2703 * pass1b.c (clone_file_block): Don't clear the dup_map flag if
2704 the block also shares data with the fs metadata when
2705 the count drops to 1, since the block should still be
2706 cloned, as fs metadata isn't included in the count.
2708 1999-07-18 Theodore Ts'o <tytso@valinux.com>
2710 * Release of E2fsprogs 1.15
2712 1999-07-19 <tytso@valinux.com>
2714 * unix.c (usage): Add minimalist emergency help to the usage
2717 1999-07-18 <tytso@valinux.com>
2719 * unix.c: Add support for calculating a progress bar if the -C0
2720 option is given. The function e2fsck_clear_progbar()
2721 clears the progress bar and must be called before any
2722 message is issued. SIGUSR1 will enable the progress bar,
2723 and SIGUSR2 will disable the progress bar. This is used
2724 by fsck to handle parallel filesystem checks. Also, set
2725 the device_name from the filesystem label if it is
2728 * e2fsck.h: Add new flags E2F_FLAG_PROG_BAR and
2729 E2F_FLAG_PROG_SUPRESS. Add new field in the e2fsck
2730 structure which contains the last tenth of a percent
2731 printed for the user.
2733 * message.c (print_e2fsck_message): Add call to
2734 e2fsck_clear_progbar().
2736 * pass1.c (e2fsck_pass1):
2737 * pass2.c (e2fsck_pass2):
2738 * pass3.c (e2fsck_pass3):
2739 * pass4.c (e2fsck_pass4):
2740 * pass5.c (e2fsck_pass5): Add call to e2fsck_clear_progbar when
2741 printing the resource tracking information.
2743 * pass5.c (check_block_bitmaps, check_inode_bitmaps): If there is
2744 an error in the bitmaps, suppress printing the progress
2745 bar using the suppression flag for the remainder of the
2746 check, in order to clean up the display.
2748 1999-06-30 <tytso@valinux.com>
2750 * unix.c (check_mount): Clean up the abort message displayed when
2751 the filesystem is mounted and either stdout or stdin isn't
2754 1999-06-25 <tytso@valinux.com>
2757 * pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode,
2758 pass1_check_directory, e2fsck_use_inode_shortcuts): Make
2759 pass1_* be private static functions, and create new
2760 function e2fsck_use_inode_shortcuts which sets and clears
2761 the inode shortcut functions in the fs structure.
2764 * pass2.c (e2fsck_process_bad_inode): Make process_bad_inode() an
2767 * pass4.c (e2fsck_pass4): Call e2fsck_process_bad_inode to check
2768 if a disconnected inode has any problems before
2769 connecting it to /lost+found. Bug and suggested fix by
2770 Pavel Machek <pavel@bug.ucw.cz>
2772 1999-06-21 <tytso@valinux.com>
2774 * unix.c (main): Add missing space in the disk write-protected
2777 1999-05-22 <tytso@rsts-11.mit.edu>
2779 * problem.c, problem.h (PR_0_INODE_COUNT_WRONG): Add new problem
2782 * super.c (check_super_block): Add check to make sure the total
2783 number of inodes is sane, since this can be calculated
2784 from the number of groups times the number of inodes per
2785 group. Offer to correct it if it is incorrect.
2787 1999-03-19 <tytso@rsts-11.mit.edu>
2789 * pass5.c (check_block_end): Fix fencepost condition where when
2790 clearing the block padding we were missing the last position
2793 1999-05-17 <tytso@rsts-11.mit.edu>
2795 * unix.c (reserve_stdio_fds): Add safety check in case
2796 reserve_stdio_fds couldn't open /dev/null.
2798 1999-03-14 Theodore Ts'o <tytso@rsts-11.mit.edu>
2800 * util.c (print_resource_track): Use mallinfo if present to get
2801 more accurate malloc statistics.
2803 * pass3.c (get_lost_and_found): Check to see if lost+found is a
2804 plain file; if so, offer to unlink it.
2806 * problem.c, problem.h (PR_3_LPF_NOTDIR): Add new problem code.
2808 1999-03-09 Theodore Ts'o <tytso@rsts-11.mit.edu>
2810 * problem.c: Fix problem message for PR_1_BAD_GROUP_DESCRIPTORS so
2811 that the block group number is printed. Add new prompt,
2814 1999-01-09 Theodore Ts'o <tytso@rsts-11.mit.edu>
2816 * Release of E2fsprogs 1.14
2818 1999-01-09 Theodore Ts'o <tytso@rsts-11.mit.edu>
2820 * message.c (safe_print): New function which prints strings,
2821 converting non-printable characters using the '^' and
2822 M-notation. This function is now used to print directory
2823 name entries and pathnames.
2825 Mon Jan 4 02:28:59 1999 Theodore Y. Ts'o <tytso@mit.edu>
2827 * unix.c (main): Reset the context before calling ext2fs_close(),
2828 to avoid referencing already freed memory.
2830 1998-12-15 Theodore Ts'o <tytso@rsts-11.mit.edu>
2832 * Release of E2fsprogs 1.13
2834 1998-12-03 Theodore Ts'o <tytso@rsts-11.mit.edu>
2836 * Makefile.in: Updated dependencies.
2838 1998-11-27 Theodore Ts'o <tytso@rsts-11.mit.edu>
2840 * pass3.c (get_lost_and_found): If the filesystem is not opened
2841 read-only, then force /lost+found to be created if it is
2844 * problem.c: Allow PR_3_NO_LF_DIR to be handled during a preen
2847 1998-10-28 Theodore Ts'o <tytso@rsts-11.mit.edu>
2849 * unix.c (main): Move ext2fs_close() after e2fsck_free_context()
2850 since e2fsck_free_context may reference data in ctx->fs.
2852 * e2fsck.c (e2fsck_reset_context): Make sure ctx->fs is non-NULL
2853 before checking ctx->fs->dblist.
2855 1998-10-09 Theodore Ts'o <tytso@rsts-11.mit.edu>
2857 * pass1.c (e2fsck_pass1): Use the device check subroutine on
2858 FIFO's and Socket's, so that we catch bogus immutable inodes.
2860 * pass2.c (process_bad_inode): Process bad socket and fifo's.
2862 * problem.h, problem.c: Define new problem codes PR_2_BAD_FIFO and
2865 1998-09-02 Theodore Ts'o <tytso@rsts-11.mit.edu>
2867 * problem.c: Add PR_3_NO_DIRINFO error code.
2869 * super.c (check_super_value): Rename min and max to min_val and
2870 max_val to avoid possible cpp macro conflicts.
2872 * pass4.c (e2fsck_pass4): Rename max to maxgroup, to avoid
2873 possible cpp macro conflicts.
2875 * pass3.c (e2fsck_pass3): Rename max to maxdirs, to avoid possible
2876 cpp macro conflicts.
2877 (check_directory): Fix logic to avoid possible core dump
2878 in the case of ext2fs_get_dir_info returning NULL. (By
2879 the time we get here, it should never happen, but...).
2880 Also simply/streamline the control flow of the function.
2882 1998-08-17 Theodore Ts'o <tytso@rsts-11.mit.edu>
2884 * unix.c (check_if_skip): Move the "not cleanly mounted" check
2885 ahead of the maximal mount and too long since checked tests.
2886 (reserve_stdio_fds): Make sure 0,1,2 file descriptors are
2887 open, so that we don't open the filesystem using the same
2888 file descriptor as stdout or stderr.
2890 1998-08-01 Theodore Ts'o <tytso@rsts-11.mit.edu>
2892 * pass2.c (e2fsck_pass2): Fix the progress accounting so that we
2895 * pass3.c (e2fsck_pass3): Change progress accounting to be
2896 consistent with the other e2fsck passes.
2898 * e2fsck.c (e2fsck_run): At the end of each pass, call the
2899 progress function with the pass number set to zero.
2901 * unix.c (e2fsck_update_progress): If the pass number is zero,
2902 ignore the call, since that indicates that we just want to
2903 deallocate any progress structures.
2905 1998-07-09 Theodore Ts'o <tytso@rsts-11.mit.edu>
2907 * Release of E2fsprogs 1.12
2909 1998-07-09 Theodore Ts'o <tytso@rsts-11.mit.edu>
2911 * unix.c (main): Fix typo in checking the incompat feature set; it
2912 should be checked against EXT2_LIB_FEATURE_INCOMPAT_SUPP.
2914 1998-07-07 Theodore Ts'o <tytso@rsts-11.mit.edu>
2916 * badblocks.c (test_disk): Don't clear the existing bad blocks
2917 list when using e2fsck -c, since it may cause blocks with
2918 marginal errors to be dropped from the bad blocks list.
2920 Mon Jul 6 10:32:11 1998 Theodre Ts'o <tytso@lurch.mit.edu>
2922 * pass1.c (e2fsck_pass1): Use ext2fs_sb structure for
2923 compatibility with older kernels.
2925 1998-06-25 Theodore Ts'o <tytso@rsts-11.mit.edu>
2927 * unix.c (e2fsck_update_progress): Remove unused variables.
2929 1998-06-10 Theodore Ts'o <tytso@rsts-11.mit.edu>
2931 * pass1.c, problem.h: Change blkcnt_t to be e2_blkcnt_t to avoid
2932 collision with LFS API.
2934 * pass1.c (e2fsck_pass1): Fix bug so that ext2_max_sizes is
2935 properly initialized.
2936 (e2fsck_pass1): Don't allow the the boot loader inode to
2937 be a directory (clear the inode mode field if so).
2939 1998-05-07 Theodore Ts'o <tytso@rsts-11.mit.edu>
2941 * unix.c (PRS): Added new option -C, which causes e2fsck to print
2942 progress updates so that callers can keep track of the
2943 completion progress of e2fsck. Designed for use by
2944 progress, except for -C 0, which prints a spinning report
2945 which may be useful for some users.
2947 * pass5.c (e2fsck_pass5): Use a finer-grained progress reporting
2948 scheme (useful for larger filesystems).
2950 * e2fsck.h: Add progress_fd and progress_pos, for use by the Unix
2951 progress reporting functions.
2953 1998-04-28 Theodore Ts'o <tytso@rsts-11.mit.edu>
2955 * pass1.c (process_inode_cmp): Use EXT2_QSORT_TYPE to define the
2956 appropriate return type for comparison functions for qsort.
2958 * e2fsck.h: Add #ifdef protection for unistd.h
2960 * super.c: Remove header files already included by e2fsck.h
2962 1998-04-26 Theodore Ts'o <tytso@rsts-11.mit.edu>
2964 * dirinfo.c (e2fsck_add_dir_info): Update function to pass the old
2965 size of the memory to be resized to ext2fs_resize_mem().
2967 1998-03-30 Theodore Ts'o <tytso@rsts-11.mit.edu>
2969 * Makefile.in: Change to use new installation directory variables
2970 convention. Fix uninstall rules to take $(DESTDIR) into
2971 account. Remove cat8dir from the installdirs target,
2972 since modern man package don't necessarily put the cat
2973 directory in /usr/man/cat?.
2975 1998-03-29 Theodore Ts'o <tytso@rsts-11.mit.edu>
2977 * super.c, e2fsck.h: Always declare e2fsck_get_device_size() as an
2978 extern in e2fsck.h to prevent -Wall warnings.
2980 * pass4.c (e2fsck_pass4): Remove unused variable 'j'.
2982 1998-03-28 Theodore Ts'o <tytso@rsts-11.mit.edu>
2984 * super.c (check_super_block): Fix broken superblock sanity check
2985 when calculating blocks_per_group if s_log_frag_size !=
2986 s_log_block_size. Since we don't support fragments, this
2987 isn't a bug deal, but it's good to get it fixed.
2989 1998-03-23 Theodore Ts'o <tytso@rsts-11.mit.edu>
2991 * unix.c: Fix bug in check of feature set, to make sure we can
2992 really fix this filesystem.
2994 * problem.h: Make blkcount type to be of type blkcnt_t. Make the
2995 num field be a 64 bit type. Add the problem code
2996 PR_1_FEATURE_LARGE_FILES
2998 * problem.c: Add table entry for the problem code
2999 PR_1_FEATURE_LARGE_FILES.
3001 * pass1.c (e2fsck_pass1): A non-zero i_dir_acl field is only
3002 a problem for directory inodes. (Since it is also
3003 i_size_high now.) If there are no large_files, then
3004 clear the LARGE_FLAG feature flag. If there are
3005 large_files, but the LARGE_FLAG feature flag is not set,
3006 complain and offer to fix it.
3007 (check_blocks): Add support to deal with non-directory
3008 inodes that have i_size_high set (i.e., large_files).
3009 Don't give an error if a directory has preallocated
3010 blocks, to support the DIR_PREALLOC feature.
3011 (process_block, process_bad_block): The blockcnt variable
3012 is a type of blkcnt_t, for conversion to the new
3015 * pass2.c (process_bad_inode): A non-zero i_dir_acl field is only
3016 a problem for directory inodes. (Since it is also
3019 * message.c (expand_inode_expression): Print a 64-bits of the
3020 inode size for non-directory inodes. (Directory inodes
3021 can only use a 32-bit directory acl size, since
3022 i_size_high is shared with i_dir_acl.) Add sanity check
3023 so that trying to print out the directory acl on a
3024 non-directory inode will print zero.
3025 (expand_percent_expression): %B and %N, which print
3026 pctx->blkcount and pctx->num, can now be 64 bit
3027 variables. Print them using the "%lld" format if
3028 EXT2_NO_64_TYPE is not defined.
3030 * e2fsck.h: Add the large_flagsfield to the e2fsck context.
3032 * e2fsck.c (e2fsck_reset_context): Clear the large_flags
3035 Sun Mar 8 23:08:08 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3037 * pass3.c (fix_dotdot_proc):
3038 * pass2.c (check_dot, check_dotdot, check_name, check_dir_block):
3039 * message.c (expand_dirent_expression): Mask off the high eight
3040 bits of the directory entry's name_len field, so that it
3041 can be used for other purposes.
3043 Fri Feb 27 00:01:39 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3045 * e2fsck.c (e2fsck_run): Since E2F_FLAG_SIGNAL_MASK doesn't
3046 include EXT2_FLAG_RESTART anymore, we need to adjust this
3047 routine so that it *does* return in the case of it seeing
3050 * pass1.c (e2fsck_pass1): ext2_get_next_inode() may call the group
3051 done callback function, which may set context abort
3052 flags. So we need to test the context abort flags after
3053 we call ext2_get_next_inode().
3054 (process_inodes): If we abort due out of process_inodes,
3055 do a clean exit by breaking out of the for loop instead of
3058 * e2fsck.h (E2F_FLAG_SIGNAL_MASK): EXT2_FLAG_RESTART shouldn't be
3059 considered a SIGNAL mask (i.e., requiring an immediate
3060 abort of processing to restart). FLAG_RESTART just means
3061 that we want to restart once pass 1 is complete.
3063 Tue Feb 24 15:19:40 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3065 * Change the progress function to return an integer; if returns 1,
3066 then the progress function is expected to have set the
3067 e2fsck context flag signalling a user abort, and the
3068 caller should also initiate a user abort.
3070 Tue Feb 17 19:03:44 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3072 * pass5.c (check_block_bitmaps, check_inode_bitmaps): Don't call
3073 end_problem_latch() unless there was actually a problem
3074 latched. Simplifies semantics of the latch processing.
3076 Mon Feb 16 17:31:44 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3078 * e2fsck.h: Add new field, priv_data to the e2fsck context
3079 structure. It should be used by callers of the e2fsck
3080 functions only, and not by anything in e2fsck itself.
3082 Mon Feb 7 17:31:04 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3084 * super.c: Instead of call ext2fs_get_device_size(), define and call
3085 e2fsck_get_device_size(). (This function may be stubbed
3086 out in special versions of e2fsck.)
3088 * pass3.c, pass4.c: Remove extra calls to the progress function
3089 that weren't needed.
3091 * mke2fs.8.in: Update man page to note that the format of the bad
3092 block file is the same as the one generated by badblocks.
3094 Sun Feb 1 07:57:14 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3096 * dirinfo.c, e2fsck.c: Don't include com_err.h; it isn't needed.
3098 * e2fsck.h: Include <time.h> since it is needed
3100 * super.c: If EXT2_SKIP_UUID is defined, then skip the UUID
3103 Tue Jan 20 15:37:01 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3105 * unix.c (main): In the case where the filesystem revision is too
3106 high, print the message about the superblock possibly
3109 * e2fsck.8.in: Add expanded comments about how the -b option
3112 Sat Jan 17 13:02:16 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3114 * e2fsck.h: If EXT2_FLAT_INCLUDES is defined, then assume all of
3115 the ext2-specific header files are in a flat directory.
3117 * dirinfo.c, ehandler.c, pass1.c, pass1b.c, pass2.c, pass5.c,
3118 super.c, swapfs.c, unix.c: Explicitly cast all assignments
3119 from void * to be compatible with C++.
3121 Tue Jan 6 11:30:24 1998 Theodore Ts'o <tytso@rsts-11.mit.edu>
3123 * unix.c (sync_disk): Remove sync_disk and calls to that function,
3124 since ext2fs_close() now takes care of this.
3126 Mon Dec 29 14:45:42 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3128 * pass1.c, pass1b.c, pass2.c, pass3.c, swapfs, badblocks.c,
3129 ehandler.c, unix.c: Change use of private to be priv_data,
3130 to avoid C++ reserved name clash.
3132 Fri Nov 28 09:30:26 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3134 * dirinfo.c (e2fsck_add_dir_info): Use ext2fs_get_num_dirs instead
3135 of e2fsck_get_num_dirs, which has been removed.
3137 Tue Nov 25 15:54:35 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3139 * Makefile.in (PROGS): Remove @EXTRA_PROGS@, since we don't want
3140 to compile and install flushb.
3142 Mon Nov 24 06:48:00 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3144 * pass1.c (e2fsck_pass1_check_device_inode): For now, only check
3145 to make sure the extra i_blocks in a device are cleared if
3146 the immutable flag is set.
3148 * util.c (print_resource_track): Fix typo which caused the
3149 time/resource tracking to print "Pass 1 :" instead of
3152 Thu Nov 20 16:02:23 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3154 * pass3.c (expand_directory): Fix bug which could cause core dump
3155 when expanding the directory, and the bitmaps hadn't yet
3156 been read in. Also, only use ext2fs_write_dir_block when
3157 writing a directory block, not when writing out a fresh
3160 Wed Nov 19 16:15:44 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3162 * pass1.c (process_bad_block): Fix bug where first_block wasn't
3163 getting incremented, which caused user to get a
3164 "Programming error?" warning if there was a bad block in a
3165 non-primary superblock/group_descriptor. Also fixed
3166 another bug so that ext2fs_bg_has_super() is consulted, to
3167 avoid problems when using a filesystem with the
3168 sparse_groups option set and there are bad blocks at the
3169 beginning of a group which doesn't have a superblock.
3171 Thu Nov 6 16:10:20 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3173 * pass1.c, pass2.c, pass3.c, pass4.c, pass5.c: Add calls to the
3174 progress indicator function.
3176 * pass1.c (scan_callback): Add call to the progress feedback
3177 function (if it exists).
3179 Tue Nov 4 09:45:36 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3181 * super.c (check_super_block): Skip the device size check if the
3182 get_device_size returns EXT2_EXT_UNIMPLEMENTED.
3184 * iscan.c (main): Don't use fatal_error() anymore.
3186 * pass1b.c, swapfs.c, badblocks.c: Set E2F_FLAG_ABORT instead of
3187 calling fatal_error(0).
3189 * problem.c, pass3.c (PR_3_ROOT_NOT_DIR_ABORT,
3190 PR_3_NO_ROOT_INODE_ABORT): New problem codes.
3192 * problem.c, pass2.c (PR_2_SPLIT_DOT): New problem code.
3194 * problem.c, pass1.c (PR_1_SUPPRESS_MESSAGES): New problem code.
3196 * problemP.h: New file which separates out the private fix_problem
3199 * util.c, dirinfo.c, pass1.c, pass1b.c, pass2.c, pass5.c, super.c,
3200 swapfs.c util.c: allocate_memory() now takes a e2fsck
3201 context as its first argument, and rename it to be
3202 e2fsck_allocate_memory().
3204 Mon Nov 3 14:35:29 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3206 * unix.c (main): Add a special case check for the error code EROFS
3207 and display an appropriate error message for this case.
3209 * [lots of files]: Change ext2fs_read_inode, ext2fs_write_inode
3210 to take the e2fsck context as their first argument.
3211 Change dir_info.c routines to take an e2fsck_context,
3212 renamed them to start with e2fsck_ to avoid namespace
3213 issues, and changed them to store the directory
3214 information inside the e2fsck context.
3215 Added e2fsck_run() which calls all of the e2fsck passes in
3216 the correct order, and which handles the return of abort
3217 codes. Added abort processing, both via setjmp/longjmp
3218 and via flags in the e2fsck context. Use a flag in the
3219 e2fsck context instead of the restart_e2fsck global
3220 variable. Change uses of free and malloc to
3221 ext2fs_free_mem and ext2fs_get_mem.
3223 Fri Oct 31 01:12:43 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3225 * pass1.c, pass3.c: Rename new error codes to _ET_ in them for
3228 Sat Oct 25 00:10:58 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3230 * pass3.c (get_lost_and_found): Check error return of
3231 EXT2_FILE_NOT_FOUND instead of ENOTDIR
3233 * pass1.c (pass1_check_directory): Return EXT2_NO_DIRECTORY
3236 Fri Oct 24 00:12:39 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3238 * unix.c (PRS): Make the variable which getopt returns into be
3239 an int, so that it won't lose on platforms where char is
3242 * pass1b.c (clone_file): Fix bug in error reporting in the case
3243 where cs.errcode is non-zero.
3245 Sun Oct 19 21:12:11 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3247 * pass*.c, super.c, unix.c, util.c, e2fsck.h: Place #ifdef
3248 RESOURCE_TRACK around code which uses init_resource_track
3249 and print_resource_track. (Not all systems have timeval)
3251 * super.c: Remove excess #includes which are not necessary.
3253 * e2fsck.h: Add #ifdef's for HAVE_SYS_TYPES_H and HAVE_SYS_TIME_H
3255 Fri Oct 3 13:40:03 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3257 * pass*.c, super.c: Massive changes to avoid using printf and
3258 com_err routines. All diagnostic messages are now routed
3259 through the fix_problem interface.
3261 Sat Sep 6 17:13:28 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3263 * pass2.c (check_dir_block): Check for duplicate '.' and '..'
3266 * problem.c, problem.h: Add new problem codes PR_2_DUP_DOT and
3269 Tue Sep 2 09:04:51 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3271 * problem.c: Added new problem codes for some of the
3272 superblock corruption checks, and for the pass header
3273 messages. ("Pass 1: xxxxx")
3275 * util.c (print_resource_track): Now takes a description
3278 Mon Aug 25 10:23:13 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3280 * super.c, unix.c, e2fsck.c: New files to separate out the
3281 operating-specific operations out from e2fsck.c.
3282 e2fsck.c now contains the global e2fsck context management
3283 routines, and super.c contains the "pass 0" initial
3284 validation of the superblock and global block group
3287 * pass1.c, pass2.c, pass3.c, pass4.c, pass5.c, util.c: Eliminate
3288 (nearly) all global variables and moved them to the e2fsck
3291 * problem.c, problem.h: Added new problem codes PR_0_SB_CORRUPT,
3292 PR_0_FS_SIZE_WRONG, PR_0_NO_FRAGMENTS,
3293 PR_0_BLOCKS_PER_GROUP, PR_0_FIRST_DATA_BLOCK
3295 Thu Aug 14 10:55:21 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3297 * message.c: Add compression for the word "Illegal"
3299 * problem.c: Added entries for PR_2_BAD_CHAR_DEV and
3302 Wed Aug 13 09:55:57 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3304 * pass1.c (pass1, check_device_inode), pass2.c
3305 (process_bad_inode): Use a more stringent test for a valid
3308 Sun Aug 10 18:58:02 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3310 * e2fsck.c (check_mount): Add stronger warning message about the
3311 perils of running e2fsck on a mounted filesystem.
3313 Tue Jun 17 01:33:20 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3315 * Release of E2fsprogs 1.11
3317 Thu Jun 12 00:25:31 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3319 * pass1.c (mark_table_blocks): Mark the superblock and group
3320 descriptor blocks first, so that any conflicts between
3321 these and the bitmap or inode table blocks is noticed.
3323 * problem.c: Fix message printed out when a block or inode bitmap
3324 conflicts with other fs data, has the correct group number
3327 Tue Jun 10 12:07:37 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3329 * pass2.c (pass2): Check the error return from ext2fs_dblist_iterate.
3331 Thu May 8 22:45:27 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3333 * e2fsck.8.in: Fix minor typos and grammer oops found by Bill
3334 Hawes (whawes@star.net).
3336 * badblocks.c (read_bad_blocks_file): Pass the blocksize to the
3337 bad blocks command so that all of the filesystem gets
3338 tested in the case where the blocksize 2048 or 4096.
3340 Thu Apr 24 12:16:42 1997 Theodre Ts'o <tytso@localhost.mit.edu>
3342 * Release of E2fsprogs version 1.10
3344 Mon Apr 21 22:43:08 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3346 * pass1b.c (pass1b): While scanning for inodes, simply skip inodes
3347 where ext2fs_get_next_inode returns the
3348 EXT2_ET_BAD_BLOCK_IN_INODE_TABLE error.
3350 Thu Apr 17 12:23:38 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3352 * Release of E2fsprogs version 1.09
3354 Fri Apr 11 18:56:26 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3356 * Release of E2fsprogs version 1.08
3358 Thu Apr 10 13:51:16 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3360 * pass1b.c (clone_file_block): If we clone a directory, we need to
3361 update the dblist entry so that we check (and correct) the
3362 right directory block.
3364 Sun Apr 6 09:13:12 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3366 * pass1.c (process_block): Don't clear blocks references to
3367 filesystem metadata; let pass 1B handle this case.
3369 * problem.c, problem.h: Add new problem, PR_1B_SHARE_METADATA.
3371 * pass1b.c (pass1d): Deal with a block which is shared with
3372 filesystem metadata.
3374 * e2fsck.h: Make block_illegal_map be a global variable
3376 Sat Apr 5 11:51:58 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3378 * e2fsck.c, pass1.c (mark_table_blocks): Support the sparse_super
3380 (get_backup_sb): New function which attempts to obtain the
3381 correct backup superblock (if possible).
3383 Fri Apr 4 10:46:26 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3385 * e2fsck.c (main): Check the version of the library, and warn if
3386 the library is out of date; this happens generally due to
3387 users who manually install e2fsprogs.
3389 * pass1.c (pass1_get_blocks): If the passed in inode number for
3390 get_blocks isn't what we're expecting pass back
3391 EXT2_ET_CALLBACK_NOT_HANDLED.
3393 Wed Mar 12 13:32:05 1997 Theodore Y. Ts'o <tytso@mit.edu>
3395 * Release of E2fsprogs version 1.07
3397 Tue Mar 11 10:31:47 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3399 * icount.c: New file which implements an inode count abstraction.
3400 This significantly reduces amount of memory needed to
3401 check really large filesystems.
3403 * pass1.c, pass2.c, pass3.c, pass4.c: Modified to use the icount
3406 Fri Mar 7 08:28:55 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3408 * dirinfo.c (dir_info_iter): New function which allows iteration
3409 over the directories in the dir_info map.
3411 * pass3.c (pass3, check_directory): Speed up pass 3 by iterating
3412 over all directories in the dir_info structure, instead of
3413 iterating all inodes looking for directories, and then
3414 looking up the directories using get_dir_info().
3416 Sat Feb 1 11:33:43 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3418 * pass1.c (pass1, process_block):
3419 * pass2.c (pass2): Use the ext2_dblist abstraction instead of
3420 manual code to manage the directory block list information.
3422 * pass1.c (check_blocks), pass1b.c (pass1b), pass2.c
3423 (deallocate_inode): Call the ext2 library routine
3424 ext2_inode_has_valid_blocks() instead of
3425 inode_has_valid_blocks().
3427 * swapfs.c (swap_inodes): Add check so that we don't try to call
3428 swap_inode_blocks unless the inode has valid blocks.
3429 (Otherwise a long fast symlink might cause
3430 swap_inode_blocks to erroneously get called.)
3432 Wed Jan 22 14:42:53 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3434 * problem.c, problem.h: Added entries for PR_2_DOT_NULL_TERM and
3435 PR_2_DOT_DOT_NULL_TERM.
3437 * pass2.c (check_dot, check_dot_dot): Make sure the new . and
3438 .. entries are null-terminated, since the 2.0 kernel
3439 requires this (for no good reason).
3441 Mon Jan 20 20:05:11 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3443 * pass1.c (pass1): Set the EXT2_SF_SKIP_MISSING_ITABLE flag so
3444 that we can recover from missing inode tables.
3446 * dirinfo.c (get_dir_info): If there are no directories in the
3447 dir_info abstraction, don't core dump (because dir_info is
3450 * e2fsck.c (main): Don't try using the backup superblocks if there
3452 (check_super_block): If there are illegal inode table or
3453 bitmaps, set the filesystem as being in error.
3455 Wed Jan 15 11:32:01 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
3457 * pass2.c (check_dir_block): Added check to make sure that rec_len
3458 is a a multiple of 4 (so that the directory entries are
3461 Sat Dec 28 12:16:32 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3463 * Makefile.in (uninstall): Uninstall all programs in the PROGS
3465 (PROGS): Don't build and install the extend program by
3469 Sat Dec 7 16:41:02 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3471 * pass1.c (process_inodes): Make sure the stashed_ino variable is
3472 saved and restored as well.
3473 (pass1): For fast sym links, skip the check_blocks
3474 processing step altogether.
3476 Mon Dec 2 09:28:24 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3478 * problem.c, message.c: New files, to completely refurbish how
3479 filesystem problems are reported to the user. The
3480 diagnostic messages are now encoded out in an easily
3481 customizable, extensible format. The messages printed out
3482 in preen mode are all on one line, and contain the device
3485 Fri Nov 29 20:26:08 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3487 * swapfs.c (swap_inodes): When swapping a filesystem, ignore
3490 * pass1.c (pass1): Ignore missing inode table errors during the
3491 scan, and just skip past those inodes.
3493 * pass3.c (check_root): Remove root_ino argument, and assume that
3494 the root inode must be EXT2_ROOT_INO. Move responsibility
3495 of setting the parent of the root inode in the directory
3496 inode structure to pass2().
3498 * pass2.c (check_dir_block): Don't allow links to the root
3501 * dirinfo.c (add_dir_info): Remove last argument to add_dir_info,
3502 since the inode is no longer used.
3504 Tue Oct 15 00:06:49 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3506 * e2fsck.c (main): If the superblock magic number is wrong, or the
3507 block group fails a sanity check, then automatically
3508 restart trying to use the backup superblocks.
3510 * pass1.c (mark_table_blocks): Make the inode tables ahead of
3511 everything else; in the case where a bitmap block overlays
3512 the inode table, the inode table should take precedence.
3514 * pass2.c (maybe_clear_entry): Make the deleted/unused error
3515 message fit on one line, since the error can happen during
3516 a preen pass. (We eventually need to revamp the whole
3517 e2fsck error reporting and prompting system, but that's a
3518 job for another day.)
3520 Mon Oct 14 22:29:49 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3522 * e2fsck.c (main): Read in the list badblocks into fs->badblocks
3523 for the benefit of the inode scan functions.
3525 * pass1.c (pass1): If ext2fs_get_next_inode() returns an error
3526 indicating that an inode is in a bad block, mark that
3527 inode as being used, as well as in the inode "bb" map.
3529 * pass2.c (maybe_clear_entry): New function which generalizes the
3530 error cases when a directory entry needs to be cleared.
3531 (check_dir_block): If an inode is in the "bb" map, offer
3532 to clear the directory entry, since the inode is in a bad
3535 * pass4.c (pass4): If an inode is marked as used, but is is marked
3536 in the "bb" map, don't process it as a disconnected inode.
3538 Tue Oct 8 02:02:03 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3540 * Release of E2fsprogs version 1.06
3542 Mon Oct 7 00:45:30 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3544 * e2fsck.c (main): Print out the version number of the shared
3545 library when using the -V option.
3547 * swapfs.c (swap_filesys): Change EXT2_SWAP to EXT2_FLAG_SWAP for
3550 * e2fsck.c (main): By setting EXT2_FLAG_MASTER_SB_ONLY, only write
3551 out the backup superblocks when we know we have a valid
3554 Tue Oct 1 22:00:29 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3556 * util.c (preenhalt): Make it explicit on preenhalt that running
3557 e2fsck manually means without the -a or -p flag.
3559 Fri Sep 27 14:41:08 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3561 * pass1.c (pass1): Add support for the EXT2_BOOT_LOADER inode.
3562 (Linux/FT actually sets the mode bits, so we have to
3563 handle it specially.)
3565 * e2fsck.c (check_if_skip): Print a message if the filesystem is
3566 just dirty, so that the user knows that it's about to be
3567 checked (since this will take a while).
3569 Mon Sep 16 17:00:01 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3571 * pass4.c: If a disconnected inode is zero-length, prompt to
3572 delete it instead of connecting it to lost+found.
3574 Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3576 * Release of E2fsprogs version 1.05
3578 Fri Aug 30 20:24:30 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3580 * pass4.c (pass4): If the user refuses to connect an unattached
3581 inode to lost+found, don't try to set i_links_count. This
3582 is bad, since if the user says yes, the inode will be
3583 marked as unused, which is not necessarily the right
3584 thing, especially since the rest of the cleanup doesn't
3587 * pass2.c (deallocate_inode): Set inode_link_info[ino] when
3588 dellocating an inode. (Not strictly necessary, but...)
3590 * pass4.c (pass4): Add "bonehead" explanation to the "programming
3593 Tue Aug 27 11:26:32 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3595 * e2fsck.c (PRS,main): Added new options -s and -S. -s will
3596 byte-swap the filesystem so that it is normalized. -S
3597 will byte-swap the filesystem regardless of its current
3600 * swapfs.c: New file, which will byte-swap a filesystem.
3602 Tue Aug 20 09:41:37 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3604 * pass1.c (pass1): Change handling on files with non-zero dtime
3605 and non-zero i_link_count; before we treated them as
3606 deleted file per botched ext2 0.3c kernel behavior. We
3607 now clear dtime instead.
3609 Mon Aug 19 23:33:57 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3611 * e2fsck.c (main): If e2fsck sets the clean bit, even if
3612 nothing else is changed, make sure FSCK_NONDESTRUCT is
3613 set (since after all having the filesystem set to
3614 invalid is an error. :-)
3616 Fri Aug 9 10:25:13 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3618 * pass1.c (process_block): Make sure that meta data doesn't get
3619 accidentally set in the dir_blocks array (which could
3620 happen in some error condtions).
3623 * pass2.c (process_bad_inode): Check for fragments in a
3624 OS-independent fashion.
3626 Thu Aug 8 15:20:54 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3628 * e2fsck.c (check_if_skip): Close the filesystem when skipping the
3629 cleanup for the filesystem.
3631 Mon Jul 22 22:03:28 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3633 * e2fsck.c: Improve corrupt_msg, so that it's less confusing.
3635 Thu May 16 11:12:30 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3637 * Release of E2fsprogs version 1.04
3639 Wed May 15 21:41:29 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
3641 * e2fsck.c (relocate_hint): Issue a hint that the user may wish to
3642 try "e2fsck -b 8193" before allowing e2fsck to relocate
3645 * Makefile.in (e2fsck): Build e2fsck statically or dynamically
3646 depending on the option to configure. Added targets for
3647 e2fsck.static and e2fsck.shared for people who want to
3648 build a static or shared variant manually.
3650 Wed Mar 27 00:33:40 1996 <tytso@rsts-11.mit.edu>
3652 * Release of E2fsprogs version 1.03
3654 Tue Mar 26 12:03:42 1996 <tytso@rsts-11.mit.edu>
3656 * e2fsck.c (show_stats): Don't use floating point to display
3657 percentage of non-contiguous files, as different libc
3658 handle result truncation differently, and this causes the
3659 test suite to bomb out depending on which libc you are
3662 * util.c (allocate_memory): Fix error message to omit extraneous
3665 Tue Mar 5 03:50:40 1996 <tytso@rsts-11.mit.edu>
3668 * pass2.c (check_dir_block):
3669 * pass1.c (pass1): Add support for dynamic first inode revision.
3671 Wed Feb 14 16:27:30 1996 <tytso@rsts-11.mit.edu>
3673 * pass3.c (check_root): Fix spelling typo
3675 Mon Feb 5 22:30:30 1996 <tytso@rsts-11.mit.edu>
3677 * e2fsck.c (check_super_block): If the superblock fails certain
3678 internal consistency checks, exit with a fatal error after
3679 printing the "superblock is corrupt message".
3681 Wed Jan 31 11:06:08 1996 <tytso@rsts-11.mit.edu>
3683 * Release of E2fsprogs version 1.02
3685 Wed Dec 15 21:24:26 1996 <tytso@rsts-11.mit.edu>
3687 * pass1.c (process_block): Check to see if a file is "fragmented".
3688 i.e., non-contiguous. Note that any file which is larger
3689 than the block group is guaranteed to be non-contiguous.
3690 We may want to use a different hueristic for deciding
3691 whether or not a file is "fragmented".
3693 * e2fsck.c (show_stats): Print statistics of how many
3694 non-contiguous files are on the system.
3696 Fri Dec 15 19:19:47 1995 <tytso@rsts-11.mit.edu>
3698 * badblocks.c (read_bad_blocks_file, test_disk): Fold
3699 functionality of test_disk() (which runs badblocks) into
3700 read_bad_blocks_file(); test_disk() now calls
3701 read_bad_blocks_file() with a NULL bad_blocks_file
3704 Mon Nov 20 18:30:10 1995 <tytso@rsts-11.mit.edu>
3706 * e2fsck.c (check_mount): Use #if defined(__linux__) instead of
3707 #if defined(linux). The latter won't work if we're
3710 Mon Oct 30 20:31:17 1995 <tytso@rsts-11.mit.edu>
3712 * e2fsck.c (check_mount): For Linux systems, the check to see if
3713 the root is mounted read-only has to be done for all
3714 filesystems, not just for the root filesystem, due to the
3715 way that some /etc/rc scripts are set up.
3717 Thu Oct 26 12:05:30 1995 <tytso@rsts-11.mit.edu>
3719 * Makefile.in (install): Strip programs when they are installed.
3720 (e2fsck): Build e2fsck statically.
3722 Wed Oct 25 21:18:16 1995 <tytso@rsts-11.mit.edu>
3724 * util.c (preenhalt): Preenhalt now takes an argument, which is an
3725 ext2fs_filsys; this allows it to set the EXT2_ERROR_FS
3726 flag in the superblock in cases where preenhalt is called.
3727 All calls to preenhalt() were changed to either
3728 preenhalt(fs) or preenhalt(NULL) in a few cases where the
3729 fs pointer was not available. (Most notable, for block
3732 Mon Sep 4 21:41:03 1995 Remy Card <card@bbj>
3735 util.c: Include <sys/time.h> before <sys/resource.h>. BSD needs it.
3737 Mon Sep 4 10:14:49 1995 <tytso@rsts-11.mit.edu>
3739 * e2fsck.c (show_stats): Show statistics about how many inodes
3740 have indirect, doubly indirect, and triply indirect
3741 blocks. Allow up to 8 digits for statistics, instead of
3742 merely 6, so things look pretty for large filesystems.
3744 * pass1.c (pass1): Keep statistics about indirect, doubly
3745 indirect, and triply indirect blocks.
3747 * pass1.c (unwind_pass1): Clear the above statistics when unwinding
3750 Fri Aug 18 15:17:10 1995 Theodore Y. Ts'o <tytso@dcl>
3752 * util.c, ehandler.c: Move #include of <sys/resource.h> after
3753 #include of "e2fsck.h", since sys/resource.h may depend on
3754 sys/time.h, which is #included in e2fsck.h.
3756 Thu Aug 17 22:33:37 1995 <tytso@rsts-11.mit.edu>
3758 * e2fsck.c (check_mount): Use the new ext2fs_check_if_mounted()
3759 function to determine if the device is mounted.
3761 * e2fsck.c (main): Add better error messages if ext2fs_open()
3764 Wed Aug 16 16:25:02 1995 <tytso@rsts-11.mit.edu>
3766 * pass1.c (check_blocks): If we're clearing a directory, clear
3767 pb.is_dir so we don't do the following check of making
3768 sure the directory size matches; this is pointless, since
3769 we've already cleared the inode.
3771 Fri Aug 11 09:08:54 1995 Theodore Y. Ts'o <tytso@lurch.mit.edu>
3773 * pass1.c (bad_primary_block): New function, called by
3774 process_bad_block, which explains the facts of life to the
3775 user when a block in the primary superblock or primary
3776 group descriptors is bad.
3778 * pass2.c (check_dot): Handle the case where the first directory
3779 entry is used, but not ".".
3781 * pass2.c (check_dotdot): Handle the case where the second directory
3782 entry is used, but is not "..".
3784 Thu Aug 10 10:05:10 1995 Theodore Y. Ts'o <tytso@lurch.mit.edu>
3786 * e2fsck.c (check_super_block): Get the size of the physical
3787 device and if it is smaller than the reported size of the
3788 filesystem, report an error.
3790 Sat Aug 12 03:39:18 1995 Remy Card <card@bbj>
3792 * e2fsck.c (check_if_skip): Print the number of allocated files and
3793 blocks on clean filesystems.
3795 Fri Aug 11 14:15:36 1995 Remy Card <card@bbj>
3797 * e2fsck.8: Updated date and version number.
3799 Thu Aug 10 14:26:01 1995 Remy Card <card@bbj>
3801 * pass1.c (check_blocks): Check that directory size matches *exactly*
3802 the count of allocated blocks.
3804 Wed Aug 9 21:21:24 1995 Theodore Y. Ts'o <tytso@dcl>
3806 * pass1b.c (pass1d): Free the shared[] array when we're done with
3807 it to avoid a memory leak.
3809 * pass1.c (unwind_pass1): Use ext2fs_free_block_bitmap to free the
3812 * pass2.c (process_bad_inode): When clearing the inode, make sure
3813 the pathname is freed, to prevent a memory leak.
3815 * pass5.c (check_inode_bitmaps): Free free_array and dir_array
3816 when we're finished with them.
3817 (check_block_bitmaps): Free free_array when we're finished
3820 * Makefile.in (e2fsck, flushb): Use $(LD) instead of $(CC) when
3821 linking the executable.
3823 * pass2.c (process_bad_inode): Even on OS's that don't support the
3824 fragment fields, make sure the Linux equivalent fields are
3825 set to zero. If an OS wants to reuse these fields, which
3826 is probably a bad idea (although we may get desperate in
3827 the future) this code will have to be changed.
3829 * pass1.c (dir_block_cmp): If the block numbers are equal, compare
3830 on the inode field, and then blockcnt field. This is just
3831 to keep the ordering of dir_blocks the same on all
3832 platforms when there are more than on missing directory
3833 blocks, which are indicated directories with holes, which
3834 are indicated with the block number being set to zero.
3836 Sun Aug 6 15:40:58 1995 Theodore Y. Ts'o <tytso@lurch.mit.edu>
3838 * pass1.c (check_blocks, process_block): check_blocks() modified
3839 to call the ext2fs_block_iterate() with BLOCK_FLAG_HOLE if
3840 the inode is a directory. process_block() now checks to
3841 see if a directory has a "hole", or missing block. If so,
3842 this fact is recorded in the directory block list so that
3843 the problem can be resolved in pass #2.
3845 * pass2.c (allocate_dir_block): Added allocate_dir_block() to
3846 allocate new blocks for directories with "holes". Called
3847 out of check_dir_block if a block in the directory block
3850 * pass3.c (get_lost_and_found): Move location of free(block) to
3851 prevent possible memory leak.
3853 Sat Aug 5 12:42:22 1995 Theodore Y. Ts'o <tytso@lurch.mit.edu>
3855 * pass2.c (check_dir_block): Use a automatic, fixed-saize array
3856 instead of alloca() --- alloca is not portable! Check to
3857 make sure the filename is not longer than EXT2_NAME_LEN,
3858 and offer to fix it by truncating it, since it should
3861 * e2fsck.c (PRS): Use malloc() instead of alloca() --- alloca() is
3862 not portable!! In any case putenv() in some systems must
3863 take a static character array or malloc()'ed memory;
3864 passing memory allocated using alloca() to putenv() is not
3867 * pass2.c (check_dot, check_dotdot): Use malloc() instead of
3868 alloca() --- alloca() is not portable!!!
3870 Tue Jul 18 20:04:02 1995 <tytso@rsx-11.mit.edu>
3872 * pass1b.c (pass1c):
3873 * pass3.c (check_root, get_lost_and_found):
3874 * pass2.c (check_dir_block): Use ext2fs_{read,write}_dir_block
3875 to read/write the directory block.
3877 Mon Jul 17 04:00:56 1995 <tytso@rsx-11.mit.edu>
3879 * util.c (ask_yn): Apply patch supplied by Peter A. Zaitcev to
3880 make sure VMIN and VTIME are set correct.
3882 Fri Jul 14 19:26:29 1995 <tytso@rsx-11.mit.edu>
3884 * pass1.c (mark_block_used): Change to be an inline function.
3885 Assume that the block validity checks are already done,
3886 and use the fast variant of the bitmap functions.
3888 Thu Jul 13 08:10:55 1995 <tytso@rsx-11.mit.edu>
3890 * pass5.c (check_block_bitmaps, check_inode_bitmaps): Check the
3891 bounds of the bitmaps in advance, and then use the fast
3892 variant of e2fs_test_{block,inode}_bitmap.
3894 * pass1.c (mark_block_used): Use ext2_fast_mark_block_bitmap since
3895 the bounds checking has already been done earlier.
3897 Wed Jul 12 02:22:46 1995 <tytso@rsx-11.mit.edu>
3899 * pass1.c (pass1): Allocate and free the block_illegal_map, which
3900 is used for shortcut processing in process_block.
3901 (mark_table_blocks): Initialize block_illegal_map with the
3903 (describe_illegal_block): New helper function that
3904 describes why a block is illegal.
3905 (process_block): Use block_illegal_map as a shortcut
3906 to determine whether a block is bad. Use
3907 describe_illegal_block to print out why the block is illegal.
3909 Mon Jun 12 19:11:06 1995 Theodore Y. Ts'o (tytso@dcl)
3911 * flushb.c: Don't include <linux/fs.h> if it doesn't exist.
3913 * scantest.c: Don't include <linux/fs.h>, <getopt.h>, or
3914 <mntent.h> if they don't exist. (Mostly so that "make
3917 * pass1.c, pass1b.c, pass3.c, badblocks.c: Include <errno.h> (if
3920 * e2fsck.c, scantest.c: Don't include <getopt.h> if it doesn't
3923 Mon Jun 12 08:37:49 1995 Theodore Y. Ts'o <tytso@lurch.mit.edu>
3925 * pass2.c (process_bad_inode, check_for_zero_long,
3926 check_for_zero_char): Change long to u32, and char to u8.
3928 Sun Jun 11 15:05:57 1995 Theodore Y. Ts'o <tytso@lurch.mit.edu>
3930 * util.c (inode_has_valid_blocks):
3931 * pass2.c (process_bad_inode):
3932 * pass1.c (pass1, check_blocks, pass1_check_directory): Use
3933 LINUX_S_IS* instead of S_IS*.
3935 * e2fsck.h: Don't #include <sys/stat.h>
3937 * flushb.c (main): Add #ifdef BLKFLSBUF around ioctl. (Although
3938 this program is pretty much useless if BLKFLSBUF isn't
3941 * e2fsck.c, badblocks.c: Add #include <errno.h>, since errno is
3944 Thu Jun 8 12:31:19 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
3946 * pass2.c (check_dot, check_dotdot, check_dir_block): Use alloca
3947 to allocate space for file names instead of using fixed size buffers.
3948 (process_bad_inode): Only check inode frag fields if
3949 HAVE_EXT2_FRAGS is defined (by configure).
3950 * pass1.c (pass1): Only check the inode frag fields if
3951 HAVE_EXT2_FRAGS is defined (by configure).
3953 * e2fsck.c (check_mount): Only check for a mounted filesystem if
3954 HAVE_MNTENT_H is defined (by configure).
3955 (PRS): Use alloca to allocate the new path string, instead of
3956 having a fixed size buffer (which was the wrong size anyway).
3957 (PRS): Only support the -F (flush) option if the BLKFLSBUF ioctl
3960 * e2fsck.h: Only include <linux/fs.h> if HAVE_LINUX_FS_H is
3961 defined (by configure).
3963 * Makefile.in: Rewritten to conform to GNU coding standards and
3964 support separate compilation directories.
3966 Thu Apr 6 15:04:36 1995 Remy Card <card@bbj.ibp.fr>
3968 * pass1.c (pass1): Test the mode in reserved inodes (must be zero).
3970 Sat Mar 11 13:12:16 1995 Theodore Y. Ts'o <tytso@localhost>
3972 * pass1.c (unwind_pass1): Clear the file type statistics counter
3973 when pass 1 needs to be restarted from scratch.
3975 * pass1.c (handle_fs_bad_blocks): Fix bug where bitmap blocks were
3976 being reallocated to blocks in the next block group,
3977 instead of the current block grup.
3979 * pass1.c (pass1, check_blocks): Set inode_link_info[ino] whenever
3980 inode.i_links_count is set.
3982 Tue Feb 14 01:38:04 1995 Theodore Y. Ts'o (tytso@rt-11)
3984 * pass1.c (process_block): Add checks for if the block is
3985 trepassing on a superblock or group descriptor table.
3987 Sat Dec 31 00:52:11 1994 <tytso@rsx-11.mit.edu>
3989 * main.c (corrupt_msg): Extend the message which is printed out
3990 when the superblock is corrupt, to include the suggestion
3991 of using the -b option to specify an alternate superblock.
3993 Thu Nov 24 09:29:58 1994 Theodore Y. Ts'o (tytso@rt-11)
3995 * badblocks.c (read_bad_blocks_file): If we are adding or
3996 replacing bad blocks in the bad blocks inode, sanity check
3997 the bad block inode first, and clear out any illegal blocks.
3999 * pass2.c (check_name): Don't bomb out if the attempt to get the
4000 pathname of the containing directory returns an error; the
4001 directory may be too badly damaged to expect that
4002 ext2fs_get_pathname will always succeed. Use "???" if the
4003 pathname can't be obtained (it's only for a printf to the
4006 The name of the containing directory and the bad filename
4007 were incorrectly interchanged in the user message. Fixed.
4009 * pass2.c (check_name, check_dir_block): Use a common static
4010 string for the unknown pathname.
4012 Mon Nov 7 22:30:54 1994 Remy Card <card@bbj>
4014 * Fixed lots of printf formats to make sure that block and inode
4015 numbers are printed as unsigned integers.
4017 Mon Oct 24 14:10:46 1994 (tytso@rsx-11)
4019 * pass5.c (check_block_end): Fix calculation of how the last block
4020 in the block bitmap should be calculated.
4022 Wed Sep 7 10:01:13 1994 (tytso@rsx-11)
4024 * pass1b.c (pass1_dupblocks): Fix declaration of dup_inode_map to
4025 be an ext2fs_inode_bitmap, and free it properly.
4028 * e2fsck.c (main): Folded in Remy Card's changes to add a revision
4029 level to the superblock.
4031 Wed Aug 17 22:00:20 1994 Remy Card (card@bbj)
4033 * e2fsck.c (usage): Fixed bogus usage message.
4035 Wed Aug 17 11:21:45 1994 Theodore Y. Ts'o (tytso@rt-11)
4037 * pass1.c (process_bad_block): Fixed bug so that blocks in the
4038 backup superblocks and group descriptors are handled gracefully.