2001-09-20  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.25

2001-09-19  Theodore Tso  <tytso@valinux.com>

	* unix.c (main): If a superblock is specified explicitly by the
		user, don't try to automatically fall back to an
		alternate superblock.

2001-09-02  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.24a

2001-08-30  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.24

2001-08-30  Theodore Tso  <tytso@valinux.com>

	* pass1.c (e2fsck_pass1): For EXT2_RESIZE_INO, allow its i_mode to
		either be zero or a regular file (for compatibility with
		Andreas's on-line resizing programs).

2001-08-27  Theodore Tso  <tytso@valinux.com>

	* unix.c (main): Remove EXT2FS_VERSION from the version display,
		since it only confuses people.

	* pass1.c (strnlen): Provide strnlen if libc doesn't.

2001-08-15  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.23

2001-08-13  Theodore Tso  <tytso@valinux.com>

	* super.c (release_orphan_inodes): If the filesystem contains
		errors, don't run the orphan * list, since the orphan list
		can't be trusted.

	* pass1.c (check_size): Fix logic in check_size; the previous code
		only offered to clear the inode size fields if both size
		and i_size_high were zero.
		(e2fsck_pass1_check_device_inode): If i_blocks is
		non-zero, then assume that the device/socket/fifo inode
		is bogus.

2001-08-09  Theodore Tso  <tytso@valinux.com>

	* pass1.c, pass2.c, problem.c, problem.h: Fix bug introduced by
		Andreas's symlink code; check_blocks() was unconditionally
		testing inode_bad_map without checking to see if it
		existed first.  Fixed problem a different way; we now no
		longer check inode_bad_map at all, since the file might
		not get deleted in pass 2 anyway.  We move the large file
		feature reconciliation code to to e2fsck_pass2(), and in
		deallocate_inode() in pass2.c, we decrement the large
		files counter if we're about to delete a large file.

	* unix.c (show_stats): Print the number of large files in verbose
		mode.

2001-08-07  Theodore Tso  <tytso@valinux.com>

	* journal.c (recover_ext3_journal): If s_errno is set in the
		journal superblock, set the EXT2_ERROR_FS flag in the
		filesystem superblock after the journal is run.

2001-08-04  Andreas Dilger  <root@lynx.adilger.int>

	* message.c:  Change comments for %D and %d expansion in e2fsck
		problem codes.  It was not consistent which was for dirent
		expansion, and which was for directory number expansion.

	* problem.c (PR_2_FINAL_RECLEN, PR_2_BAD_FILETYPE): Fix problem
		codes which got caught by the confusion between %D and %d.

2001-08-04  Theodore Tso  <tytso@valinux.com>

	* problem.c (PR_2_SYMLINK_SIZE): Change description to make it
		more clear (and remove %s expansion).  Also add missing
		periods to the end of a number of problem descriptions.

	* pass2.c (e2fsck_process_bad_inode): Remove unneeded problem
		context string set now that the problem description for
		PR_2_SYMLINK_SIZE has been changed.

	* pass1.c (e2fsck_pass1_check_symlink): Consolidate some checks,
		and check the validity of the symlink block here (so that
		we detect this case here instead of later).  Also use
		sizeof(inode->i_block) instead EXT2_LINK_DIR.

2001-07-30  Theodore Tso  <tytso@valinux.com>

	* unix.c (check_mount): Remove the code which tested for the root
		filesystem being mounted read-only, and depend on the
		results flags from ext2fs_check_if_mounted.

2001-07-29  Theodore Tso  <tytso@valinux.com>

	* unix.c (check_if_skip): Free the e2fsck context structure on a
		normal clean filesystem exit, to make it easier to find
		real memory leaks.
		(PRS): Only update the path to include /sbin at the
		beginning if the -c option is given, again to make it
		easier to find memory leaks.
		(main): Move the final print_resource_track call after the
		filesystem and the context are freed.

	* journal.c (e2fsck_journal_init_dev): Avoid memory leak if we
		need to search for the journal device.
		(e2fsck_journal_release): Free the journal IO channel when
		we release the journal handle, to avoid a memory leak.

	* e2fsck.c (e2fsck_reset_context): Fix bug; only close the io
		channel if it is *different* from the filesystem io
		channel.

2001-07-27  Theodore Tso  <tytso@valinux.com>

	* problem.c (PR_1_SET_IMMUTABLE): Clarify problem message.

	* pass1.c (e2fsck_pass1): Check for symlinks that have the
		immutable flag set (and offer to clear them).

2001-07-26  Theodore Tso  <tytso@valinux.com>

	* pass1.c (e2fsck_pass1): Free ctx->block_ea_map at the end of
		pass 1.

2001-07-25  Theodore Tso  <tytso@valinux.com>

	* pass1.c (check_ext_attr): Skip zero-length EA entries.

	* problem.c: PR_1_EA_ALLOC_COLLISION shouldn't abort, but should
		prompt to clear the EA block.

2001-07-22  Theodore Tso  <tytso@valinux.com>

	* journal.c (ll_rw_block): Use ctx->journal_io instead of the
		filesystem's io_channel.
		(e2fsck_journal_init_dev): New function which supports 
		initialization of the external journal.
		(e2fsck_get_journal): Remove code which flagged an error
		if the superblock reported the use of an external journal.
		(ext3_journal_via_mount): Remove unsued, #ifdefed out function.

	* problem.c, problem.h: Removed error codes no longer used
		(PR_0_JOURNAL_UNSUPP_DEV, PR_0_JOURNAL_BAD_DEV,
		PR_0_JOURNAL_UNSUPP_UUID) and replace them with new error
		codes related with failures in loading the external
		journal (PR_0_JOURNAL_UNSUPP_MULTIFS,
		PR_0_CANT_FIND_JOURNAL, PR_0_EXT_JOURNAL_BAD_SUPER).
		Also changed the text assocated with PR_0_JOURNAL_BAD_UUID
		to reflect the case where the external journal isn't
		correct for this filesystem.

	* unix.c (PRS), e2fsck.8.in: Add new option -j which allows
		the user to specify the pathname to find the external journal.

	* e2fsck.c (e2fsck_reset_context): Close journal_io if it isn't
		the same as the filesystem io_channel.

	* e2fsck.h: Add new fields (journal_io and journal_name) in the
		context structure to support external journals.

2001-07-20  Theodore Tso  <tytso@valinux.com>

	* unix.c (main): Add an explicit warning when the filesystem is
		left not completely fixed when e2fsck exits.  (Addresses
		Debian bug #104502.)

2001-07-19  Theodore Tso  <tytso@valinux.com>

	* pass1.c (check_ext_attr): The entire EA block is now checked to
		make sure that parts of the EA block aren't being used for
		multiple purposes.

	* Makefile.in e2fsck.h, region.c: New file which is used to detect
		collisions in extended attribute block.

	* problem.h, problem.c (PR_1_EA_MULTI_BLOCK, PR_1_EA_ALLOC_REGION,
		PR_1_EA_ALLOC_COLLISION, PR_1_EA_BAD_NAME,
		PR_1_EA_BAD_VALUE): Add new problem codes.

2001-07-10  Theodore Tso  <tytso@valinux.com>

	* journal.c (e2fsck_run_ext3_journal): Only call ext3_flush() if
		the superblock is dirty.

2001-07-07  Theodore Tso  <tytso@valinux.com>

	* pass1b.c (pass1b, process_pass1b_block): Change the num_bad
		field calculation so that it only counts EA block entries
		as a single multiply claimed block (since once we clone
		the EA blocks for one inode, we fix the problem for all of
		the other inodes).  Also, I moved the num_bad calculation
		from process_pass1b_block to the end of pass1b.  This
		fixes a *significant* performance bug in pass1b which hit
		people who had to had a lot of multiply claimed blocks.
		(Can you say O(n**3) boys and girls?  I knew you could...
		Fortunately, this case didn't happen that much in actual
		practice.)

	* pass1.c (e2fsck_pass1): Defer inodes which have an extended
		attribute block for later processing to avoid extra seeks
		across the disk.
		(process_inode_cmp): If there is no indirect block, sort
		by the extended attribute (i_file_acl) block.

	* pass1b.c (clone_file_block): Fix bugs when cloning extended
		attribute blocks.  Moved free of block_buf to after the
		code which clones the extattr block, and fixed logic for
		changing pointers to the extended attribute field in the
		inodes which were affected.
		(decrement_badcount): New function which is used whenever
		we need to decrement the number of files which claim a
		particular bad block.  Fixed bug where delete_file wasn't
		checking check_if_fs_block() before clearing the entry in
		block_dup_map.  This could cause a block which was claimed
		by multiple files as well as the filesystem metadata to
		not be completely fixed.

	* pass1.c (adjust_extattr_refcount): Add new function which
		adjusts the reference counts of extended attribute blocks
		if needed, both up and down.
		(e2fsck_pass1): If the refcount or refcount_extra
		structure are present, call adjust_extattr_refcount(),
		and free it afterwards.

	* problem.h, problem.c (PR_1_EXTATTR_READ_ABORT, 
		PR_1_EXTATTR_REFCOUNT, PR_1_EXTATTR_WRITE): Add new
		problem codes.

2001-07-02  Theodore Tso  <tytso@valinux.com>

	* pass1.c (e2fsck_pass1, check_ext_attr, check_blocks): Add
		initial support for scanning extended attribute blocks.

	* e2fsck.c (e2fsck_reset_context): free extended attribute
		refcount structure.

	* e2fsck.h: Add new fields for accounting for the extended
		attribute blocks.

	* Makefile.in, ea_refcount.c, e2fsck.h: Add new file which
		implements a reference count abstraction.

	* problem.c, problem.h: Add new problem codes PR_1_ALLOCATE_REFCOUNT,
		PR_1_READ_EA_BLOCK, PR_1_BAD_EA_BLOCK, PR_2_FILE_ACL_BAD

	* message.c: Add "@a" as an abbreviation for "extended attribute"

	* pass1b.c (clone_file): Add code which handles cloning an
		extended attribute block.

	* pass1b.c (delete_file): 
	* pass2.c (deallocate_inode): If the inode contains an extended
		attribute block in the file_acl field, clear it and
		deallocate the block.

2001-06-28  Theodore Tso  <tytso@valinux.com>

	* pass2.c (e2fsck_process_bad_inode): Deal with inodes which are
		marked bad because of an invalid file_acl (either because
		EXT2_FEATURE_COMPAT_EXT_ATTR is not set, or because the
		block number in file_acl is bad.

2001-06-29  Theodore Tso  <tytso@valinux.com>

	* unix.c (show_stats): Use long long to calculate the percentage
		of the number of blocks in use in the filesystem.

2001-06-23  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.22

2001-06-22  Theodore Tso  <tytso@valinux.com>

	* flushb.c: Use platform independent method of defining the
		BLKFLSBUF ioctl.  Also include sys/mount.h since on newer
		platforms BLKFLSBUF is defined there.

2001-06-19  Theodore Tso  <tytso@valinux.com>

	* super.c (release_inode_blocks): Don't try to release the blocks
		if the orphaned inode is a device file, symlink, or some
		other kind of special file that doesn't have a block list.

2001-06-15  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.21

2001-06-13  Theodore Tso  <tytso@valinux.com>

	* unix.c (check_if_skip): Adapted patch from Andreas Dilger which
		prints the number of mounts or days elapsed since the last
		check when e2fsck is forced to check an otherwise clean
		filesystem.

2001-06-12  Theodore Tso  <tytso@valinux.com>

	* badblocks.c: Stop using the compatibility badblocks function,
		and use the ext2fs_badblocks_* functions instead.

2001-06-11  Theodore Tso  <tytso@valinux.com>

	* unix.c (PRS): Fix bug introduced in 1.20 which broke the -F
		flag.

	* Makefile.in: Add message.c and swapfs.c to the list of source
		files to build the make depend.

	* swapfs.c, unix.c: Only support the -s and -S options to e2fsck
		if ENABLE_SWAPFS is defined.

2001-06-08  Theodore Tso  <tytso@valinux.com>

	* recover.c, revoke.c: Synchronize with ext3 0.7a

2001-06-02  Theodore Tso  <tytso@valinux.com>

	* recovery.c (scan_revoke_records): Fix bug in recovery code;
		missing byte order conversion.

	* pass1.c (mark_inode_bad): Replace alloc_bad_map with a function
		which sets the bit in the bad inode bitmap.
		(e2fsck_pass1): Check for fast symlinks with an invalid
		size, and set the bad inode map in that case.
		(check_size): Check i_size_high for special files and
		prompt to clear it along with i_size if non-zero.

	* pass2.c (e2fsck_process_bad_inode): Check for fast symlinks with
		an invalid size and prompt the user if the inode should be
		cleared.

	* problem.h, problem.c (PR_2_SYMLINK_SIZE): Added new problem code.

2001-06-01  Theodore Tso  <tytso@valinux.com>

	* problem.c, problem.h: Change PR_0_JOURNAL_UNSUPP_INCOMPAT and
		PR_0_JOURNAL_UNSUPP_ROCOMPAT so they aren't fatal errors,
		but prompt to see if the user should abort.  Removed the
		PR_0_JOURNAL_RESET_COMPAT problem code.

	* journal.c (e2fsck_journal_load): If there are incompatible
		journal flags, just return an error code.
		(e2fsck_check_ext3_journal): If e2fsck_journal_load
		returns an error code indicating that there are
		incompatible journal flag, check to see if we should
		abort, and then offer to clear the journal.
		(Addresses Debian bug #98527.)

	* Makefile.in: Move include/asm/types.h.in to
		lib/ext2fs/ext2_types.h.in.

2001-06-01  Theodore Tso  <tytso@valinux.com>

	* pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode, 
		pass1_check_directory): Add a safety check to make sure
		ctx->stashed_inode is non-zero.

	* pass1b.c (pass1b): Use e2fsck_use_inode_shortcuts() to disable
		the inode shortcut processing, instead of manually
		clearing only half of the function pointers that needed to
		be NULL'ed out.  This caused nasty bugs if the last inode
		in the filesystem needed dup block processing.
		
	* pass1b.c (clone_file_block): When cloning a directory's metadata
		block, don't try to update the directory block list
		database, since indirect blocks aren't stored in the
		database and the resulting error will abort the file clone
		operation.

2001-05-25  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.20

2001-05-25  Theodore Tso  <tytso@valinux.com>

	* journal.c (e2fsck_journal_reset_super): Remove extraneous line

2001-05-23  Theodore Tso  <tytso@valinux.com>

	* journal.c (e2fsck_journal_reset_super): Fix bug; the reset
		journal wasn't getting written out to disk since the dirty
		bit wasn't being set on the buffer.
		(e2fsck_journal_load): Don't print an error message if the
		journal version number is wrong; just return a error code
		reflecting this fact.  If the block type in the journal
		superblcok is obviously not a version number, report the
		journal is corrupted.
		(e2fsck_check_ext3_journal): On an unsupported journal
		version, prompt to abort by default, but then offer a
		chance to clear the journal as corrupt.

	* problem.c, problem.h (PR_0_JOURNAL_UNSUPP_VERSION): Added new
		problem code.

2001-05-14  Theodore Tso  <tytso@valinux.com>

	* pass1.c: Treat inodes with a low dtime (that were from a
		corrupted orphan list) specially.

	* problem.c, problem.h: Add new problem codes PR_1_LOW_DTIME and
		PR_1_ORPHAN_LIST_REFUGEES, and a new latch group,
		PR_LATCH_LOW_DTIME.

	* problemP.h: Expand the size of the problem flag to be an int
		instead of a short.  Expand space in the flag word which
		is reserved for problem latch flags from 3 bits to 8 bits.

	* e2fsck.h, scantest.c: Change location of ext2_fs.h to be
		ext2fs/ext2_fs.h

	* super.c (check_super_block): Be more strict on checking
		s_r_blocks_count superblock field.

2001-05-13  Theodore Tso  <tytso@valinux.com>

	* problem.c, problem.h (PR_0_JOURNAL_UNSUPP_ROCOMPAT, 
		PR_0_JOURNAL_UNSUPP_INCOMPAT, PR_0_JOURNAL_RESET_COMPAT):
		New problem codes.	

	* journal.c (e2fsck_journal_load): Use a problem code to
		report unsupported feature flags.  There is code to
		clear unsupported flags, but since this is dangerous,
		it's not allowed in the problem code table.
	
2001-05-11  Andreas Dilger  <adilger@turbolinux.com>

	* journal.c (e2fsck_journal_reset_super): initialize the journal
		sequence number to a random value to avoid recovering
		bad transactions from a corrupt journal.

2001-05-13  Theodore Tso  <tytso@valinux.com>

	* journal.c: Code cleanup; initialize journal_enable_debug using
		an initializer.

2001-05-12  Theodore Tso  <tytso@valinux.com>

	* unix.c (PRS): Skip validation of -C's file descriptor if it is
		zero, since that is special case.

2001-05-09  Theodore Tso  <tytso@valinux.com>

	* super.c (release_orphan_inodes): Add gettext quoting around
		"Truncating" and "Clearing" for i18n.

2001-05-05  Theodore Tso  <tytso@valinux.com>

	* util.c (fatal_error): Use the correct magic number when checking
		the magic number for the io_channel data structure.  Also
		remove extraneous call to io_channel_flush() that was left
		over from an editing session.

	* pass2.c (check_dir_block): Ignore EXT2_ET_DIR_CORRUPTED errors
		from ext2fs_read_dir_block().

2001-05-01  Theodore Tso  <tytso@valinux.com>

	* unix.c (PRS): Validate the completion information file
		descriptor so that the completion bar won't get
		accidentally written onto the disk.

	* e2fsck.8.in: Add explanation that you can use mke2fs -n -b
		blocksize to printout alternate superblock locations.

2001-04-26  Theodore Tso  <tytso@valinux.com>

	* unix.c (check_if_skip): If the max_mount_count is zero, treat it
		as having no count set.

2001-04-16  Theodore Tso  <tytso@valinux.com>

	* super.c (check_super_block): Fix bad calculation of
		inodes_per_block, and tighten min/max checks to be a bit
		more paranoid.  Thanks to Andreas Dilger for pointing out
		this bug.

2001-03-29  Theodore Tso  <tytso@valinux.com>

	* journal.c (mark_buffer_uptodate): Add emulation of kernel
		function mark_buffer_uptodate.

	* recovery.c, revoke.c: Synchronize with 0.6b ext3 files.

2001-02-12  Theodore Tso  <tytso@valinux.com>

	* journal.c (e2fsck_run_ext3_journal): Force a flush of the
		filesystem and io_channel before replaying the journal.

2001-01-17  Theodore Ts'o  <tytso@valinux.com>

	* pass1.c (check_blocks): Fix large file checking code so that
		files > 2GB are considered large files, and restrict
		directories from being > 2GB.

2001-01-12  Theodore Ts'o  <tytso@valinux.com>

	* journal.c (e2fsck_journal_fix_unsupported_super): Remove unused
		function.  Add FIXME notes to e2fsck_get_journal(), from
		Andreas Dilger.

	* pass1.c (e2fsck_pass1): Cap the maximum legal size of a file by
		the limit caused by the fact that i_blocks is in 512 byte
		units, and that the Linux buffer cache also fundamentally
		assumes 512 byte sectors.  
		Make sure that the journal inode is a regular file, and
		when clearing an unused journal inode, make sure the
		icount db is updated.
	
	* problem.c, problem.h (PR_1_JOURNAL_BAD_MODE): Add new problem code.

	* problem.c: For PR_1_RESERVED_BAD_MODE, print a description of
		the reserved inode.  In PR_0_JOURNAL_HAS_JOURNAL, prompt
		to clear the journal, rather than deleting it (which is
		more accurate).  (From Andreas Dilger.)

	* journal.c: Make sure all functions which return an error code
		use the errcode_t return type, and not "int"
		(e2fsck_journal_release): Add new parameter, "drop",
		which is used when we just want to deallocate the journal
		without trying to write out any changes.
		(mark_buffer_clean): New function
		(e2fsck_check_ext3_journal): If we fail loading the
		journal, make sure we free all memory associated with it.
		(recover_ext3_journal): If we fail to load the journal or
		initialize the revoke data structures, make sure we free all
		memory associated with the journal.

	* message.c (special_inode_name): Add more special inode names
		(From Andreas Dilger)

	* util.c (fatal_error): Check to make sure the io_manager data
		structure is sane before trying to flush the io_channel.
		(From Andreas Dilger)

	* mtrace.h, super.c, pass2.c: Minor whitespace cleanups, from
		Andreas Dilger.

	* journal.c (e2fsck_journal_fix_bad_inode): Set pctx->ino to the
		bad journal number.

	* problem.c (PR_0_JOURNAL_BAD_INODE): Use pctx->ino instead of
		pctx->num when printing the bad journal inode number.

2001-01-11    <tytso@snap.thunk.org>

	* pass1.c (process_block): Remove dead code which was never
		getting executed.

	* iscan.c, unix.c, e2fsck.h: Don't use NOARGS, and use
		ext2fs_sync_device() instead of using BLKFLSBUF.

	* flushb.c: Don't use NOARGS anymore; everything is STDC these days.
	
	* dirinfo.c, e2fsck.h, emptydir.c, iscan.c, jfs_user.h, journal.c,
		message.c, pass1.c, pass1b.c, pass2.c, pass3.c, pass4.c,
		pass5.c, problem.h, scantest.c, super.c, swapfs.c: Change
		ino_t to ext2_ino_t.

2001-01-09    <tytso@snap.thunk.org>

	* problem.c: Fix another broken @F vs @f problem.

2001-01-06    <tytso@snap.thunk.org>

	* journal.c, pass1.c, pass1b.c, pass3.c, recovery.c, revoke.c,
		super.c, unix.c, util.c: Fix random gcc -Wall complaints.

	* jfs_user.h: Use more sophisticated inline handling to allow
		building with --enable-gcc-wall

2001-01-03    <tytso@snap.thunk.org>

	* pass1.c (e2fsck_pass1): Moved journal inode handling out to its
		own block; if the journal inode is not in use, and it
		contains data, offer to clear it.

	* problem.h, problem.c (PR1_JOURNAL_INODE_NOT_CLEAR): Add new
		problem code.

	* problem.c: Modified problem table to use a new abbreviations.

	* message.c: Add @j abbreviation for journal, and @v abbreviation
		for device.

	* jfs_user.h: Moved contents of jfs_e2fsck.h into jfs_user.h.

	* journal.c (e2fsck_check_ext3_journal): Force a fsck if we remove
		the journal stored on a reserved inode.  Also force a fsck
		if the journal appears to exist while !NEEDS_RECOVERY, and
		we forcibly reset the journal.

2001-01-01    <tytso@snap.thunk.org>

	* journal.c, pass1.c, super.c, unix.c: Replace use of struct
		ext2fs_sb with struct ext2_super_block.

	* pass1.c (check_blocks): Remove use of EXT2_HAS_*_FEATURE macros.

2000-12-31    <tytso@snap.thunk.org>

	* jfs_compat.h: Remove uneeded header file.

2000-12-30    <tytso@snap.thunk.org>

	* malloc.h, mtrace.c: Renamed malloc.h to mtrace.h to avoid
		conflicts with the system header file.

	* problem.h: Fixed numbering of pass1 error messages; an extra 0
		had slipped into some of the numbers.  (Pointed out by
		Andreas Dilger)

	* journal.c (e2fsck_journal_fix_corrupt_super): Clean up
		unnecessary automatic variable.  Add explanatory comment
		about the kernel emulation routines.  (Suggested by
		Andreas Dilger)

2000-12-13  Theodore Ts'o  <tytso@valinux.com>

	* journal.c (e2fsck_check_ext3_journal): Check to make sure the
		journal fields are consistent if any of the superblock
		fields are set.  (Backs out erroneous change made by sct,
		pointed out by Andreas.)

	* unix.c (main): Clarify coments (no code changes)

	* super.c (release_orphan_inodes): Fix spelling typo in error message.

	* pass1.c (e2fsck_pass1): Offer to update the filesystem revision
		level if we need to set large files flag.  Patch from
		Andreas Dilger.

	* super.c (check_super_block): If we have any of the compatibility
		 flags set, we need to have a revision 1 filesystem.  Most
		 kernels will not check the flags on a rev 0 filesystem
		 and we may have corruption issues because of the
		 incompatible changes to the filesystem.  Patch from Andreas
		 Dilger.

	* problem.c, problem.h (PR_0_FS_REV_LEVEL, PR_1_FS_REV_LEVEL): Add
		new problem codes.

2000-12-09    <tytso@snap.thunk.org>

	* flushb.c: Fix flushb so that it does something other than waste
		disk space when built on systems with modern header files
		and add a non-subtle Copyright Licensing restriction so
		Yann will remove it from the Debian Distribution.  (Now
		violates the Debian Free Software Guidelines, on purpose.)

	* journal.c (e2fsck_check_ext3_journal): If JFS_DEBUG is defined
		at the top level, set the JFS debuging level to 2.

	* jfs_e2fsck.h, jfs_user.h: Replaces jfs_compat.h.  The jfs.h file
		has been moved to the include/linux directory.

	* journal.c, revoke.c, recovery.c: Updated files from Stephen to
		support the V2 superblock and revoke processing.  The
		journal.c and revoke.c files are copies from the ext3
		kernel source.

	* Makefile.in: Added revoke.c to the list of source/object files.

2000-11-16  Theodore Ts'o  <tytso@valinux.com>

	* pass1b.c: Change routines to use PR_1B_BLOCK_ITERATE when
		reporting problems rather than using com_err directly.

	* problem.c, problem.h (PR_1B_BLOCK_ITERATE): Add new problem code.

	* message.c (expand_percent_expression): Add safety check.  If
		ctx->str is NULL, print "NULL" instead of dereferencing
		the null pointer.

	* pass1b.c, pass2.c, pass3.c: Change calls to ext2fs_block_iterate
		to ext2fs_block_iterate2, to support 64-bit filesizes and
		to speed things up slightly by avoiding the use of the
		ext2fs_block_iterate's compatibility shim layer.

2000-10-30    <tytso@snap.thunk.org>

	* util.c (get_backup_sb): Calculate backup superblock correctly
		when the blocksize is > 1k.

2000-10-26    <tytso@snap.thunk.org>

	* jfs.h, jfs_compat.h, journal.c: Updated to include the
		definition of the new journal superblock format; still
		only supports V1 superblocks for now.  (From sct)

2000-10-24    <tytso@snap.thunk.org>

	* super.c (release_inode_block, release_inode_blocks,
		release_orphan_inodes): Add code to deal with truncating
		inodes which are still in use (but which are on the orphan
		list because they need truncation).

	* problem.c, problem.h: Rename PR_0_CLEAR_ORPHAN_INODE to
		PR_0_ORPHAN_CLEAR_INODE, and remove
		PR_0_ORPHAN_INODE_INUSE.
	
	* journal.c (e2fsck_run_ext3_journal): Add i18n support, and print
		a message when the journal is being recovered.

	* pass1.c (e2fsck_pass1): Don't check the i_mode field for the
		journal inode, if it is in use.

2000-09-12    <tytso@valinux.com>

	* extend.c: 
	* flushb.c: Add include of nls-enable.h which is necessary so that
		they can compile correctly.

2000-08-22    <tytso@valinux.com>

	* unix.c (main): If we're doing a read-only check, skip the
		journal playback, but don't abort the e2fsck run.

	* super.c (release_orphan_inodes): Fix typo; should do bounds
		checking on next_ino instead of ino.

	* jfs_compat.h (J_ASSERT): 
	* journal.c (e2fsck_run_ext3_journal): 
	* pass3.c (adjust_inode_count): Use fatal_error() instead of exit().

	* unix.c: Use fatal_error() instead of exit() whenever possible.
		Also fix the fsck exit codes so that we use FSCK_USAGE
		when it is appropriate.  Rename global_signal_ctx to
		e2fsck_global_ctx and let it be exported globally.

	* util.c (fatal_error): Try to flush the I/O manager before
		forcing an exit.

2000-08-20    <tytso@valinux.com>

	* journal.c (e2fsck_journal_load): Fix **nasty** bug which caused
		e2fsck_check_ext3_journal to smash the journal because
		journal->j_transaction_sequence wasn't getting
		initialized.

	* journal.c: (recover_ext3_journal, e2fsck_run_ext3_journal): Move
		call to e2fsck_clear_recover from recover_ext3_journal to
		after the filesystem has been closed and reopened.
		Otherwise, the superblock in the filesystem handle will
		probably be stale, and will overwrite the newer version of
		the superblock written by the log recovery.

	* message.c (expand_inode_expression): Add support for %Iu and %Ig

	* problem.h (PR_0_CLEAR_ORPHAN_INODE): Add new problem code.

	* super.c (release_orphan_inodes, release_inode_block,
		release_inode_blocks): Update the block group descriptor
		counts when freeing the orphan inode.  Use
		PR_0_CLEAR_ORPHAN_INODE to report when we clear an orphan.

	* journal.c (e2fsck_run_ext3_journal): Fix a bug where we
		attempted to reopen the filesystem using the device name
		instead of the filesystem name.

2000-08-18    <tytso@valinux.com>

	* Makefile.in: Update the make dependencies
	
	* problem.c, problem.h: Add the problem codes: 
		PR_0_ORPHAN_ILLEGAL_BLOCK_NUM, 
		PR_0_ORPHAN_ALREADY_CLEARED_BLOCK, 
		PR_0_ORPHAN_ILLEGAL_HEAD_INODE, 
		PR_0_ORPHAN_ILLEGAL_INODE, PR_0_ORPHAN_INODE_INUSE

	* super.c (release_inode_blocks, release_orphan_inodes,
		check_super_block): Add support for clearing orphaned
		inodes from the unmounted filesystem.

	* journal.c (e2fsck_recover_ext3_journal): Remove the last orphan
		check; this is now handled in check_super_block ---
		non-journaled filesystems can use the orphan list in the
		future.  Also, move the the re-opening of the filesystem
		to e2fsck_run_ext3_journal().

2000-07-12  Andreas Dilger <adilger@turbolinux.com>

	* journal.c: implement loading of ext3 journal for recovery code

	* problem.c (fix_problem): return answer from PR_AFTER_CODE to caller.
		Add journal problems.

	* recovery.c (journal_recover): user-space ext3 journal recovery code

	* unix.c (main) : check journal and do recovery in separate steps

2000-08-07    <tytso@snap.thunk.org>

	* unix.c (calc_percent): Make sure that we don't take a floating
		exception if the max value is zero.  (should normally
		never happen, but...)

2000-07-13    <tytso@valinux.com>

	* Release of E2fsprogs 1.19

2000-07-06  Theodore Ts'o  <tytso@valinux.com>

	* unix.c (check_if_skip): Modify algorithm for checking
		s_max_mnt_count to match with the kernel.  (If
		s_max_mnt_count is negative, ignore the mnt_count check.)

	* unix.c (e2fsck_update_progress): Adjust the width of the
		progress bar dynamically, based on the filesystem name
		that we need to display.

	* unix.c (main): If the ext3 needs_recovery flag is set, call
		e2fsck_run_ext3_journal() and then restart the e2fsck run.

	* journal.c (e2fsck_run_ext3_journal): New file which contains
		logic to recover the ext3 journal.  This version relies on
		the kernel being able to mount the filesystem in order to
		run the journal.

2000-07-05  Theodore Ts'o  <tytso@valinux.com>

	* unix.c (e2fsck_update_progress): Only save and check the last
		percentage after multiplying it by 10, nor 1000, since we
		only need to save values to a tenth of a percent (and the
		percentage is already from 0 .. 100%, not 0 .. 1).
		Also, re-arrange the logic so that we do the time
		check only after doing the percentage check, and we
		only advance the spinner if we're about to display it.

2000-07-04  Theodore Ts'o  <tytso@valinux.com>

	* pass1.c (e2fsck_pass1): Check to see if the ext3 s_last_orphan
		field is set; if so, clear it, so that ext3 mounting code
		won't get confused by the fact that we've cleared out the
		orphaned inodes.

2000-06-10  Theodore Ts'o  <tytso@valinux.com>

	* pass5.c (check_block_bitmaps, check_inode_bitmaps): Add error
		checking for a "should never happen case".

	* problem.c, problem.h (PR_5_COPY_IBITMAP_ERROR,
		PR_5_COPY_BBITMAP_ERROR): Add new error codes.

2000-05-27  Theodore Ts'o  <tytso@valinux.com>

	* pass1.c (pass1, check_size): Apply patch from Chris Wedgewood
		(cw@foof.org) which checks to see if special devices have
		a non-zero size, and deals with it.

	* problem.c, problem.h (PR1_SET_NONZSIZE): Add new problem code.

2000-05-18  Theodore Ts'o  <tytso@valinux.com>

	* Makefile.in (install): Create a symbolic link for fsck.ext3 as
		well.

2000-05-08  Theodore Ts'o  <tytso@valinux.com>

	* problem.c, problem.h (PR_0_HURD_CLEAR_FILETYPE): Add new problem
		code. 

	* super.c (check_super_block): If the OS type in the superblock is
		the Hurd, check to see if the filetype feature is set, and
		offer to clear it if so.   This needs to be done since the
		Hurd doesn't properly support the filetype feature.
		(And since the hurd allows the transmogrification of files
		to special files and vice versa --- for no good reason
		that I can understand --- it can't support the filetype
		feature for the forseeable future, either.)

2000-04-03  Theodore Ts'o  <tytso@valinux.com>

	* unix.c: For platforms that don't define optarg.h, manually
		define optarg and optind.

2000-03-20  Theodore Ts'o  <tytso@valinux.com>

	* pass1.c (check_immutable, e2fsck_pass1_check_device_inode):
		Check for the append-only as well as the immutable flag.

	* problem.c (PR_1_SET_IMMUTABLE): Adjust message to include
		append-only flag.   Fix comment for compression flag.
	
2000-02-12    <tytso@snap.thunk.org>

	* unix.c (e2fsck_update_progress): Limit the number of updates to
		the progress bars to 8 times a second.  This allows a 9600
		baud console link to keep up.

2000-02-11    <tytso@snap.thunk.org>

	* unix.c (main): If compression is enabled on the filesystem,
		print a warning message (for now).

	* message.c: Add new compression shortcut: @c == compress

	* problem.c, problem.h (PR_1_COMPR_SET): Add new error code.

	* pass1.c (check_blocks): If the inode has EXT2_COMPRBLK_FL flag
		set, check to see if the filesystem supports compression.
		If it does pass this information down to process_block()
		so it can treat the compressed block flag words
		correctly.  If not, offer to clear the flag, since it
		shouldn't be set.  
		(process_block): If an inode has the compressed inode flag
		set, allow EXT2FS_COMPRESSED_BLKADDR.

	* pass1b.c (process_pass1b_block, delete_file_block,
		clone_file_block):
	* pass2.c (deallocate_inode_block): Use HOLE_BLKADDR to check to
		see if the block can be skipped.

2000-02-08    <tytso@snap.thunk.org>

	* util.c: Make resource tracking message more concise.

	* e2fsck.h:
	* pass1.c (mark_table_blocks, e2fsck_pass1): Remove
		ctx->block_illegal_map, since it's not needed by pass1,
		and pass1b has been modified to calculate it manually if
		needed.   This reduces the memory footprint needed by e2fsck.

	* pass1b.c (check_if_fs_block): New static function which returns
		whether or not a block overlaps with filesystem metadata.
		This replaces consulting the block_illegal_map bitmap.

	* Makefile.in: Call sync after finishing building all in this
		directory. 
	
	* unix.c (PRS): sync the filesystem before trying to use
		BLKFLSBUF, to minimize the chance of causing dirty blocks
		to get dropped.

	* e2fsck.h: Manually define BLKFLSBUF if not defined, and we're on
		a Linux/i386 system.
	
	* pass3.c (check_directory): Only do the loop detection algorithm
		if we've searched over 2048 parent directories and haven't
		found the end yet.  This means that in the common case, we
		don't allocate or clear the inode_loop_detection bitmap,
		which for large systems, merely clearing the bitmap for
		each directory was turning out to be quite expensive.
		Thanks to Jani Jaakkola (jjaakkol@cs.helsinki.fi) for
		identifying this problem.

2000-02-06  Theodore Ts'o  <tytso@valinux.com>

	* badblocks.c, e2fsck.h, ehandler.c, emptydir.c, extend.c,
		flushb.c, iscan.c, message.c, pass1.c, pass1b.c, pass3.c
		pass4.c, pass5.c, problem.c, scantest.c, swapfs.c, 
		unix.c, util.c: Add Internationalization support as 
		suggested by Marco d'Itri <md@linux.it>.

2000-02-02  Theodore Ts'o  <tytso@valinux.com>

	* e2fsck.h, flushb.c, scantest.c: Remove uneeded include of
		linux/fs.h 

2000-01-18  Theodore Ts'o  <tytso@valinux.com>

	* Makefile.in: Since LIBUUID can sometimes include "-lsocket"
		we need a separate DEPLIBUUID that can be used in
		Makefile's dependency rules.

1999-11-23    <tytso@valinux.com>

	* e2fsck.8.in: Update language about where to find a backup
		superblock.

1999-11-19    <tytso@valinux.com>

	* pass1.c (process_inodes): Add shortcut handling; if
		process_inodes_count is zero, return right away, to avoid
		calling qsort with a non-positive count.

	* message.c (safe_print): Fix to properly display ^A, ^B, etc. and
		to print Delete as ^?

	* Makefile.in (distclean): Remove TAGS and Makefile.in.old from
		the source directory.

1999-11-10    <tytso@valinux.com>

	* Release of E2fsprogs 1.18

1999-11-10    <tytso@valinux.com>

	* problem.c (fix_problem): Support a new flag, PR_PREEN_NO which
		means the answer is assumed to be no in preen mode.  This
		is now used in the PR_1_SET_IMMUTABLE code, so that in
		preen mode we ignore these inodes and just print a warning
		message. 

1999-11-09    <tytso@valinux.com>

	* pass1.c (e2fsck_pass1): If the filesystem does not support
		imagic inodes, if an inode has the imagic flag set, offer
		to clear the imagic flag.  If a valid device/fifo/socket
		has the immutable flag set, call the new helper function
		check_immutable() to offerto clear the immutable flag.

	* pass2.c (check_filetype): Use the new ext2_file_type() helper
		function instead of calculating the file_type information
		manually.

	* pass3.c (e2fsck_reconnect_file): When adding a link to
		lost+found, calculate the filetype information so that
		ext2fs_link() can use the information if applicable.
		(get_lost_and_found): Create the /lost+found directory
		with the correct filetype information if applicable.

	* util.c (ext2_file_type), e2fsck.h: New function which returns
		the directory entry file type information given the
		inode's mode bits.

	* problem.c, problem.h: Added new problem codes PR_1_SET_IMAGIC
		and PR_1_SET_IMMUTABLE.

1999-11-07    <tytso@valinux.com>

	* pass4.c (e2fsck_pass4): Clear inode_imagic_map after freeing it,
		to prevent it from getting freed twice.

1999-11-06    <tytso@valinux.com>

	* unix.c (main): Close the filesystem before freeing the context,
		so that in the event of a free()-related segmentation
		violation, the filesystem is properly closed and written
		out.

1999-10-27    <tytso@valinux.com>

	* e2fsck.c (e2fsck_reset_context): When freeing
		ctx->inode_reg_map, we weren't zero'ing
		ctx->inode_reg_map, which could cause a segfault later on
		in the e2fsck run.

1999-10-26    <tytso@valinux.com>

	* problem.h (PR_2_SPLIT_DOT): Fix excess zero in problem code (now
		matches the standard convention).

1999-10-26    <tytso@valinux.com>

	* Release of E2fsprogs 1.17

1999-10-26    <tytso@valinux.com>

	* message.c (safe_print): Make safe_print take an char instead of
		an unsigned char to fix gcc warnings.

1999-10-25    <tytso@valinux.com>

	* util.c: For NT portability, don't redefine getchar(), since
		stdio defines that.  Instead we introduce a new
		abstract macro read_a_char() which is #defined to the
		right function as necessary.

	* problem.c, problem.h (PR_2_NULL_NAME): Add new problem code.

	* pass2.c (check_dir_block): Require that the length of the
		directory entry be at least 12 bytes.  Check to see if the
		filename is zero-length, and flag that as an error.

1999-10-22    <tytso@valinux.com>

	* Release of E2fsprogs 1.16

1999-10-22    <tytso@valinux.com>

	* pass2.c (check_filetype): If the filetype filesystem feature is
		not set, and a directory entry has a dirent feature, offer
		to clear it (since 2.0 kernels will do complain will
		interpret it as a very large name length field).

	* problem.c (PR_2_CLEAR_FILETYPE): Add new problem code.

1999-10-21    <tytso@valinux.com>

	* e2fsck.8.in: Update man page to use a more standard format (bold
		option flags and italicized variables), as suggested by
		Andreas Dilger (adilger@enel.ucalgary.ca)

	* pass4.c (e2fsck_pass4): If an inode is set in the
		inode_imagic_map bitmap, don't check to see if it is
		disconnected from the inode tree (because it almost
		certainly will be).  Free inode_imagic_map at the end of
		pass 4.

	* pass2.c (check_dir_block, check_filetype): If the FILETYPE
		feature is set, check the directory entry's filetype
		information field, and fix/set it if necessary.
		(e2fsck_pass2): Free the inode_reg_map bitmap at the end
		of pass 2.

	* pass1.c (e2fsck_pass1, alloc_imagic_map): Allocate and fill in
		information for inode_reg_map and inode_imagic_map, which
		indicates which inodes are regular files and AFS inodes,
		respectively.
		Since only the master superblock is written during a
		restart, force that superblock to be used after a restart;
		otherwise changes to the block group descriptors end up
		getting ignored.

	* problem.c, problemP.h: If e2fsck is run -n, make def_yn variable
		be 0 for "no".  Add support for a new flag, PR_NO_NOMSG,
		which supresses the problem message if e2fsck is run with
		the -n option.

	* problem.c, problem.h (PR_2_SET_FILETYPE, PR_2_BAD_FILETYPE): Add
		new problem codes.

	* message.c (expand_dirent_expression): Add support for %dt which
		prints the dirent type information.

	* e2fsck.c (e2fsck_reset_context): Free new bitmaps (inode_reg_map
		and inode_imagic_map).

	* e2fsck.h (e2fsck_t): Add new inode_reg_map and inode_magic_map
		to the context structure.
	
1999-09-24    <tytso@valinux.com>

	* unix.c (PRS), util.c (ask_yn): Add #ifdef's to make
		e2fsprogs easier to port to non-Unix platforms.

1999-09-07    <tytso@valinux.com>

	* pass3.c (adjust_inode_count): Fix bug where we didn't keep the
		internal and external inode counts in sync when we
		decremented an inode whose link count was already zero.
		Now we skip incrementing or decrementing both link counts
		if we would cause an overflow condition.
		(expand_dir, expand_dir_proc): Change where we update the
		inode block count and size files so that the block count
		field is updated correctly when we create an indirect block.

1999-08-05    <tytso@valinux.com>

	* super.c (check_super_block): Check to see whether the
		inodes_per_group value in the superblock is insanely too
		high.

1999-08-02    <tytso@valinux.com>

	* pass1b.c (clone_file_block): Don't clear the dup_map flag if
		the block also shares data with the fs metadata when
		the count drops to 1, since the block should still be
		cloned, as fs metadata isn't included in the count.

1999-07-18  Theodore Ts'o  <tytso@valinux.com>

	* Release of E2fsprogs 1.15

1999-07-19    <tytso@valinux.com>

	* unix.c (usage): Add minimalist emergency help to the usage
		message. 

1999-07-18    <tytso@valinux.com>

	* unix.c: Add support for calculating a progress bar if the -C0
		option is given.   The function e2fsck_clear_progbar()
		clears the progress bar and must be called before any
		message is issued.  SIGUSR1 will enable the progress bar,
		and SIGUSR2 will disable the progress bar.  This is used
		by fsck to handle parallel filesystem checks.  Also, set
		the device_name from the filesystem label if it is
		available. 

	* e2fsck.h: Add new flags E2F_FLAG_PROG_BAR and
		E2F_FLAG_PROG_SUPRESS.  Add new field in the e2fsck
		structure which contains the last tenth of a percent
		printed for the user.

	* message.c (print_e2fsck_message): Add call to
		e2fsck_clear_progbar(). 

	* pass1.c (e2fsck_pass1):
	* pass2.c (e2fsck_pass2):
	* pass3.c (e2fsck_pass3):
	* pass4.c (e2fsck_pass4):
	* pass5.c (e2fsck_pass5): Add call to e2fsck_clear_progbar when
		printing the resource tracking information.

	* pass5.c (check_block_bitmaps, check_inode_bitmaps): If there is
		an error in the bitmaps, suppress printing the progress
		bar using the suppression flag for the remainder of the
		check, in order to clean up the display.

1999-06-30    <tytso@valinux.com>

	* unix.c (check_mount): Clean up the abort message displayed when
		the filesystem is mounted and either stdout or stdin isn't
		a tty.

1999-06-25    <tytso@valinux.com>

	* e2fsck.h:
	* pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode, 
		pass1_check_directory, e2fsck_use_inode_shortcuts): Make
		pass1_* be private static functions, and create new
		function e2fsck_use_inode_shortcuts which sets and clears
		the inode shortcut functions in the fs structure.

	* e2fsck.h:	
	* pass2.c (e2fsck_process_bad_inode): Make process_bad_inode() an
		exported function.

	* pass4.c (e2fsck_pass4): Call e2fsck_process_bad_inode to check
		if a disconnected inode has any problems before
		connecting it to /lost+found.  Bug and suggested fix by 
		Pavel Machek <pavel@bug.ucw.cz>

1999-06-21    <tytso@valinux.com>

	* unix.c (main): Add missing space in the disk write-protected
		message. 

1999-05-22    <tytso@rsts-11.mit.edu>

	* problem.c, problem.h (PR_0_INODE_COUNT_WRONG): Add new problem
		code. 
	
	* super.c (check_super_block): Add check to make sure the total
		number of inodes is sane, since this can be calculated
		from the number of groups times the number of inodes per
		group.   Offer to correct it if it is incorrect.

1999-03-19    <tytso@rsts-11.mit.edu>

	* pass5.c (check_block_end): Fix fencepost condition where when
		clearing the block padding we were missing the last position
		in the bitmap.

1999-05-17    <tytso@rsts-11.mit.edu>

	* unix.c (reserve_stdio_fds): Add safety check in case
		reserve_stdio_fds couldn't open /dev/null.

1999-03-14  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* util.c (print_resource_track): Use mallinfo if present to get
		more accurate malloc statistics.

	* pass3.c (get_lost_and_found): Check to see if lost+found is a
		plain file; if so, offer to unlink it.

	* problem.c, problem.h (PR_3_LPF_NOTDIR): Add new problem code.

1999-03-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c: Fix problem message for PR_1_BAD_GROUP_DESCRIPTORS so
		that the block group number is printed.  Add new prompt,
		PROMPT_UNLINK.

1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.14

1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* message.c (safe_print): New function which prints strings,
		converting non-printable characters using the '^' and
		M-notation.  This function is now used to print directory
		name entries and pathnames.

Mon Jan  4 02:28:59 1999  Theodore Y. Ts'o  <tytso@mit.edu>

	* unix.c (main): Reset the context before calling ext2fs_close(),
		to avoid referencing already freed memory.

1998-12-15  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.13

1998-12-03  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in: Updated dependencies.

1998-11-27  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass3.c (get_lost_and_found): If the filesystem is not opened
		read-only, then force /lost+found to be created if it is
		not present.

	* problem.c: Allow PR_3_NO_LF_DIR to be handled during a preen
		operation. 

1998-10-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (main): Move ext2fs_close() after e2fsck_free_context()
		since e2fsck_free_context may reference data in ctx->fs.

	* e2fsck.c (e2fsck_reset_context): Make sure ctx->fs is non-NULL
		before checking ctx->fs->dblist.

1998-10-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (e2fsck_pass1): Use the device check subroutine on
		FIFO's and Socket's, so that we catch bogus immutable inodes.

	* pass2.c (process_bad_inode): Process bad socket and fifo's.

	* problem.h, problem.c: Define new problem codes PR_2_BAD_FIFO and
		PR_2_BAD_SOCKET.

1998-09-02  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c: Add PR_3_NO_DIRINFO error code.

	* super.c (check_super_value): Rename min and max to min_val and
		max_val to avoid possible cpp macro conflicts.

	* pass4.c (e2fsck_pass4): Rename max to maxgroup, to avoid
		possible cpp macro conflicts.
	
	* pass3.c (e2fsck_pass3): Rename max to maxdirs, to avoid possible
		cpp macro conflicts.
		(check_directory): Fix logic to avoid possible core dump
		in the case of ext2fs_get_dir_info returning NULL.  (By
		the time we get here, it should never happen, but...).
		Also simply/streamline the control flow of the function.

1998-08-17  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (check_if_skip): Move the "not cleanly mounted" check
		ahead of the maximal mount and too long since checked tests.
		(reserve_stdio_fds): Make sure 0,1,2 file descriptors are
		open, so that we don't open the filesystem using the same
		file descriptor as stdout or stderr.

1998-08-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass2.c (e2fsck_pass2): Fix the progress accounting so that we
		get to 100%.

	* pass3.c (e2fsck_pass3): Change progress accounting to be
		consistent with the other e2fsck passes.		

	* e2fsck.c (e2fsck_run): At the end of each pass, call the
		progress function with the pass number set to zero. 

	* unix.c (e2fsck_update_progress): If the pass number is zero,
		ignore the call, since that indicates that we just want to
		deallocate any progress structures.

1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.12

1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (main): Fix typo in checking the incompat feature set; it
		should be checked against EXT2_LIB_FEATURE_INCOMPAT_SUPP.

1998-07-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* badblocks.c (test_disk): Don't clear the existing bad blocks
		list when using e2fsck -c, since it may cause blocks with
		marginal errors to be dropped from the bad blocks list.

Mon Jul  6 10:32:11 1998  Theodre Ts'o  <tytso@lurch.mit.edu>

	* pass1.c (e2fsck_pass1): Use ext2fs_sb structure for
		compatibility with older kernels.

1998-06-25  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (e2fsck_update_progress): Remove unused variables.

1998-06-10  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c, problem.h: Change blkcnt_t to be e2_blkcnt_t to avoid
		collision with LFS API.

	* pass1.c (e2fsck_pass1): Fix bug so that ext2_max_sizes is
		properly initialized.  
		(e2fsck_pass1): Don't allow the the boot loader inode to
		be a directory (clear the inode mode field if so).

1998-05-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (PRS): Added new option -C, which causes e2fsck to print
		progress updates so that callers can keep track of the
		completion progress of e2fsck.  Designed for use by
		progress, except for -C 0, which prints a spinning report
		which may be useful for some users.

	* pass5.c (e2fsck_pass5): Use a finer-grained progress reporting
		scheme (useful for larger filesystems).

	* e2fsck.h: Add progress_fd and progress_pos, for use by the Unix
		progress reporting functions.

1998-04-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_inode_cmp): Use EXT2_QSORT_TYPE to define the
		appropriate return type for comparison functions for qsort.

	* e2fsck.h: Add #ifdef protection for unistd.h

	* super.c: Remove header files already included by e2fsck.h

1998-04-26  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dirinfo.c (e2fsck_add_dir_info): Update function to pass the old
		  size of the memory to be resized to ext2fs_resize_mem().

1998-03-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in: Change to use new installation directory variables
		convention.  Fix uninstall rules to take $(DESTDIR) into
		account.  Remove cat8dir from the installdirs target,
		since modern man package don't necessarily put the cat
		directory in /usr/man/cat?.

1998-03-29  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c, e2fsck.h: Always declare e2fsck_get_device_size() as an
		extern in e2fsck.h to prevent -Wall warnings.

	* pass4.c (e2fsck_pass4): Remove unused variable 'j'.

1998-03-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c (check_super_block): Fix broken superblock sanity check
		when calculating blocks_per_group if s_log_frag_size !=
		s_log_block_size.  Since we don't support fragments, this
		isn't a bug deal, but it's good to get it fixed.

1998-03-23  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c: Fix bug in check of feature set, to make sure we can
		really fix this filesystem.

	* problem.h: Make blkcount type to be of type blkcnt_t.  Make the
		num field be a 64 bit type.  Add the problem code
		PR_1_FEATURE_LARGE_FILES

	* problem.c: Add table entry for the problem code
		PR_1_FEATURE_LARGE_FILES.

	* pass1.c (e2fsck_pass1): A non-zero i_dir_acl field is only
		a problem for directory inodes.  (Since it is also
		i_size_high now.)   If there are no large_files, then
		clear the LARGE_FLAG feature flag.  If there are
		large_files, but the LARGE_FLAG feature flag is not set,
		complain and offer to fix it.
		(check_blocks): Add support to deal with non-directory
		inodes that have i_size_high set (i.e., large_files).
		Don't give an error if a directory has preallocated
		blocks, to support the DIR_PREALLOC feature.
		(process_block, process_bad_block): The blockcnt variable
		is a type of blkcnt_t, for conversion to the new
		block_iterate2.

	* pass2.c (process_bad_inode): A non-zero i_dir_acl field is only
		a problem for directory inodes.  (Since it is also
		i_size_high now.)

	* message.c (expand_inode_expression): Print a 64-bits of the
		inode size for non-directory inodes.  (Directory inodes
		can only use a 32-bit directory acl size, since
		i_size_high is shared with i_dir_acl.)  Add sanity check
		so that trying to print out the directory acl on a
		non-directory inode will print zero.
		(expand_percent_expression): %B and %N, which print 
		pctx->blkcount and pctx->num, can now be 64 bit
		variables.  Print them using the "%lld" format if
		EXT2_NO_64_TYPE is not defined.

	* e2fsck.h: Add the large_flagsfield to the e2fsck context.

	* e2fsck.c (e2fsck_reset_context): Clear the large_flags
		field.

Sun Mar  8 23:08:08 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass3.c (fix_dotdot_proc): 
	* pass2.c (check_dot, check_dotdot, check_name, check_dir_block): 
	* message.c (expand_dirent_expression): Mask off the high eight
		bits of the directory entry's name_len field, so that it
		can be used for other purposes.

Fri Feb 27 00:01:39 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (e2fsck_run): Since E2F_FLAG_SIGNAL_MASK doesn't
 		include EXT2_FLAG_RESTART anymore, we need to adjust this
 		routine so that it *does* return in the case of it seeing
 		EXT2_FLAG_RESTART.

	* pass1.c (e2fsck_pass1): ext2_get_next_inode() may call the group
		done callback function, which may set context abort
		flags.  So we need to test the context abort flags after
		we call ext2_get_next_inode().
		(process_inodes): If we abort due out of process_inodes,
		do a clean exit by breaking out of the for loop instead of
		just returning.

	* e2fsck.h (E2F_FLAG_SIGNAL_MASK): EXT2_FLAG_RESTART shouldn't be
		considered a SIGNAL mask (i.e., requiring an immediate
		abort of processing to restart).  FLAG_RESTART just means
		that we want to restart once pass 1 is complete.

Tue Feb 24 15:19:40 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Change the progress function to return an integer; if returns 1,
		then the progress function is expected to have set the
		e2fsck context flag signalling a user abort, and the
		caller should also initiate a user abort.

Tue Feb 17 19:03:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass5.c (check_block_bitmaps, check_inode_bitmaps): Don't call
		end_problem_latch() unless there was actually a problem
		latched.  Simplifies semantics of the latch processing.

Mon Feb 16 17:31:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.h: Add new field, priv_data to the e2fsck context
 		structure.  It should be used by callers of the e2fsck
 		functions only, and not by anything in e2fsck itself.

Mon Feb 7 17:31:04 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c: Instead of call ext2fs_get_device_size(), define and call
		e2fsck_get_device_size().  (This function may be stubbed
		out in special versions of e2fsck.)

	* pass3.c, pass4.c: Remove extra calls to the progress function
		that weren't needed.

	* mke2fs.8.in: Update man page to note that the format of the bad
		block file is the same as the one generated by badblocks. 

Sun Feb  1 07:57:14 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dirinfo.c, e2fsck.c: Don't include com_err.h; it isn't needed.

	* e2fsck.h: Include <time.h> since it is needed

	* super.c: If EXT2_SKIP_UUID is defined, then skip the UUID
		processing. 

Tue Jan 20 15:37:01 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (main): In the case where the filesystem revision is too
 		high, print the message about the superblock possibly
 		being corrupt.

	* e2fsck.8.in: Add expanded comments about how the -b option
		works. 

Sat Jan 17 13:02:16 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.h: If EXT2_FLAT_INCLUDES is defined, then assume all of
 		the ext2-specific header files are in a flat directory.

	* dirinfo.c, ehandler.c, pass1.c, pass1b.c, pass2.c, pass5.c,
 		super.c, swapfs.c, unix.c: Explicitly cast all assignments
 		from void * to be compatible with C++.

Tue Jan  6 11:30:24 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (sync_disk): Remove sync_disk and calls to that function,
		since ext2fs_close() now takes care of this.

Mon Dec 29 14:45:42 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c, pass1b.c, pass2.c, pass3.c, swapfs, badblocks.c,
 		ehandler.c, unix.c: Change use of private to be priv_data,
 		to avoid C++ reserved name clash.

Fri Nov 28 09:30:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dirinfo.c (e2fsck_add_dir_info): Use ext2fs_get_num_dirs instead
		of e2fsck_get_num_dirs, which has been removed.

Tue Nov 25 15:54:35 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (PROGS): Remove @EXTRA_PROGS@, since we don't want
		to compile and install flushb.

Mon Nov 24 06:48:00 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (e2fsck_pass1_check_device_inode): For now, only check
		to make sure the extra i_blocks in a device are cleared if
		the immutable flag is set.

	* util.c (print_resource_track): Fix typo which caused the
 		time/resource tracking to print "Pass 1 :" instead of
 		"Pass 1: ".

Thu Nov 20 16:02:23 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass3.c (expand_directory): Fix bug which could cause core dump
 		when expanding the directory, and the bitmaps hadn't yet
 		been read in.  Also, only use ext2fs_write_dir_block when
		writing a directory block, not when writing out a fresh
		indirect block.

Wed Nov 19 16:15:44 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_bad_block): Fix bug where first_block wasn't
		getting incremented, which caused user to get a
		"Programming error?" warning if there was a bad block in a
		non-primary superblock/group_descriptor.  Also fixed
		another bug so that ext2fs_bg_has_super() is consulted, to
		avoid problems when using a filesystem with the
		sparse_groups option set and there are bad blocks at the
		beginning of a group which doesn't have a superblock.

