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.

