+2003-08-20 Theodore Ts'o <tytso@mit.edu>
+
+ * journal.c (e2fsck_move_ext3_journal): If the superblock's backup
+ journal information is not set, copy the journal inode
+ information to the superblock.
+ (e2fsck_get_journal): If the journal inode is corrupted,
+ synthesize one from the backup information in the
+ superblock.
+
+ * problem.c, problem.h (PR_0_BACKUP_JNL): Add new problem code
+ which is used when we make a backup of the journal inode.
+
+2003-08-19 Theodore Ts'o <tytso@mit.edu>
+
+ * e2fsck.h, unix.c (PRS, e2fsck_clear_progbar,
+ e2fsck_simple_progress): Don't print the ^A and ^B
+ characters which bracket the progress bar when the e2fsck
+ program is talking directly to a tty, but only when it is
+ being piped to another program. (Addresses Debian bug
+ #204137)
+ * unix.c: Move some initialized variables to the BSS segment to
+ shrink the size of the e2fsck executable.
+
+2003-08-01 Philipp Thomas <pthomas@suse.de>
+
+ * Include inttypes.h if present. New macros INT_TO_VOIDPTR and
+ VOIDPTR_TO_INT. Use them throughout for int<->void *
+ casts to fix 64-bit warnings.
+
+ * dirinfo.c, dx_dirinfo.c, e2fsck.c, ea_refcount.c, journal.c,
+ message.c, pass1.c, pass1b.c, pass2.c, pass3.c, pass4.c,
+ pass5.c, super.c, swapfs.c: ext2fs_getmem(),
+ ext2fs_free_mem(), and ext2fs_resize_mem() all now take a
+ 'void *' instead of a 'void **' in order to avoid pointer
+ aliasing problems with GCC 3.x.
+
+2003-07-25 Theodore Ts'o <tytso@mit.edu>
+
+ * Release of E2fsprogs 1.34
+
+2003-07-06 Theodore Ts'o <tytso@mit.edu>
+
+ * pass2.c: Fix gcc -Wall nitpicks (missing #include <string.h>)
+
+ * dict.c, dict.h: Fix gcc -Wall nitpicks (indented cpp directives)
+
+2003-06-8 Theodore Ts'o <tytso@mit.edu>
+
+ * problem.c: Fix spelling error.
+
+2003-05-17 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c (show_stats), e2fsck.h: Use ngettext (abbreivated with
+ the macro P_(str1, str2, n)) to simplify the statistics
+ reporting.
+
+2003-05-05 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c (main): If --enable-testio-debug is set, then use the
+ test_io manager so we can watch what e2fsck is doing.
+
+2003-05-03 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c (show_stats): Remove uneeded use of _() around string
+ under #ifndef NLS
+
+ * problem.c: Mark two strings (PR_1_RELOC_TO and
+ PR_2_NON_UNIQUE_FILE) as not being printf format strings.
+ Fix typo (doubled 'is') in PR_2_FILE_ACL_BAD.
+
+ * Makefile.in: Add $(LIBINTL) to the link line so we can support
+ using the internal gettext library.
+
+ * e2fsck.h: Add #ifndef protection around LOCALEDIR definition.
+
+2003-04-27 Theodore Ts'o <tytso@mit.edu>
+
+ * message.c (expand_at_expression): Fixed NLS support for message
+ abbreviations.
+
+2003-04-21 Theodore Ts'o <tytso@mit.edu>
+
+ * Release of E2fsprogs 1.33
+
+2003-04-19 Theodore Ts'o <tytso@mit.edu>
+
+ * rehash.c: Fix lint warnings by including string.h and ctype.h
+
+ * pass2.c (dict_de_cmp): Fix lint warnings by using const pointers.
+
+ * unix.c (e2fsck_simple_progress), e2fsck.h: Fix lint warnings by
+ using const pointers. Remove unused variables.
+
+2003-04-17 Theodore Ts'o <tytso@mit.edu>
+
+ * rehash.c (name_cmp): Sort the deleted inodes to the end of the
+ list, for portability to systems that whose qsort does not
+ perform a stable sort.
+
+2003-04-16 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c: Bracket progress bar output with control-A and control-B
+ characters. These characters are used as in-band
+ signalling to allow a logging program to filter out the
+ progress bar.
+ (PRS): Use setvbuf instead of setbuf to force stdout and
+ stderr to be non-buffered when the stdout/stderr are a pipe.
+ This fixes a cosmetic problem when using e2fsck under
+ logsave.
+
+2003-04-12 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c: Add #ifdef around #include <sys/ioctl.h>
+
+2003-04-05 Theodore Ts'o <tytso@mit.edu>
+
+ * super.c (check_super_block): Update the global free block and
+ inode counters from the block group specific counters
+ quietly. This is needed for an experimental patch which
+ eliminates locking the entire filesystem when allocating
+ blocks or inodes; if the filesystem is not unmounted
+ cleanly, the global counts may not be accurate.
+
+2003-03-17 Theodore Ts'o <tytso@mit.edu>
+
+ * util.c: Explicitly declare e2fsck_global_ctx as extern for the
+ benefit of the Apple Darwin port.
+
+2003-03-15 Theodore Ts'o <tytso@mit.edu>
+
+ * rehash.c (e2fsck_rehash_dir): If user specified the -n option,
+ skip trying to write out directory.
+ (e2fsck_rehash_directories): Fix the percentage
+ calculation in the progress bar.
+
+2003-03-14 Theodore Ts'o <tytso@mit.edu>
+
+ * problem.c, problem.h (PR_2_REPORT_DUP_DIRENT): Add new problem
+ code.
+
+ * pass2.c (check_dir_block): Check for duplicate filenames within
+ a single directory block (because this is the easy case;
+ we don't currently check for duplicates that span
+ directory blocks, for now. Eventually for htree
+ directories we can do this by searching for all directory
+ blocks that have a hash overflow, and then searching the
+ adjacent blocks to find all other potential duplicates.)
+
+ * iscan.c, scantest.c, unix.c: And #ifdef protection around
+ #include of malloc.h
+
+ * rehash.c (duplicate_search_and_fix): Now search for duplicates
+ filenames, and either prompt to remove a complete
+ duplicate entry, or to rename a duplicate filename.
+ (e2fsck_rehash_dir): Use a progress bar to report
+ progress, and don't print all of the directory inodes as
+ they are optimized.
+
+ * problem.c, problem.h (PR_2_DUPLICATE_DIRENT,
+ PR_2_NON_UNIQUE_FILE): New problem codes.
+
+ * unix.c (e2fsck_simple_progress), e2fsck.h: New function which
+ can be called to provide specialized progress bars that
+ are not related to the top-level pass-based completion
+ percentage.
+
+ * pass3.c (e2fsck_adjust_inode_count), e2fsck.h: Export previously
+ static function.
+
+2003-03-06 <tytso@mit.edu>
+
+ * e2fsck.8.in: Fix minor nit in the -C option. (Addresses Debian
+ bug #173612)
+
+2003-03-01 Theodore Ts'o <tytso@mit.edu>
+
+ * Makefile.in, journal.c, unix.c: Use blkid functions to find the
+ journal from the UUID, and to interpret the device
+ specification.
+
+ * e2fsck.c: Free the blkid_cache when releasing the e2fsck context
+ structure.
+
+ * e2fsck.h: If strnlen is not present, define it as a macro which
+ calls e2fsck_strlen(). Add prototype for string_copy().
+ Add blkid_cache to e2fsck context, and make
+ filesystem_name, device_name, and journal_name be
+ non-const variables.
+
+ * pass1.c, pass2.c: Remove static strnlen function
+
+ * util.c (string_copy, e2fsck_strnlen): New functions
+
+2003-01-29 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c (usage): Make descripton -c be a bit more explicit
+
+2003-01-22 Theodore Ts'o <tytso@mit.edu>
+
+ * pass1.c (check_blocks): Use the EXT2_I_SIZE macro.
+
+2003-01-02 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c (main): Detect if there is an attempt to run the journal
+ twice, and abort with an error if this is the case.
+ (Address IBM Bugzilla bug #1226)
+
+2002-12-18 Theodore Ts'o <tytso@mit.edu>
+
+ * pass2.c (strnlen): Provide strnlen if libc doesn't.
+
+2003-11-19 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c (PRS): Print an error if more than one of the -p/-a, -n
+ or -y options are specified.
+
+2002-11-12 Theodore Ts'o <tytso@mit.edu>
+
+ * problem.c: Make HTREE problems PR_PREEN_OK, so that we don't
+ abort an e2fsck after the filesystem has been mounted
+ using the 2.4 ext2 codebase.
+
+2002-11-09 Theodore Ts'o <tytso@mit.edu>
+
+ * Release of E2fsprogs 1.32
+
+2002-11-08 Theodore Ts'o <tytso@mit.edu>
+
+ * Release of E2fsprogs 1.31
+
+2002-11-08 <tytso@snap.thunk.org>
+
+ * unix.c (main): Fix a bug where e2fsck could erroneously mark a
+ filesystem as being valid if it was being checked and it
+ is interrupted with a ^C. (Bug introduced in e2fsprogs
+ 1.28.)
+
+ * unix.c (PRS), journal.c: Set the default level of journal
+ debugging to be 0, and allow the user to set the level of
+ journal debugging by using the E2FSCK_JBD_DEBUG
+ environment variable.
+
+ * pass1.c (new_table_block), super.c (check_super_block), swapfs.c
+ (swap_filesys): Clear EXT2_FLAG_MASTER_SB_ONLY to make
+ sure the backup superblocks and group descriptors are
+ updated when we make an important change to the
+ superblocks and/or group descriptors. (i.e., generating a
+ UUID, allocating filesystem metadata, or byte-swapping the
+ filesystem.)
+
+2002-11-07 Theodore Ts'o <tytso@mit.edu>
+
+ * e2fsck.h, unix.c (main, check_mount): Fix e2fsck so that it
+ returns the appropriate exit code, so that the boot
+ scripts will be told that they need to automatically
+ reboot.
+
+2002-10-31 Theodore Ts'o <tytso@mit.edu>
+
+ * Release of E2fsprogs 1.30
+
+2002-10-31 Theodore Ts'o <tytso@mit.edu>
+
+ * unix.c (usage), e2fsck.8.in: Add the -D option to the usage and
+ command synopsis. (Addresses Debian bug #167108)
+
+ * pass1.c (e2fsck_pass1): Check the superblock write time to see
+ whether or not we can safely do the LOW_DTIME checks.
+ (Addresses Sourceforge bug #620980)
+
+2002-10-30 Theodore Ts'o <tytso@mit.edu>
+
+ * Makefile.in (install): Search all compression extensions when
+ deleting old man pages.
+
+ * pass1.c (mark_table_blocks): Fix bug in meta_bg support; only
+ mark blocks legacy group descriptor blocks up to
+ s_first_meta_bg.
+
+2002-10-20 Theodore Ts'o <tytso@valinux.com>
+
+ * pass1.c (mark_table_blocks): Add support for the meta_blockgroup
+ filesystem format.
+
+2002-10-13 Theodore Ts'o <tytso@mit.edu>
+
+ * pass3.c (e2fsck_get_lost_and_found): Pass in mode 700 to
+ ext2fs_new_inode().
+
+ * unix.c (show_stats): Fix format bug if NLS is in use.
+
+ * journal.c, pass1.c, revoke.c, util.c: Fix gcc -Wall nits.
+
+2002-10-08 Theodore Ts'o <tytso@mit.edu>
+
+ * pass3.c (e2fsck_get_lost_and_found): Create the lost+found
+ directory with mode 0700.
+
+2002-10-02 Theodore Y. Ts'o <tytso@mit.edu>
+
+ * pass2.c (parse_int_node, check_dir_block): Add byte-swap
+ functions around the htree code, so that it works on
+ big-endian machines.
+
+ * swapfs.c (swap_filesys): For PPC machines, byte-swap the bitmap,
+ since PPC big-endian filesystems were historically wierd.
+ This is just for the regression test, since no one
+ actually uses them anymore...
+
+2002-09-30 Theodore Ts'o <tytso@mit.edu>
+
+ * problem.c, problem.h (PR_2_HTREE_BAD_LIMIT,
+ PR_2_HTREE_BAD_COUNT, PR_2_HTREE_HASH_ORDER,
+ PR_2_HTREE_BAD_DEPTH): Add new problem codes.
+
+ * pass2.c (salvage_directory, check_dir_block): Avoid counting
+ directory entries twice during a directory salvage. Make
+ the salvaging algorithm smarter about directory entry size
+ overruns.
+ (parse_int_node): Add check to make sure the limit and
+ count fields in the node headers are sane. Also check
+ to make sure the hash table in ascending order.
+ (pass2, htree_depth): For all leaf nodes, determine their
+ depth in the tree, and make sure it matches with the depth
+ in the htree root information.
+
+2002-09-29 Theodore Ts'o <tytso@mit.edu>
+
+ * pass2.c (check_dir_block): Do a more paranoid check when trying
+ to determine whether or not a directory entry is a
+ completely empty leaf block or leaf node. Otherwise
+ e2fsck might get confused into thinking that a valid dxdir
+ was corrupted.
+
+ * rehash.c (e2fsck_rehash_dir): Apply patch from Christopher Li
+ which avoids creating an empty directory entry at the end
+ of the directory block. This screws up earlier versions
+ of the indexed directory patch.
+
+2002-09-28 Theodore Ts'o <tytso@mit.edu>
+
+ * rehash.c (write_directory): Clear the index flag if by
+ reoptimizing the directory, we bring it back into a
+ non-indexed state.
+ (e2fsck_rehash_dir): Allow directories that contain two
+ blocks to be indexed. Otherwise when they grow, they
+ never will be indexed by the kernel.
+
+ * unix.c (main): Only update the master superblock; there's no
+ point updating the backup superblocks, and it speeds up
+ fsck slightly.
+
+ * pass2.c (salvage_directory): New function called by
+ check_dir_block() which is much more sophisticated about
+ how it salvages corrupted filesystems.
+
+2001-09-24 Theodore Tso <tytso@mit.edu>
+
+ * Release of E2fsprogs 1.29
+
+2002-09-06 Theodore Ts'o <tytso@mit.edu>
+
+ * rehash.c (copy_dir_entries): Fix bug which caused corrupted
+ directories if there are 4 or 8 bytes left over in a
+ directory page when optimizing/reindexing a directory.
+
+2001-08-31 Theodore Tso <tytso@thunk.org>
+
+ * Release of E2fsprogs 1.28
+
+2002-08-31 Theodore Ts'o <tytso@mit.edu>
+
+ * ehandler.c (e2fsck_handle_read_error): If the user asks to
+ ignore the error, offer to try forcing a write of the
+ block to the disk; sometimes this will cause the drive to
+ remap the bad block.
+
+2002-08-31 Theodore Ts'o <tytso@valinux.com>
+
+ * pass2.c (e2fsck_pass2): If this is a HTREE directory, sort the
+ dblist so that the first block of all of the directories
+ is handled first so we can read the hash version
+ information.
+ (check_dir_block): Examine the root node for correctness,
+ and offer to clear it if it is not correct. Also copy the
+ hash version to the dx_dir structure, so that the proper
+ hash function can be used for other blocks in the
+ directory.
+
+ * problem.c, problem.h (PR_2_HTREE_BAD_ROOT): Add new problem code.
+
+2002-08-21 Theodore Ts'o <tytso@mit.edu>
+
+ * problem.c: Fix PR_1_RELOC_BLOCK_ALLOCATE message to explain that
+ it is necessary to find contiguous blocks in a particular
+ block group.
+
+2002-08-17 Theodore Ts'o <tytso@mit.edu>
+
+ * e2fsck.8.in: Add clarifying text describing how e2fsck works
+ with ext3 filesytems. (Addresses Debian bug #145044).
+
+ * pass1.c (handle_htree): Add support for EXT2_HASH_TEA
+
+ * e2fsck.h, e2fsck.c (e2fsck_allocate_context): Add new field to
+ the e2fsck context, ext_attr_ver, which specifies the EA
+ format version.
+
+ * unix.c (usage, parse_extended_opts, PRS), e2fsck.8.in: Add new
+ option -E, which allows the users to specify extended
+ options. Added ea_ver extended option.
+
+ * pass1.c (e2fsck_pass1_check_device_inode): Add ext2_filsys
+ argument to this function, so we can account for the
+ presence of extended attribute blocks attached to device
+ inodes.
+ (e2fsck_pass1_check_symlink, e2fsck_pass1): Take into
+ account the fact that symlinks can also have extended
+ attribute blocks.
+ (check_ext_attr): Don't be flexible about the EA format
+ version. Check against the version number in
+ ctx->ext_attr_ver.
+ (check_blocks): Check all inodes, so that we account for
+ extended attribute blocks belonging to special files.
+ Clean up i_size checks.
+
+ * pass1b.c (pass1b): Check all inodes, so that we account for
+ extended attribute blocks belonging to special files.
+ (delete_file_block): Use ext2fs_alloc_block_stats() to
+ update the filesystem statistics.
+ (delete_file): Attempt to decrement the extended
+ attribute refcount, and free the EA block if the count
+ hits zero.
+ (clone_file): Fixed bugs in EA handling. Don't call
+ block_iterate on inodes that don't have a valid i_block[]
+ array. Reread the base inode since it may have been
+ changed by ext2fs_block_iterate. When updating inodes as
+ part of cloning an EA block, write out the correct inode
+ structure.
+
+ * pass2.c (deallocate_inode_block, deallocate_inode): Use standard
+ ext2fs_alloc_*_stats functions to update the filesystem
+ statistics.
+ (deallocate_inode): Attempt to decrement the extended
+ attribute refcount, and free the EA block if the count
+ hits zero.
+ (e2fsck_process_bad_inode): Add extra argument to calls
+ to e2fsck_pass1_check_device_inode ().
+
+ * pass3.c (e2fsck_get_lost_and_found): Use standard
+ ext2fs_alloc_*_stats functions to update the filesystem.
+ statistics when creating /lost+found.
+ (adjust_inode_count): Remove debugging code that can never
+ be triggered.
+
+ * pass4.c (disconnect_inode): Add explanation about why we only
+ clear inodes that have no data blocks and no EA blocks.
+ Use ext2fs_inode_alloc_stats2 function to update the
+ filesystem statistics when clearing a zero-length inode.
+
+ * problem.c, problem.h (PR_1B_ADJ_EA_REFCOUNT,
+ PR_2_ADJ_EA_REFCOUNT): Add new problem codes.
+
+ * super.c (release_inode_block), (release_orphan_inodes): Use the
+ standard ext2fs_alloc_*_stats functions to update the
+ filesystem statistics.
+ (release_inode_blocks): Attempt to decrement the extended
+ attribute refcount, and free the EA block if the count
+ hits zero.
+
+2002-08-01 Theodore Ts'o <tytso@mit.edu>
+
+ * dict.c, dict.h: New file from kazlib 1.20 which implements a
+ red-black tree
+
+ * pass1b.c: Massive changes to take advantage of dict.c. This
+ removes several O(n**2) algorithms from the rare case
+ where there are a large number of blocks claimed by
+ multiple inodes.
+
+2002-07-24 Theodore Ts'o <tytso@mit.edu>
+
+ * e2fsck.8.in, e2fsck.h, pass3.c (e2fsck_pass3), unix.c, rehash.c:
+ Add new option -D, which requests e2fsck to optimize all
+ directories. Rehash.c will also compress and sort
+ non-indexed directories.
+
+ * problem.c, problem.h: Rename PR_3A_REHASH_* to PR_3A_OPTIMIZE_*
+
+ * unix.c (PRS): Make sure the signal_cancel is registered without
+ SA_RESTART.
+
+ * rehash.c (e2fsck_rehash_dir, copy_dir_entries, calculate_tree):
+ Restructured code in e2fsck_rehash_dir into two new
+ subroutines to make the code more understandable/maintainable.
+ (set_root_node): Fixed bug which caused the root node to
+ be invalid on non-FILETYPE filesystems due to an
+ unitialized variable.
+ (calculate_tree): Fix bug where pointers which might get
+ invalidated if realloc() moves outdir->buf around.
+ (e2fsck_rehash_dir): Fix memory leak bug.
+
+ * pass3.c (e2fsck_get_lost_and_found), e2fsck.h, e2fsck.c:
+ Exported as a public interface a function for finding the
+ lost and found directory. Cache the location of the lost
+ and found directory in the e2fsck context structure.
+
+ * util.c (ask_yn, read_a_char): Note when the user has typed ^C,
+ and abort processing by longjmp'ing to ctx->abort_loc.
+
+2002-07-23 Theodore Ts'o <tytso@mit.edu>
+
+ * pass1.c (e2fsck_pass1): If e2fsck is run with -n, don't create
+ the dirs_to_hash list, since we don't want to reindex
+ directories if the filesystem is opened read-only.
+
+2002-07-21 Theodore Ts'o <tytso@mit.edu>
+
+ * e2fsck.8.in: Document new exit code FSCK_CANCELED
+
+ * unix.c (PRS, signal_cancel): Capture SIGINT and SIGTERM signals
+ and set a flag in the e2fsck context indicating that
+ cancellation has been requested, so that e2fsck will exit
+ only at safe points.
+ (main): Change the exit handling so that if a cancellation
+ is requested, return FSCK_CANCELED (a new exit code 32).
+ e2fsck can now return more than one exit code as part of a
+ bitmask (as had been documented in the man page).
+
+ * pass2.c (e2fsck_pass2, check_dir_block), pass3.c (e2fsck_pass3),
+ pass4.c (e2fsck_pass4): Check to see if a cancellation was
+ requested, and abort processing if necessary.
+
+2002-07-19 Theodore Ts'o <tytso@mit.edu>
+
+ * rehash.c, Makefile.in: New file which rewrites directories using
+ the htree format.
+
+ * problem.c (fix_problem), problemP.h (PR_PREEN_NOHDR): Add option
+ which suppresses the header printed when in preen mode.
+
+ * pass3.c (e2fsck_pass3): If there are entries on the dirs_to_hash
+ list, call e2fsck_rehash_directories to reindex those
+ directories.
+ (e2fsck_expand_directory): Generalize the old
+ expand_dirctory() function so it can expand a directory to
+ a guaranteed minimum size.
+
+ * e2fsck.h (struct e2fsck_struct): Add the dirs_to_hash list. Add
+ new function prototypes for rehash.c and for
+ e2fsck_expand_directory().
+
+ * e2fsck.c (e2fsck_reset_context): Free the dirs_to_hash list.
+
+ * pass1.c (e2fsck_pass1): Initialize the dirs_to_hash list if the
+ htree feature is present in the filesystem.
+ (check_blocks): If a non-htree directory has more than 2
+ blocks, put it on the dirs_to_hash list.
+
+ * pass2.c (clear_htree): Add corrupt htree directories to the
+ dirs_to_hash list.
+
+ * problem.h, problem.c (PR_3A_PASS_HEADER, PR_3A_REHASH_ITER,
+ PR_3A_REHASH_DIR_ERR, PR_3A_REHASH_DIR_HEADER,
+ PR_3A_REHASH_DIR, PR_3A_REHASH_DIR_END): Add new problem codes
+
+ * pass2.c (parse_int_node), problem.c (PR_2_HTREE_BADBLK): Fix
+ problem display.
+
+2002-07-15 Theodore Ts'o <tytso@mit.edu>
+
+ * pass2.c (e2fsck_pass2): Use dx_dir->numblocks instead of
+ dx_dir->ino to indicate that a bad inode was cleared.
+
2002-06-26 Theodore Ts'o <tytso@mit.edu>
* pass1.c (check_blocks): Move htree handling to handle_htree().