Thu Nov  6 16:10:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c, pass2.c, pass3.c, pass4.c, pass5.c: Add calls to the 
		progress indicator function.

	* pass1.c (scan_callback): Add call to the progress feedback
		function (if it exists).

Tue Nov  4 09:45:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c (check_super_block): Skip the device size check if the
		get_device_size returns EXT2_EXT_UNIMPLEMENTED.

	* iscan.c (main): Don't use fatal_error() anymore.

	* pass1b.c, swapfs.c, badblocks.c: Set E2F_FLAG_ABORT instead of
 		calling fatal_error(0).

	* problem.c, pass3.c (PR_3_ROOT_NOT_DIR_ABORT, 
		PR_3_NO_ROOT_INODE_ABORT): New problem codes.
	
	* problem.c, pass2.c (PR_2_SPLIT_DOT): New problem code.

	* problem.c, pass1.c (PR_1_SUPPRESS_MESSAGES): New problem code.
	
	* problemP.h: New file which separates out the private fix_problem
		data structures.

	* util.c, dirinfo.c, pass1.c, pass1b.c, pass2.c, pass5.c, super.c,
 		swapfs.c util.c: allocate_memory() now takes a e2fsck
 		context as its first argument, and rename it to be
 		e2fsck_allocate_memory().

Mon Nov  3 14:35:29 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (main): Add a special case check for the error code EROFS
		and display an appropriate error message for this case.

	* [lots of files]:  Change ext2fs_read_inode, ext2fs_write_inode
		to take the e2fsck context as their first argument.
		Change dir_info.c routines to take an e2fsck_context,
		renamed them to start with e2fsck_ to avoid namespace
		issues, and changed them to store the directory
		information inside the e2fsck context.
		Added e2fsck_run() which calls all of the e2fsck passes in
		the correct order, and which handles the return of abort
		codes.  Added abort processing, both via setjmp/longjmp
		and via flags in the e2fsck context.  Use a flag in the
		e2fsck context instead of the restart_e2fsck global
		variable.   Change uses of free and malloc to
		ext2fs_free_mem and ext2fs_get_mem.
	
