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.