Fri Oct 31 01:12:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c, pass3.c: Rename new error codes to _ET_ in them for
	 	consistency.

Sat Oct 25 00:10:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass3.c (get_lost_and_found): Check error return of 
		EXT2_FILE_NOT_FOUND instead of ENOTDIR

	* pass1.c (pass1_check_directory): Return EXT2_NO_DIRECTORY
		instead of ENOTDIR

Fri Oct 24 00:12:39 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (PRS): Make the variable which getopt returns into be
		an int, so that it won't lose on platforms where char is
		unsigned. 

	* pass1b.c (clone_file): Fix bug in error reporting in the case
 		where cs.errcode is non-zero.

Sun Oct 19 21:12:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass*.c, super.c, unix.c, util.c, e2fsck.h: Place #ifdef
		RESOURCE_TRACK around code which uses init_resource_track
		and print_resource_track.  (Not all systems have timeval)

	* super.c: Remove excess #includes which are not necessary.

	* e2fsck.h: Add #ifdef's for HAVE_SYS_TYPES_H and HAVE_SYS_TIME_H

Fri Oct  3 13:40:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass*.c, super.c: Massive changes to avoid using printf and
		com_err routines.   All diagnostic messages are now routed
		through the fix_problem interface.

Sat Sep  6 17:13:28 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass2.c (check_dir_block): Check for duplicate '.' and '..'
		entries. 

	* problem.c, problem.h: Add new problem codes PR_2_DUP_DOT and
	 	PR_2_DUP_DOT_DOT.

Tue Sep  2 09:04:51 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c: Added new problem codes for some of the
		superblock corruption checks, and for the pass header
		messages.  ("Pass 1: xxxxx")

	* util.c (print_resource_track): Now takes a description
		argument. 

Mon Aug 25 10:23:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c, unix.c, e2fsck.c: New files to separate out the
		operating-specific operations out from e2fsck.c.  
		e2fsck.c now contains the global e2fsck context management
		routines, and super.c contains the "pass 0" initial
		validation of the superblock and global block group
		descriptors. 

	* pass1.c, pass2.c, pass3.c, pass4.c, pass5.c, util.c: Eliminate
		(nearly) all global variables and moved them to the e2fsck
		context structure.

	* problem.c, problem.h: Added new problem codes PR_0_SB_CORRUPT,
 		PR_0_FS_SIZE_WRONG, PR_0_NO_FRAGMENTS,
 		PR_0_BLOCKS_PER_GROUP, PR_0_FIRST_DATA_BLOCK

Thu Aug 14 10:55:21 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* message.c: Add compression for the word "Illegal"

	* problem.c: Added entries for PR_2_BAD_CHAR_DEV and
	 	PR_2_BAD_BLOCK_DEV

Wed Aug 13 09:55:57 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1, check_device_inode), pass2.c
 		(process_bad_inode): Use a more stringent test for a valid
 		device.

Sun Aug 10 18:58:02 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_mount): Add stronger warning message about the
		perils of running e2fsck on a mounted filesystem.

Tue Jun 17 01:33:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.11

Thu Jun 12 00:25:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (mark_table_blocks): Mark the superblock and group
		descriptor blocks first, so that any conflicts between
		these and the bitmap or inode table blocks is noticed.

	* problem.c: Fix message printed out when a block or inode bitmap
		conflicts with other fs data, has the correct group number
		in it.

Tue Jun 10 12:07:37 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass2.c (pass2): Check the error return from ext2fs_dblist_iterate.

Thu May  8 22:45:27 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.8.in: Fix minor typos and grammer oops found by Bill
 		Hawes (whawes@star.net).

	* badblocks.c (read_bad_blocks_file): Pass the blocksize to the
		bad blocks command so that all of the filesystem gets
 		tested in the case where the blocksize 2048 or 4096.

Thu Apr 24 12:16:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>

	* Release of E2fsprogs version 1.10

Mon Apr 21 22:43:08 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1b.c (pass1b): While scanning for inodes, simply skip inodes
 		where ext2fs_get_next_inode returns the 
 		EXT2_ET_BAD_BLOCK_IN_INODE_TABLE error.

Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.09

Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.08

Thu Apr 10 13:51:16 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1b.c (clone_file_block): If we clone a directory, we need to
		update the dblist entry so that we check (and correct) the
		right directory block.

Sun Apr  6 09:13:12 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_block): Don't clear blocks references to
		filesystem metadata; let pass 1B handle this case.

	* problem.c, problem.h: Add new problem, PR_1B_SHARE_METADATA.

	* pass1b.c (pass1d): Deal with a block which is shared with
 		filesystem metadata.

	* e2fsck.h: Make block_illegal_map be a global variable

Sat Apr  5 11:51:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c, pass1.c (mark_table_blocks): Support the sparse_super
	 	feature.
		(get_backup_sb): New function which attempts to obtain the
	 	correct backup superblock (if possible).

Fri Apr  4 10:46:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): Check the version of the library, and warn if
		the library is out of date; this happens generally due to
		users who manually install e2fsprogs.

	* pass1.c (pass1_get_blocks): If the passed in inode number for
 		get_blocks isn't what we're expecting pass back
 		EXT2_ET_CALLBACK_NOT_HANDLED.

Wed Mar 12 13:32:05 1997  Theodore Y. Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs version 1.07

Tue Mar 11 10:31:47 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* icount.c: New file which implements an inode count abstraction.
		This significantly reduces amount of memory needed to
		check really large filesystems.

	* pass1.c, pass2.c, pass3.c, pass4.c: Modified to use the icount
	 	abstraction.

Fri Mar  7 08:28:55 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dirinfo.c (dir_info_iter): New function which allows iteration
		over the directories in the dir_info map.

	* pass3.c (pass3, check_directory): Speed up pass 3 by iterating
		over all directories in the dir_info structure, instead of
		iterating all inodes looking for directories, and then
		looking up the directories using get_dir_info().

Sat Feb  1 11:33:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1, process_block): 
	* pass2.c (pass2): Use the ext2_dblist abstraction instead of
		manual code to manage the directory block list information.

	* pass1.c (check_blocks), pass1b.c (pass1b), pass2.c
	 	(deallocate_inode): Call the ext2 library routine
 	 	ext2_inode_has_valid_blocks() instead of
 	 	inode_has_valid_blocks().

	* swapfs.c (swap_inodes): Add check so that we don't try to call
		swap_inode_blocks unless the inode has valid blocks.
		(Otherwise a long fast symlink might cause
		swap_inode_blocks to erroneously get called.)

Wed Jan 22 14:42:53 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c, problem.h: Added entries for PR_2_DOT_NULL_TERM and
 	 	PR_2_DOT_DOT_NULL_TERM.

	* pass2.c (check_dot, check_dot_dot): Make sure the new . and
 		.. entries are null-terminated, since the 2.0 kernel
 		requires this (for no good reason).

Mon Jan 20 20:05:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1): Set the EXT2_SF_SKIP_MISSING_ITABLE flag so
		that we can recover from missing inode tables.

	* dirinfo.c (get_dir_info): If there are no directories in the
 		dir_info abstraction, don't core dump (because dir_info is
 		NULL).

	* e2fsck.c (main): Don't try using the backup superblocks if there
		aren't any.
		(check_super_block): If there are illegal inode table or
		bitmaps, set the filesystem as being in error.

Wed Jan 15 11:32:01 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass2.c (check_dir_block): Added check to make sure that rec_len
 		is a a multiple of 4 (so that the directory entries are
 		4-byte aligned).

Sat Dec 28 12:16:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (uninstall): Uninstall all programs in the PROGS
		line.
		(PROGS): Don't build and install the extend program by
		default. 
	

Sat Dec  7 16:41:02 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_inodes): Make sure the stashed_ino variable is
 		saved and restored as well.
		(pass1): For fast sym links, skip the check_blocks
		processing step altogether.

Mon Dec  2 09:28:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c, message.c: New files, to completely refurbish how
		filesystem problems are reported to the user.  The
		diagnostic messages are now encoded out in an easily
		customizable, extensible format.  The messages printed out
		in preen mode are all on one line, and contain the device
		name.

Fri Nov 29 20:26:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* swapfs.c (swap_inodes): When swapping a filesystem, ignore
		deleted files.

	* pass1.c (pass1): Ignore missing inode table errors during the
		scan, and just skip past those inodes.

	* pass3.c (check_root): Remove root_ino argument, and assume that
		the root inode must be EXT2_ROOT_INO.  Move responsibility
		of setting the parent of the root inode in the directory
		inode structure to pass2().

	* pass2.c (check_dir_block): Don't allow links to the root
		directory.  

	* dirinfo.c (add_dir_info): Remove last argument to add_dir_info,
		since the inode is no longer used.

Tue Oct 15 00:06:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): If the superblock magic number is wrong, or the
		block group fails a sanity check, then automatically
		restart trying to use the backup superblocks.

	* pass1.c (mark_table_blocks): Make the inode tables ahead of
		everything else; in the case where a bitmap block overlays
		the inode table, the inode table should take precedence.

	* pass2.c (maybe_clear_entry): Make the deleted/unused error
		message fit on one line, since the error can happen during
		a preen pass.  (We eventually need to revamp the whole
		e2fsck error reporting and prompting system, but that's a
		job for another day.)

Mon Oct 14 22:29:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): Read in the list badblocks into fs->badblocks
		for the benefit of the inode scan functions. 

	* pass1.c (pass1): If ext2fs_get_next_inode() returns an error
		indicating that an inode is in a bad block, mark that
		inode as being used, as well as in the inode "bb" map.

	* pass2.c (maybe_clear_entry): New function which generalizes the
 		error cases when a directory entry needs to be cleared.
		(check_dir_block): If an inode is in the "bb" map, offer
 		to clear the directory entry, since the inode is in a bad
 		block.

	* pass4.c (pass4): If an inode is marked as used, but is is marked
		in the "bb" map, don't process it as a disconnected inode.

Tue Oct  8 02:02:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.06

Mon Oct  7 00:45:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): Print out the version number of the shared
		library when using the -V option.

	* swapfs.c (swap_filesys): Change EXT2_SWAP to EXT2_FLAG_SWAP for
	 	consistency's sake.

	* e2fsck.c (main): By setting EXT2_FLAG_MASTER_SB_ONLY, only write
 		out the backup superblocks when we know we have a valid
 		filesystem.

Tue Oct  1 22:00:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* util.c (preenhalt): Make it explicit on preenhalt that running
		e2fsck manually means without the -a or -p flag.

Fri Sep 27 14:41:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1): Add support for the EXT2_BOOT_LOADER inode.
		(Linux/FT actually sets the mode bits, so we have to
		handle it specially.)

	* e2fsck.c (check_if_skip): Print a message if the filesystem is
 		just dirty, so that the user knows that it's about to be
 		checked (since this will take a while).

Mon Sep 16 17:00:01 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass4.c: If a disconnected inode is zero-length, prompt to
		delete it instead of connecting it to lost+found.

Thu Sep 12 15:23:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.05

Fri Aug 30 20:24:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass4.c (pass4): If the user refuses to connect an unattached
		inode to lost+found, don't try to set i_links_count.  This
		is bad, since if the user says yes, the inode will be
		marked as unused, which is not necessarily the right
		thing, especially since the rest of the cleanup doesn't
		happen here.

	* pass2.c (deallocate_inode): Set inode_link_info[ino] when
		dellocating an inode.  (Not strictly necessary, but...)

	* pass4.c (pass4): Add "bonehead" explanation to the "programming
		error" message.

Tue Aug 27 11:26:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (PRS,main): Added new options -s and -S.  -s will
 		byte-swap the filesystem so that it is normalized.  -S
 		will byte-swap the filesystem regardless of its current
 		byte-order.

	* swapfs.c: New file, which will byte-swap a filesystem.

Tue Aug 20 09:41:37 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1): Change handling on files with non-zero dtime
		and non-zero i_link_count; before we treated them as
		deleted file per botched ext2 0.3c kernel behavior.  We
		now clear dtime instead.

Mon Aug 19 23:33:57 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): If e2fsck sets the clean bit, even if
		nothing else is changed, make sure FSCK_NONDESTRUCT is
		set (since after all having the filesystem set to
		invalid is an error.  :-)

Fri Aug  9 10:25:13 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_block): Make sure that meta data doesn't get
		accidentally set in the dir_blocks array (which could
		happen in some error condtions).
	
	* pass1.c (pass1): 
	* pass2.c (process_bad_inode): Check for fragments in a
		OS-independent fashion.

Thu Aug  8 15:20:54 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_if_skip): Close the filesystem when skipping the
		cleanup for the filesystem.

Mon Jul 22 22:03:28 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c: Improve corrupt_msg, so that it's less confusing.

Thu May 16 11:12:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.04

Wed May 15 21:41:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (relocate_hint): Issue a hint that the user may wish to
		try "e2fsck -b 8193" before allowing e2fsck to relocate
		inode table blocks.

	* Makefile.in (e2fsck): Build e2fsck statically or dynamically
		depending on the option to configure.  Added targets for
		e2fsck.static and e2fsck.shared for people who want to
		build a static or shared variant manually.

Wed Mar 27 00:33:40 1996    <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.03

Tue Mar 26 12:03:42 1996    <tytso@rsts-11.mit.edu>

	* e2fsck.c (show_stats): Don't use floating point to display
		percentage of non-contiguous files, as different libc
		handle result truncation differently, and this causes the
		test suite to bomb out depending on which libc you are
		using.

	* util.c (allocate_memory): Fix error message to omit extraneous
		%%s.

Tue Mar  5 03:50:40 1996    <tytso@rsts-11.mit.edu>

	* pass4.c (pass4): 
	* pass2.c (check_dir_block): 
	* pass1.c (pass1): Add support for dynamic first inode revision.

Wed Feb 14 16:27:30 1996    <tytso@rsts-11.mit.edu>

	* pass3.c (check_root): Fix spelling typo

Mon Feb  5 22:30:30 1996    <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_super_block): If the superblock fails certain
		internal consistency checks, exit with a fatal error after
		printing the "superblock is corrupt message".

Wed Jan 31 11:06:08 1996    <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.02

Wed Dec 15 21:24:26 1996    <tytso@rsts-11.mit.edu>

	* pass1.c (process_block): Check to see if a file is "fragmented".
		i.e., non-contiguous.  Note that any file which is larger
		than the block group is guaranteed to be non-contiguous.
		We may want to use a different hueristic for deciding
		whether or not a file is "fragmented".

	* e2fsck.c (show_stats): Print statistics of how many
		non-contiguous files are on the system.

Fri Dec 15 19:19:47 1995    <tytso@rsts-11.mit.edu>

	* badblocks.c (read_bad_blocks_file, test_disk): Fold
		functionality of test_disk() (which runs badblocks) into
		read_bad_blocks_file(); test_disk() now calls
		read_bad_blocks_file() with a NULL bad_blocks_file
		argument.

Mon Nov 20 18:30:10 1995    <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_mount): Use #if defined(__linux__) instead of
		#if defined(linux).  The latter won't work if we're
		compiling -ansi.

Mon Oct 30 20:31:17 1995    <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_mount): For Linux systems, the check to see if
		the root is mounted read-only has to be done for all
		filesystems, not just for the root filesystem, due to the
		way that some /etc/rc scripts are set up.

Thu Oct 26 12:05:30 1995    <tytso@rsts-11.mit.edu>

	* Makefile.in (install): Strip programs when they are installed.
		(e2fsck): Build e2fsck statically.

Wed Oct 25 21:18:16 1995    <tytso@rsts-11.mit.edu>

	* util.c (preenhalt): Preenhalt now takes an argument, which is an
		ext2fs_filsys; this allows it to set the EXT2_ERROR_FS
		flag in the superblock in cases where preenhalt is called.
		All calls to preenhalt() were changed to either
		preenhalt(fs) or preenhalt(NULL) in a few cases where the
		fs pointer was not available.  (Most notable, for block
		read/write errors.)

Mon Sep  4 21:41:03 1995  Remy Card  <card@bbj>

	* ehandler.c:
	  util.c: Include <sys/time.h> before <sys/resource.h>.  BSD needs it.

Mon Sep  4 10:14:49 1995    <tytso@rsts-11.mit.edu>

	* e2fsck.c (show_stats): Show statistics about how many inodes
		have indirect, doubly indirect, and triply indirect
		blocks.  Allow up to 8 digits for statistics, instead of
		merely 6, so things look pretty for large filesystems.

	* pass1.c (pass1): Keep statistics about indirect, doubly
	        indirect, and triply indirect blocks.

	* pass1.c (unwind_pass1): Clear the above statistics when unwinding
		pass 1.

Fri Aug 18 15:17:10 1995  Theodore Y. Ts'o  <tytso@dcl>

	* util.c, ehandler.c: Move #include of <sys/resource.h> after
		#include of "e2fsck.h", since sys/resource.h may depend on
		sys/time.h, which is #included in e2fsck.h.

Thu Aug 17 22:33:37 1995    <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_mount):  Use the new ext2fs_check_if_mounted()
		function to determine if the device is mounted.

	* e2fsck.c (main):  Add better error messages if ext2fs_open()
		fails. 

Wed Aug 16 16:25:02 1995    <tytso@rsts-11.mit.edu>

	* pass1.c (check_blocks): If we're clearing a directory, clear
		pb.is_dir so we don't do the following check of making
		sure the directory size matches; this is pointless, since
		we've already cleared the inode.

Fri Aug 11 09:08:54 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* pass1.c (bad_primary_block): New function, called by
		process_bad_block, which explains the facts of life to the
		user when a block in the primary superblock or primary
		group descriptors is bad.

	* pass2.c (check_dot): Handle the case where the first directory
		entry is used, but not ".".

	* pass2.c (check_dotdot): Handle the case where the second directory
		entry is used, but is not "..".

Thu Aug 10 10:05:10 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* e2fsck.c (check_super_block): Get the size of the physical
		device and if it is smaller than the reported size of the
		filesystem, report an error.

Sat Aug 12 03:39:18 1995  Remy Card  <card@bbj>

	* e2fsck.c (check_if_skip): Print the number of allocated files and
		blocks on clean filesystems.

Fri Aug 11 14:15:36 1995  Remy Card  <card@bbj>

	* e2fsck.8: Updated date and version number.

Thu Aug 10 14:26:01 1995  Remy Card  <card@bbj>

	* pass1.c (check_blocks): Check that directory size matches *exactly*
		the count of allocated blocks.

Wed Aug  9 21:21:24 1995  Theodore Y. Ts'o  <tytso@dcl>

	* pass1b.c (pass1d): Free the shared[] array when we're done with
		it to avoid a memory leak.

	* pass1.c (unwind_pass1): Use ext2fs_free_block_bitmap to free the
	        block_dup_map.

	* pass2.c (process_bad_inode): When clearing the inode, make sure
		the pathname is freed, to prevent a memory leak.

	* pass5.c (check_inode_bitmaps): Free free_array and dir_array
		when we're finished with them.
		(check_block_bitmaps): Free free_array when we're finished
		with them.

	* Makefile.in (e2fsck, flushb): Use $(LD) instead of $(CC) when
		linking the executable.

	* pass2.c (process_bad_inode): Even on OS's that don't support the
		fragment fields, make sure the Linux equivalent fields are
		set to zero.  If an OS wants to reuse these fields, which
		is probably a bad idea (although we may get desperate in
		the future) this code will have to be changed.

	* pass1.c (dir_block_cmp): If the block numbers are equal, compare
		on the inode field, and then blockcnt field.  This is just
		to keep the ordering of dir_blocks the same on all
		platforms when there are more than on missing directory
		blocks, which are indicated directories with holes, which
		are indicated with the block number being set to zero.

Sun Aug  6 15:40:58 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* pass1.c (check_blocks, process_block): check_blocks() modified
		to call the ext2fs_block_iterate() with BLOCK_FLAG_HOLE if
		the inode is a directory.  process_block() now checks to
		see if a directory has a "hole", or missing block.  If so,
		this fact is recorded in the directory block list so that
		the problem can be resolved in pass #2.

	* pass2.c (allocate_dir_block): Added allocate_dir_block() to
		allocate new blocks for directories with "holes".  Called
		out of check_dir_block if a block in the directory block
		list is zero.

	* pass3.c (get_lost_and_found): Move location of free(block) to
		prevent possible memory leak.

Sat Aug  5 12:42:22 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* pass2.c (check_dir_block): Use a automatic, fixed-saize array
		instead of alloca() --- alloca is not portable!  Check to
		make sure the filename is not longer than EXT2_NAME_LEN,
		and offer to fix it by truncating it, since it should
		never happen.

	* e2fsck.c (PRS): Use malloc() instead of alloca() --- alloca() is
		not portable!!  In any case putenv() in some systems must
		take a static character array or malloc()'ed memory;
		passing memory allocated using alloca() to putenv() is not
		advisable.

	* pass2.c (check_dot, check_dotdot): Use malloc() instead of
		alloca() --- alloca() is not portable!!!

Tue Jul 18 20:04:02 1995    <tytso@rsx-11.mit.edu>

	* pass1b.c (pass1c): 
	* pass3.c (check_root, get_lost_and_found): 
	* pass2.c (check_dir_block): Use ext2fs_{read,write}_dir_block
		to read/write the directory block.

Mon Jul 17 04:00:56 1995    <tytso@rsx-11.mit.edu>

	* util.c (ask_yn): Apply patch supplied by Peter A. Zaitcev to
		make sure VMIN and VTIME are set correct.

Fri Jul 14 19:26:29 1995    <tytso@rsx-11.mit.edu>

	* pass1.c (mark_block_used): Change to be an inline function.
		Assume that the block validity checks are already done,
		and use the fast variant of the bitmap functions.

Thu Jul 13 08:10:55 1995    <tytso@rsx-11.mit.edu>

	* pass5.c (check_block_bitmaps, check_inode_bitmaps): Check the
		bounds of the bitmaps in advance, and then use the fast
		variant of e2fs_test_{block,inode}_bitmap.

	* pass1.c (mark_block_used): Use ext2_fast_mark_block_bitmap since
		the bounds checking has already been done earlier.

Wed Jul 12 02:22:46 1995    <tytso@rsx-11.mit.edu>

	* pass1.c (pass1): Allocate and free the block_illegal_map, which
		is used for shortcut processing in process_block.
		(mark_table_blocks): Initialize block_illegal_map with the
		filesystem blocks.
		(describe_illegal_block): New helper function that
		describes why a block is illegal.
		(process_block): Use block_illegal_map as a shortcut
		to determine whether a block is bad.  Use
		describe_illegal_block to print out why the block is illegal.

Mon Jun 12 19:11:06 1995  Theodore Y. Ts'o  (tytso@dcl)

	* flushb.c: Don't include <linux/fs.h> if it doesn't exist.

	* scantest.c: Don't include <linux/fs.h>, <getopt.h>, or
		<mntent.h> if they don't exist.  (Mostly so that "make
		depend" works.)

	* pass1.c, pass1b.c, pass3.c, badblocks.c: Include <errno.h> (if
		it exists).

	* e2fsck.c, scantest.c: Don't include <getopt.h> if it doesn't
		exist. 

Mon Jun 12 08:37:49 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* pass2.c (process_bad_inode, check_for_zero_long,
	        check_for_zero_char):  Change long to u32, and char to u8.

Sun Jun 11 15:05:57 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* util.c (inode_has_valid_blocks): 
	* pass2.c (process_bad_inode): 
	* pass1.c (pass1, check_blocks, pass1_check_directory): Use
		LINUX_S_IS* instead of S_IS*.

	* e2fsck.h: Don't #include <sys/stat.h>

	* flushb.c (main): Add #ifdef BLKFLSBUF around ioctl.  (Although
		this program is pretty much useless if BLKFLSBUF isn't
		supported.)

	* e2fsck.c, badblocks.c: Add #include <errno.h>, since errno is
	        used.

Thu Jun  8 12:31:19 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* pass2.c (check_dot, check_dotdot, check_dir_block): Use alloca
	to allocate space for file names instead of using fixed size buffers.
	(process_bad_inode): Only check inode frag fields if
	HAVE_EXT2_FRAGS is defined (by configure).
	* pass1.c (pass1): Only check the inode frag fields if
	HAVE_EXT2_FRAGS is defined (by configure).

	* e2fsck.c (check_mount): Only check for a mounted filesystem if
	HAVE_MNTENT_H is defined (by configure).
	(PRS): Use alloca to allocate the new path string, instead of
	having a fixed size buffer (which was the wrong size anyway).
	(PRS): Only support the -F (flush) option if the BLKFLSBUF ioctl
	is defined.

	* e2fsck.h: Only include <linux/fs.h> if HAVE_LINUX_FS_H is
	defined (by configure).

	* Makefile.in: Rewritten to conform to GNU coding standards and
	support separate compilation directories.

Thu Apr  6 15:04:36 1995  Remy Card  <card@bbj.ibp.fr>

	* pass1.c (pass1): Test the mode in reserved inodes (must be zero).

Sat Mar 11 13:12:16 1995  Theodore Y. Ts'o  <tytso@localhost>

	* pass1.c (unwind_pass1): Clear the file type statistics counter
		when pass 1 needs to be restarted from scratch.

	* pass1.c (handle_fs_bad_blocks): Fix bug where bitmap blocks were
		being reallocated to blocks in the next block group,
		instead of the current block grup.

	* pass1.c (pass1, check_blocks): Set inode_link_info[ino] whenever
		inode.i_links_count is set.

Tue Feb 14 01:38:04 1995  Theodore Y. Ts'o  (tytso@rt-11)

	* pass1.c (process_block): Add checks for if the block is
		trepassing on a superblock or group descriptor table.

Sat Dec 31 00:52:11 1994    <tytso@rsx-11.mit.edu>

	* main.c (corrupt_msg): Extend the message which is printed out
		when the superblock is corrupt, to include the suggestion
		of using the -b option to specify an alternate superblock.

Thu Nov 24 09:29:58 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* badblocks.c (read_bad_blocks_file): If we are adding or
		replacing bad blocks in the bad blocks inode, sanity check
		the bad block inode first, and clear out any illegal blocks.

	* pass2.c (check_name): Don't bomb out if the attempt to get the
		pathname of the containing directory returns an error; the
		directory may be too badly damaged to expect that
		ext2fs_get_pathname will always succeed.  Use "???" if the
		pathname can't be obtained (it's only for a printf to the
		user anyway).

		The name of the containing directory and the bad filename
		were incorrectly interchanged in the user message.  Fixed.

	* pass2.c (check_name, check_dir_block): Use a common static
		string for the unknown pathname.

Mon Nov  7 22:30:54 1994  Remy Card  <card@bbj>

	* Fixed lots of printf formats to make sure that block and inode
	numbers are printed as unsigned integers.

Mon Oct 24 14:10:46 1994    (tytso@rsx-11)

	* pass5.c (check_block_end): Fix calculation of how the last block
		in the block bitmap should be calculated.

Wed Sep  7 10:01:13 1994    (tytso@rsx-11)

	* pass1b.c (pass1_dupblocks): Fix declaration of dup_inode_map to
		be an ext2fs_inode_bitmap, and free it properly.

	* e2fsck.h
	* e2fsck.c (main): Folded in Remy Card's changes to add a revision
	level to the superblock.

Wed Aug 17 22:00:20 1994  Remy Card  (card@bbj)

	* e2fsck.c (usage): Fixed bogus usage message.

Wed Aug 17 11:21:45 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* pass1.c (process_bad_block): Fixed bug so that blocks in the
	backup superblocks and group descriptors are handled gracefully.

