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

	* Release of E2fsprogs 1.20

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

	* tune2fs.c (update_feature_set): Fix capitalization typo.

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

	* partinfo.c (main): Use unsigned long instead of long when
		querying the size of a device using the BLKGETSIZE ioctl,
		to remove the 1TB limit (and turn it into a 2TB limit :-)

	* fsck.c (compile_fs_type): Fix I18N compilation bug: use N_()
		instead of _() to initialize static variables.

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

	* fsck.8.in, fsck.c (compile_fs_type, fs_type, ignore): Fix
		handling of -t option to be more intuitive.  Also add
		support for the Mandrake -t loop hack.  See man page
		for description of new -t semantics.

	* fsck.c (device_already_active): Fix bug in
		device_already_active which could cause infinite loops if
		we don't know the base_device of the filesystem.

	* fsck.c: Make sure all exit status codes returned by fsck are
		consistent with the error codes documented in the fsck man
		page.

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

	* badblocks.c, chattr.c, dumpe2fs.c, e2image.c, findsuper.c, 
		lsattr.c, mke2fs.c, mklost+found.c, tune2fs.c, util.c:
		Change location of ext2_fs.h to be ext2fs/ext2_fs.h

	* tune2fs.8.in: Fix typo's and make other clarifications suggested
		by Andreas Dilger.

2001-05-11  Andreas Dilger  <adilger@turbolinux.com>

	* mke2fs.c: don't zap the superblock if we are running with noaction!
		Zap the end of the device to remove stale RAID superblocks.

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

	* tune2fs.c (update_feature_set): Clean up some printf messages.

	* fsck.8.in, mke2fs.8.in, tune2fs.8.in: Fix typo's and make other
		clarifications suggested by Andreas Dilger.

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

	* mke2fs.c (PRS): Integrated changes from Andreas Dilger which
		make the revision superblock field be set to the correct
		value depending on if superblock features are set.

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

	* fsck.c (PRS): fsck -? now prints the usage message.

	* badblocks.8.in, dumpe2fs.8.in, e2label.8.in, mke2fs.8.in, 
		mklost+found.8.in, tune2fs.8.in: Fix typo; removed
		excess "anonymous" in the AVAILABILITY section.

	* chattr.1.in, lsattr.1.in, uuidgen.1.in: Update URL location of
		e2fsprogs package.

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

	* util.c: Use specific check for HAVE_SYS_STAT_H.

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

	* fsck.8.in: Add explicit language to describe how options get
		passed to filesystem-specific checkers.

	* badblocks.8.in: Fixed man page to describe the first optional
		parameter to badblocks as last_block, instead of
		num_blocks.  (Debian bug #87216)

	* badblocks.c: Change the blocks_count variable to be last_count,
		which is a more accurate description of the variable.

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

	* e2image.8.in: New manual page

	* badblocks.8.in, e2label.8.in, mke2fs.8.in mklost+found.8.in, 
		tune2fs.8.in: Update location of e2fsprogs to be
		http://e2fsprogs.sourceforge.net.

	* dumpe2fs.c (main): Add new flag, -i, which will allow dumpe2fs
		to dump out the filesystem statistics from an ext2 image
		file.
	
	* e2image.c (main): Fix format of e2image to be easier to be parse
		by ext2fs_open().

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

	* fsck.c (device_already_active): If we're not able to determine
		the base device, we should assume that the device is
		already active in order to force serialization.

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

	* tune2fs.c (parse_tune2fs_options): Interpret -c 0 as -c -1 (for
		backwards compatibility with older kernels).  -c 0 makes
		more sense to users.

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

	* tune2fs.c (remove_journal_device): If the force flag is given,
		tune2fs will remove the journal device information from
		the superblock even if tune2fs failed to open the journal
		device or otherwise other failed to remove the filesystem
		from journal device.
		(parse_tune2fs_options): Fix -j option so that it works
		(it was missing the open_flag being set to EXT2_FLAG_RW).
		(main): Accept "-U clear" to set a null UID.
	
2001-04-21  Theodore Tso  <tytso@valinux.com>

	* mke2fs.8.in: Manual page cleanups.  Temporarily comment out the
		documentation for the extern journal device support.

	* mke2fs.c (usage): Remove the deprecated -s option from the usage
		message.

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

	* mke2fs.c (main): Add better explanation about when the
		filesystem will be checked after it is created.

	* util.c (parse_journal_opts): Remove code which allowed a bare
		number to be treated as a journal size.

	* mke2fs.c, tune2fs.c: Add newlines to error messages so that they
		look nicer.

	* mke2fs.c (create_journal_dev): Call
		ext2fs_create_journal_superblock() first, so if it's going
		to error out, the user finds out before waiting for the
		entire device to get zero'ed.

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

	* mke2fs.8.in, tune2fs.8.in: Change man paegs to document that the
		journal must be bewteen 1024 and 102,400 file system
		blocks.

	* mke2fs.c, tune2fs.c: Change to use figure_journal_size()

	* util.c, util.h (figure_journal_size): Change
		journal_default_size into routine which also converts the
		requested journal size into filesystem blocks and does
		bounds checking to make sure the journal is sized
		reasonably.  Renamed function to journal_default_size.
		(parse_journal_opts): Remove bounds check for the journal
		size, since this is now done in figure_journal_size, and
		based on the number of filesystem blocks, as opposed to
		using the absolute size of the journal.

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

	* mke2fs.c (main): Flush out the "creating journal" message.
		Also handle the case where the default journal size
		returns zero blocks == no journal.  Print out how often
		the filesystem will be checked.

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

	* e2image.c (main): Add code to write the e2image header.

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

	* tune2fs.8.in: Update man page to reflect that 2.0.39 supports
		sparse_super.

	* dumpe2fs.c (list_desc): Fix fencepost error when calculating the
		range of inode table blocks.  Add '0x' to values printed
		in hex.

	* chattr.c, lsattr.c: Define the _LARGEFILE64_SOURCE to force the
		use of the LFS so that lstat will work on large files.

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

	* tune2fs.c, mke2fs.c, tune2fs.8.in, mke2fs.8.in: Change user
		interface so that -J is used to specify journal options,
		and -j is used to request creation of a journal using
		default values.  (This is a UI change, but we haven't done
		a formal release, and it makes things much more consistent
		with the rest of the options out there.) 

	* tune2fs.c: Add support for removing a filesystem from an
		external journal; we correctly remove the filesystem UUID
		from the external journal's filesystem list.

	* util.h, util.c (journal_default_size): New function from Andreas
		Dilger to calculate an appropriate default journal size
		given a filesystem size.

	* util.c (parse_journal_opts): Allow the creation of a journal as
		small as 1MB.

	* dumpe2fs.c (print_journal_information): Use s_first_data_block
		to find the correct block to read the journal superblock.

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

	* tune2fs.c: Changed the external journal code so that it simply
		adds a filesystem to a journal; the journal must have bene
		created via "mke2fs -O journal_dev /dev/XXX".

	* mke2fs.c: Add support for creating an external journal device by
		using the command "mke2fs -O journal_dev /dev/XXX".  Also
		changed the external journal code so -j device=/dev/XXX it
		simply adds a filesystem to that journal; the journal must
		have been created via separate step.

	* dumpe2fs.c (print_journal_information): Add support for dumping
		information about an external journal device.

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

	* mke2fs.c: Add new filesystem types, largefile and largefile4,
		for those filesystems whose average inode size is 1MB and
		4MB, respectively.  Allow the inode ratio specified to be
		has high as 4MB.   Make the s_max_mount_count vary between
		20 and 40, to avoid needing to check all of the
		filesystems at the same time.  Add some random jitter to
		the s_max_mount_count value so that we avoid checking all
		of the filesystems at the same time when we reboot.

	* tune2fs.8.in: Add description of the -j option.

	* tune2fs.c (add_journal): Minor fixes from Andreas Dilger. Flush
		stdout after printing in-progress message.  
		(main): Exit with status code 1 if we failed to determine
		the mount status of the device.

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

	* e2image.c, mke2fs.c, mklost+found.c, tune2fs.c, util.c,
		uuidgen.c: Fix gcc -Wall complaints, including one bug in
		tune2fs caused by a block automatic shadowing version of
		the variable we really wanted to use, which broke the
		logic testing to see if the filesystem was mounted.

	* badblocks.c (flush_bufs): Use ext2fs_sync_device() to sync and
		flush the device.

	* mke2fs.c: Change ino_t to ext2_ino_t.

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

	* Makefile.in, tune2fs.c: Move e2label functionality into tune2fs,
		using argv[0] as a dispatch.  This allows e2label to be
		(more) safely used on mounted filesystems.

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

	* get_device_by_label.h (get_volume_label_by_spec): Add function
		prototype.

	* get_device_by_label.c: Use string_copy() instead of strdup() for
		portability's sake.  Fix a few other gcc -Wall
		complaints. 

	* fsck.c (string_copy): Export string_copy() extern.

	* badblocks.c: Fix various gcc -Wall complaints, including
		an incorrect reference to sync in flush_bufs().

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

	* tune2fs.c (update_feature_set, add_journal): Moved to separate
		functions.  Added ability to add and remove the journal
		while the filesystem is live.  Added support for setting
		a time-based UUID.  Removed zero-initialized static variables.

	* mke2fs.c, util.c, util.h (strcasecmp, proceed_question,
		check_plausibility, parse_journal_opts, check_mount):
		Moved functions to util.c so they can be used by tune2fs.

	* mke2fs.c (main): Change ext2fs_add_journal_fs() to 
		ext2fs_add_journal_inode() to reflect function renaming.

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

	* mke2fs.c, e2image.c: Removed references to struct ext2fs_sb to
		struct ext2_super_block.

	* tune2fs.c (main): Add support to allow HAS_JOURNAL flag to be
		cleared, but only if the filesystem is unmounted or
		mounted read-only.  Changed struct ext2fs_sb to struct
		ext2_super_block, and cleaned up old code which was needed
		for old versions of ext2_fs.h (not needed since we're
		using our own version now).

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

	* fsck.c (check_all): Call interpet_device to resolve LABEL= and
		UUID= right away so that the device_already_active() logic
		can do the right thing.  Also cleaned up the the root
		filesystem logic checking code; fixed up a logic bug with
		the parallel_root option.

	* lsattr.1.in: Add pointer to chattr man page for definition of
		the file attributes.

	* lsattr.c (list_attributes): Minor cleanup to smooth out logic
		flow.  Also removed static initialized variables to zero.

	* chattr.c (decode_arg, get_flag): Use a table-driven method for
		decoding the ext2 file flags character options.  Add
		support for the journaled data flag.

	* chattr.1.in: Document the -j/+j/=j flag.

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

	* mke2fs.8.in: Minor clarity edit.

	* mke2fs.c (usage): Document the -j option.
		(main): Print the number blocks used in the journal.

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

	* base_device.c (base_device): Add support for DAC960 device
		names.

	* fsck.c (device_already_active): Handle the case where
		base_device doesn't know how to interpret the device name,
		instead of core dumping.

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

	* mke2fs.c (main, parse_journal_opts): Add support for creating V1
		superblocks.  We now pass in a journal_flags field to the
		journal creation routines for this purpose.

	* mke2fs.c: Remove zero initializers to save a few bytes from the
		executable image.  (Are we excited yet?)

	* findsuper.c: And non-subtle copyright licensing restriction to
		get Yann to remove this program from the Debian package.  :-) 

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

	* fsck.c (device_already_active): Change to use new version of
		base_device() which now returns dynamically allocated
		memory.

	* base_device.c (base_device): New version moved from fsck.c which
		now understands ugly devfs names.  (Debian bug #65181)

	* base_device.tst: Test case for base_device.c

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

	* fsck.8.in: Add clarification that filesystems with a fs_passno
		of 0 are skipped with the -A option.  (Debian wishlist/bug
		#63442)
	
	* fsck.c (wait_one): When we let a new fsck take control of the
		console to display the progress bar, set FLAG_PROGRESS to
		so that fsck knows not to start new processes during an
		fsck pass with the progress bar. (Should fix debian bug
		#65267)

	* tune2fs.8.in: Add clarifying statement about converting user and
		group names to uid's before storing them in the
		superblock.  (Debian bug #67446)

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

	* mke2fs.c(main): Expand the -j option so that it parses
		option=argument style options, and add support for
		creating filesystems with external journals.

	* mke2fs.8.in: Document new syntax for the -j option.

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

	* e2image.c, Makefile.in: New program which saves ext2 metadata to
		a file for people who need a last-ditch saving throw.

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

	* mke2fs.c (PRS): Applied Andreas Dilger's patch to make the -r -s
		handling a bit more sane.  (Even though -s is deprecated
		at this point.)

	* get_device_by_label.c: Apply fix from Erik Troan to support 16
		character labels.

	* fsck.c (device_already_active): Add a special case check for MD
		devices, so we don't try to check them in parallel with
		other devices.

	* mke2fs.c (PRS, main), mke2fs.8.in: Add support for the -j
		option, which builds an ext2/3 filesystem with an ext3
		journal.

2000-10-24    <tytso@valinux.com>

	* mke2fs.c (zap_sector): Fix really stupid typo which gcc 2.95
		didn't catch.

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

	* fsck.c: Add base device definitions for hd[e-h], for those
		systems with four IDE interfaces.

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

	* mke2fs.c (zap_sector): Fix error message printed when zap_sector
		fails. 

	* dumpe2fs.c (list_desc): Fixed format string bug when printing
		the inode table location in non-hex format.

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

	* get_device_by_label.c: Add call to ext2fs_find_block_device if
		we can't find the device using the name given by
		/proc/partitions.  (This can happen if devfs is compiled
		into the kernel, but not mounted.)

2000-06-27  Andreas Dilger <adilger@turbolabs.com>

	* dumpe2fs.c (usage): add fhx options to usage message, add -x option
		to print out the per-group block numbers in hex, add line for
		location of primary/backup superblock and group descriptors

	* mke2fs.c: rename max to group_blk_max avoid potential macro conflict

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

	* mke2fs.c (zap_sector): Change zap_bootsect to more general
		zap_sect.
		(main): Clear the superblock when starting mke2fs, to
		avoid leaving the filesystem in an inconsistent state.

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

	* get_device_by_label.c: Improve /proc/partitions parsing in
		fsck, and speed up fsck -a.

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

	* Release of E2fsprogs 1.19

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

	* badblocks.8.in: Added text explaining that the -n and -w options
		are mutually exclusive.

	* badblocks.c (usage): Fix usage message to make it clear that the
		block count must be specified if the starting block is to
		be specified.  (The starting block should be a option, in
		the long run.)

	* badblocks.c (test_nd): Save and restore the currently_testing
		variable before going into the write verification loop.
		This avoids a loop termination problem if the last block
		on the disk is bad.  Also, turn off the SIGALRM signal
		while restoring blocks after the user types ^C.  The
		num_saved variable is now static so that it won't get
		clobbered by a longjmp.  buf_used and bb_count are no
		longer static, since they aren't used by the cleanup
		routines anymore.

	* badblocks.c (main): Removed an unsued varaible (buf_size).
		Fixed bad getopt argument that didn't allow the 'b' option
		to take an argument.  Added error checking when parsing
		the starting block number.  Fixed lint warning in fscanf
		format string.

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

	* fsck.c (execute, wait_one): Treat fsck.ext3 the same as
		fsck.ext2 (because they are the same) for the purposes of
		the progress bar display logic.

	* tune2fs.8.in: Update manual page to document what happens if
		max_mount_count is negative.

	* tune2fs.c (main): Allow setting the maximal count value to be
		negative, since the kernel interprets that as forcing a
		check. 

	* fsck.c (lookup, load_fs_info, check_all): Use lazy evaluation
		for calling interpret_device(), since this requires root
		privileges if the partitions need to be scanned.
		Otherwise, it's not possible to do non-proot fsck's for
		removeable devices such as floppies if there are any
		LABEL= or UUID= entries in /etc/fstab.

	* badblocks.c (check_mount, main): Check to see if the filesystem
		is mounted before doing a read/write or non-destructive
		test.  This can be overriden using the new -f option.

	* badblocks.8.in: Update manual page to reflect that the
		blocks-count parameter is now optional.  Also properly
		document the start-block parameter.  Added documentation
		for the -f option.

	* badblocks.c (main): Allow the blocks-count parameter to be
		optional.   If it's not specified, use the size of the
		device as a default.

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

	* badblocks.c (test_nd): Significantly simplify the logic so that
		it's more obviously what's going on.  Fixed a few
		potential cases which weren't handled correctly in the
		old, overly complicated logic.
		(flush_bufs): Now doesn't take a second argument, and
		always forces a sync; this is required before it's really
		safe to call BLKFLSBUF, at least for some kernels.

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

	* mke2fs.c (PRS): Add a much more specific error message if the
		filesystem size is defaulted and get_device_size returns a
		size of zero.  Otherwise, users get a confusing "invalid
		argument while passed to ext2 library" error message.

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

	* fsck.c (interpret_device): Add better error messages if a UUID=
		or LABEL= specification is given.

	* mke2fs.c (main): We forcibly turn off the filetype feature if
		the OS is the hurd, since the hurd doesn't support it.
		(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.)

	* mke2fs.c (proceed_question): Fix reversed sense of
		proceed_question that was busted due to the
		internationalization patch.  Fixed bug where if
		proceed_question was called twice, the input buffer wasn't
		cleared of the previous question's newline.
	
Thu Apr  6 17:50:25 2000  Theodore Y. Ts'o  <tytso@signal.thunk.org>

	* badblocks.c (flush_bufs): Use fsync() if the system doesn't
		support fdatasync().

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

	* badblocks.c, dumpe2fs.c, e2label.c, mke2fs.c, tune2fs.c,
		uuidgen.c: For platforms that don't define optarg.h,
		manually define optarg and optind.

	* badblocks.8.in: Updated manual page with suggestions from David
		Beattie.

	* badblocks.c (test_nd): Generalized cleanup and bug-fixes.   We
		now explicitly clear out the signal handlers to prevent a
		longjmp to a deactivated stack frame.  
		(test_rw): Fixed a signed vs. unsigned comparison error.

	* badblocks.8.in, chattr.1.in, dumpe2fs.8.in, lsattr.1.in,
		mklost+found.8.in, tune2fs.8.in: Update Remy Card's e-mail
		address.  
		chattr.1.in: Update which attributes aren't supported.

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

	* chattr.1.in: 
	* lsattr.1.in: Change "version" to "version/generation number".

	* chattr.1.in: Fix stupid file vs filesystem typo.

	* tune2fs.c Fix spelling error (spare vs sparse).

	* mke2fs.c (PRS): Add safety check to make sure the number of
		blocks doesn't exceed 32 bits on a 64 bit machine.

	* chattr.c: Random cleanup; file-only variables are now static.
		Options for setting/clearings flags put into order, and
		#ifdef's removed (since we now use a built-in header
		file).  Add error message if user tries to set and reset
		the same flag.

	* lsattr.c: Random cleanup; file-only variables are now static.
		The -l "long" listing has been changed to look nicer.
		Options names have been renamed to be more descriptive.
	
2000-02-06  Theodore Ts'o  <tytso@valinux.com>

	* badblocks.c, chattr.c, dumpe2fs.c, e2label.c, findsuper.c,
		fsck.c, get_device_by_label.c, lsattr.c, mke2fs.c, 
		mklost+found.c, nls-enable.h, partinfo.c, tune2fs.c,
		uuidgen.c: Add Internationalization support as 
		suggested by Marco d'Itri <md@linux.it>.

	* badblocks.c: Fix non-destructive read/write patches from David
		Beattie.  Non-standard variable-length automatic arrays
		removed.  Non-destrutive write test fixed so that logic is
		clearer and more provably correct.  (I believe the old
		code had a bug where the disk data wasn't restored if it
		was interrupted at the wrong time.)

	* badblocks.8.in: Document new options in man page.

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

	* fsck.c (interpret_device): If there was an attempt to interpret
		a device specification of the type "UUID=" or "LABEL=",
		and it fails, check to see if /proc/partitions is
		readable.  If not, print a warning message about /proc
		perhaps not being mounted, and exit.

	* mke2fs.c (check_plausibility): Remove unneeded #include of
		linux/fs.h.  Add #define of MAJOR if necessary.

	* partinfo.c: Remove unneeded #include of linux/fs.h

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

	* tune2fs.c (usage): Update the usage message to correctly
		document the -s option.

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

	* badblocks.c: Folded in patches David Beattie <dbeattie@usa.net>.
		Need to do cleanup before release: use of GCC extensions
		(dynamic arrays); unclean coding tricks (use of || instead
		of if statements, etc.).  Comments from David Beattie:

		"I added non-destructive write-testing, and quite a few
		other features.  The non-destructive write testing,
		triggered by new "-n" command-line option, will write test
		patterns to the disk, but only after reading data off the
		disk into memory.  Then, comparing the test patterns gives
		a result as to whether or not those sectors are reliable.
		Finally, the original data is written back.

		To streamline this operation, I added another option, "-c
		blocks_at_once", which will give the number of disk blocks
		to process at one time (mnemonic--"count").  I made this
		default to 16 (as in the read-only testing mode), and also
		affect the read-only testing mode.  Of course, read-only
		mode needs (count * block_size) amount of memory, and
		non-destructive read-write needs 3 times that much, so it
		makes sense to do the calculations and not overrun
		available RAM...I would have liked to implement and
		auto-memory-usage heuristic, but I have no idea if it's
		even possible to determine the amount of free memory on a
		Unix system except by reading /proc entries, and that
		didn't seem portable.  I did NOT make this blocks_at_once
		affect the behavior of the test_rw routine, as it is
		processing the whole disk at once, anyway.

		I *think* that I got higher detection rates on my hard
		drive using random test data than patterned test data, so
		my non-destructive mode initializes its test data buffer
		randomly.

		I fixed a typo in flush_bufs that caused the ioctl
		BLKFLSBUF to never get compiled into the program.

		Also, I added an "undocumented" (I didn't put it into the
		usage message; you can if you think it's useful) "-h"
		option to specify the host device to flush--useful if you
		want to test out my "non-destructive" code on something
		other than a hard drive, such as a file on a hard drive,
		and want the host hard drive to flush.

		I provided support for an "input" file (via option "-i",
		similar to the "-o" option)...containing a list of
		already-known bad blocks; it will skip testing those
		blocks, thus adding speed to the bad block scan (on my
		computer, hitting a physically bad block causes a
		half-second-or-more freeze as the kernel waits for the
		hard drive to give up and reset itself; pretty annoying
		when you already know the block is bad from a previous
		scan).
	
		Finally, the real killer, the persistent re-scan (option:
		"-p num_passes") that I created will, if desired,
		persistently re-scan the drive until it has completed a
		user-decidable number of passes in a row during which no 
		new bad blocks are found.  On my drive, I would see
		behavior that a certain percentage of bad blocks would be
		found with each pass (it was not reliable in the defective
		areas!), so I wanted it to check it over and over again
		until it didn't find any more, several times.  Perhaps
		this will be useful to others.  Defaults of course to
		zero, meaning it will stop after the first pass.  I used
		"-p 2" on my drive, and it ran for 2 1/2 days...then used
		"-p 3" a couple days later and it ran for a few more
		hours, and since then the rest of my drive has been
		completely reliable.

		Implementation of these last two features, "-i" and "-p",
		I did using a bb_list from libext2fs.  I debated whether
		bad blocks input through "-i" should be output into the
		"-o" file (or stdout, of course), and decided against it,
		but left the code to do so in place, commented out, just
		for your information.

		In order to maintain data integrity upon interruption of a
		non-destructive-write test, I created a signal handler
		which I install which will write back whatever original
		disk data is in the buffers upon any of the fatal signals
		(except SIGKILL, of course).

		Of course, ideally, the new options would be reflected in
		the badblocks manual page, but I am not experienced at
		manual page modification; if you decide my patch to
		badblocks should be incorporated into the distribution, I
		could learn how to update the manpage and other
		documentation, or you could do it for me after exercising
		your opinions, if you have any, on exactly what the
		command-line parameters should be called and which ones
		should be in the distribution."

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

	* Really fix the bug where "fsck -As" will actually allow
		interactive fsck's.  (For those people who like to do
		interactive fsck's in the /etc/rc scripts!?!)

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

	* tune2fs.8.in: Fix man page so that the sparse_super filesystem
		option is properly named.

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

	* mke2fs.c: Change log2() and log10() to int_log2() and
		int_log10() to avoid namespace collisions.  Change #ifdef
		sparc to #ifdef __sparc__.

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

	* 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>

	* mke2fs.8.in: Update manual page so that the sparse_option
		filesystem option is properly named.

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

	* fsck.c (main): Move setting of the interactive flag to before
		the call to check_all(), so that people who try to use
		fsck -As can do so interactively.

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

	* Release of E2fsprogs 1.17

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

	* fsck.c (PRS, device_already_active): Add debugging hook; if the
		environment variable FSCK_FORCE_ALL_PARALLEL is set, then
		force all fsck runs to happen in parallel.

	* get_device_by_label.c (has_right_label): Fixed bug where code
		used a strncmp to compare a binary UUID value which may
		contain a NULL.  Fixed GCC warnings; added const to char *
		typed variables.  Eliminated non-portable use of u_char.

	* mke2fs.c (PRS): Fix gcc warnings; add const to some char *
		variables, including in struct mke2fs_defaults.  
		(set_fs_defaults): Changed parameter name to avoid
		gcc warnings.

	* fsck.c (wait_one): Fix gcc warnings; add #include for ctype.h,
		add const to char * variables, and use NOARGS to declare
		functions that take no arguments.  Also fix a memory leak
		in execute() where we weren't freeing argv[] after forking
		the child process.

	* chattr.c: Add hack to compile in a definition for S_ISLNK so we
		can successfully compile even with warnings turned on.

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

	* mke2fs.c (show_stats): Capitalized Hurd to make the GNU types
		happy. 
		(PRS): Use __u64 instead of long long for portability
		reasons.   Also moved #include of sys/stat.h inside #ifdef
		HAVE_LINUX_MAJOR_H for portability reasons.

	* fsck.c (execute): Fix really stupid bug in the linked list
		management which caused fsck in parallel mode to go into
		an infinite loop.

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

	* Release of E2fsprogs 1.16

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

	* tune2fs.c (main): Add a new option -O which allows the user to
		set and clear certain "safe" filsystem feature flags.
		Currently, the only ones which are supported for
		modification are sparse_superblock and filetype.

	* mke2fs.c (PRS): Add new option -O which allows the user to
		request filesystems with specific filesystem options.  By
		default on 2.2 and later systems, create filesystems that
		have both file type information and sparse superblocks.

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

	* badblocks.8.in, chattr.1.in, dumpe2fs.8.in, e2label.8.in,
	  fsck.8.in, lsattr.1.in, mke2fs.8.in, mklost+found.8.in,
	  tune2fs.8.in, uuidgen.1.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)

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

	* tune2fs.c (main): Fix typo (double spaces) in messages regarding
		changing the sparse superblock option

	* fsck.c (wait_one): If the fsck process just started, wait a
		second before sending a SIGUSR1, to give it a chance
		to set the signal handler; otherwise, fsck will die on an
		unhandled SIGUSR1.

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

	* mke2fs.c (show_stats): Fix display bug when printing out the
		number of superblocks.  Suggested by Yann Dirson.

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

	* partinfo.c: Fix minor compilation bugs pointed out by Yann
		Dirson.

	* mke2fs.c: Don't turn on sparse superblocks by default on pre-2.2
		kernels. 

	* mke2fs.8.in: Add the possible valid block sizes for mke2fs.
		Document the -n flag, and the new defaults for the -s
		flag.

	* dumpe2fs.c, dumpe2fs.8.in: Add new options -f (force) and -h
		(header-only).

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

	* mke2fs.c (PRS): Fix logic for turning on/off the sparse
		superblock option.

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

	* Release of E2fsprogs 1.15

1999-07-18    <tytso@rsts-11.mit.edu>

	* mke2fs.c (PRS, set_fs_defaults): Add new option -T which allows
		the user to specify the how the filesystem is to be used.
		Mke2fs now chooses the filesystem parameters automatically
		based on the size of the filesystem and the intended use
		of the filesystem.  Add new option -n which simply goes
		through the calculations to determine the parameters of
		the filesystem the system would make.

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

	* fsck.c, fsck.h: Add support for new option -C.  This option will
		automatically manage e2fsck processes so that they will
		print completion/progress bars.  If multiple filesystems
		are being checked, arrange to make sure that only one
		e2fsck process is displaying a progress bar at a time.

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

	* badblocks.c (do_test): Don't complain if the write error occurs
		on a non-block boundary.  This is perfectly common when
		using blocksizes larger than 1k.

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

	* uuidgen.c: Add option parsing so that user can ask for either a
		time-based UUID or a random-based UUID.

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

	* fsck.c: Added support for LABEL= and UUID= specifications for
		the filesystem's device, to match what recent mount
		programs can support.  Also, close stdin when doing fsck
		-A or when checking more than one filesystem at a time, so
		that e2fsck doesn't try to ask interactive questions if
		the filesystem appears to be mounted.

	* get_device_by_label.c: New file added to support LABEL=foo and
		UUID=bar type specifications.

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

	* badblocks.c:  Make the "done" string include enough spaces to
		clear out a large block number.

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

	* mke2fs.c (check_mount): Allow a filesystem to be made even if it
		appears mounted if the force option is given.

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

	* mke2fs.8.in: Fix typo in man page which caused the badblocks
		command to not show up in the "SEE ALSO" section.

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

	* findsuper.c: Added documentation from aeb@cwi.nl; some minor
		code cleanups.

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

	* dumpe2fs.c, dumpe2fs.8.in: Added new command-line options which
		allow a filesystem expert to specify the superblock and
		blocksize when opening a filesystem.  This is mainly
		useful when examining the remains of a toasted filesystem.

1999-03-11  Andreas Dilger <adilger@enel.ucalgary.ca>

	* uuidgen.c, uuidgen.1.in: Created command-line utility to
		generate UUIDs.

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

	* fsck.c (fsck_device, execute): Don't dereference a null pointer
		when checking a filesystem not in /etc/fstab.

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

	* fsck.c (fsck_device): Print an error message if the user passes
		in a device or directory name which isn't found in /etc/fstab.
		Allow the location of /etc/fstab to be overridden by
		the FSTAB_FILE environment variable.

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

	* mke2fs.c (write_inode_tables): Add kludge code so that when the
		MKE2FS_SYNC environment variable is set, mke2fs will sync
		every MKE2FS_SYNC block groups, while it is writing out
		the inode tables.  This is to work around a VM bug in the
		2.0 kernel.  I've heard a report that a RAID user was able
		to trigger it even using a 2.2 kernel.

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

	* fsck.c (execute, wait_one): Modified routines so that they
		accurately create an fsck_instance even when the noexecute
		flag is set.  This allows for accurate debugging of the
		fsck pass structure.
		(check_all): When the verbose flag is given twice, print
		debugging information about when fsck is waiting for jobs
		to finish.

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>

	* fsck.8.in: Clarified and expanded the documentation for the -A
		switch.

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

	* fsck.c (load_fs_info): If the pass number field is missing, it
		needs to be treated as zero.

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

	* mke2fs.c (PRS): Add -N option to allow the user to specify
		exactly how many inodes he/she wishes.

	* chattr.c, lsattr.c: Only print the version information for the
		program if the -V option is given.

	* chattr.c: Ignore symbolic links when doing a recursive descent
		through a directory.

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

	* fsck.c (load_fs_info, parse_fstab_line): Ignore fstab lines
		are commented out.  Also allow blank lines in the
		/etc/fstab file.
		(execute): In verbose mode, print the mountpount of the
		filesystem which we are checking (user request).

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

	* mke2fs.c: Add definition of SCSI_BLK_MAJOR if not defined, for
		compatibility with Linux 1.2.13 header files.

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

	* Release of E2fsprogs 1.13

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

	* mke2fs.8.in: Fixed stupid typo ("Raid options are _comma_
		seperated", instead of common separated)

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>

	* fsck.c (load_fs_info): Parse /etc/fstab ourselves, instead of
		relying on getmntent().  This has the advantage of
		allowing us to properly handle missing pass numbers correctly.

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

	* tune2fs.8.in: Fix minor display bug in the nroff.

	* mke2fs.c (show_stats, write_inode_tables): Use the log10
		function to calculate the display of block numbers so that
		things look nice on an 80 character display.

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

	* mke2fs.c (usage): Add the sparse-super-flag to the usage
		message. 

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

	* Release of E2fsprogs 1.12

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

	* findsuper.c (main): Print the block group number which is now
		being written by e2fsprogs.

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

	* fsck.c (ignore): Remove unused variable cp.

	* chattr.c (fatal_error): 
	* tune2fs.c (usage): 
	* lsattr.c (usage): 
	* dumpe2fs.c (usage): 
	* badblocks.c (usage): Remove volatile from declaration.

	* fsck.c: Change use of strdup to be string_copy, since we don't
		trust what glibc is doing with strdup.  (Whatever it is,
		it isn't pretty.)

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

	* mke2fs.c (PRS): Add a -V option which prints the version number
		and exit.

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

	* fsck.c (ignore): Remove check for filesystems with the noauto 
		option.

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 and cat1dir 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>

	* e2label.8.in: New man page to document the e2label function.

	* e2label.c: Fix -Wall warning by making functions static.

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

	* chattr.1.in: Document that the append-only attribute may
		only be set or cleared by the superuser.

	* Update all manual pages to that the availability section is
		up-to-date. 

	* e2label.8.in, tune2fs.8.in: Update manual page to state that
		labels must be no longer than 16 characters, or they will
		be truncated.

	* e2label.c (change_label), tune2fs.c (main): If the label is
		longer than 16 characters, print a warning message stating
		that the label will be truncated.

	* mke2fs.c (PRS): If the user specifies a filesystem size, and
		it's larger than the apparent size of the device, print a
		warning message and ask if the user wants to proceed.

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

	* mke2fs.c (check_plausibility): Fixed spelling typo in warning
		message.  Fixed up -Wall warnings in file.

Sun Mar  8 22:21:48 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* partinfo.c (main): The ioctl BLKGETSIZE requires a long, not an
		int. 

Sun Feb  1 16:53:36 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* badblocks.8: Update documentation to note that output format
		of badblocks is suitable for use with e2fsck -l or
		mke2fs -l.

	* mke2fs.c (handle_bad_blocks): Fix bug so that all groups with
 		bad superblock backup blocks are printed (not just the
 		first one).

Mon Dec  1 17:01:04 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* badblocks.8.in: Add documentation for the -s option.

Fri Oct 24 23:37:52 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* fsck.c: 
	* chattr.c: Remove #include of getopt.h, since it's not needed.

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

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

	* mke2fs.c (parse_raid_opts): Make parse_raid_opts return a void,
		to fix a -Wall warning.

Mon Sep 15 22:07:12 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* tune2fs.c (main): 
	* mklost+found.c (main): 
	* lsattr.c (main): 
	* dumpe2fs.c (main): 
	* chattr.c (main): 
	* badblocks.c (main): Declare main to return an int, as required.
		Make sure main always ends with an exit(0).  (Some
		programs weren't doing this, and thus were returning a
		random exit value.)

Mon Jul 14 15:27:29 1997  Theodore Y. Ts'o  <tytso@mit.edu>

	* e2label.c: New file contributed by Andries Brouwer which
 		provides an easy-to-use interface to modify the filesystem
 		label.
	
	* Makefile.in (SPROGS): Add Makefile support to build e2label

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

	* Release of E2fsprogs 1.11

Mon Jun 16 23:37:54 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* mke2fs.c (show_stats): Adjust the number of columns printed when
		displaying the superblock backups to avoid running over 
		80 columns when making a really big disk.

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

	* badblocks.8.in, chattr.1.in, dumpe2fs.8.in, fsck.8.in, 
		mke2fs.8.in, tune2fs.8.in: Fix minor typos and grammer
		oops found by Bill Hawes (whawes@star.net).

	* mke2fs.c (test_disk): 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

Thu Apr 24 09:52:47 1997  Theodre Ts'o  <tytso@localhost.mit.edu>

	* mke2fs.c: Added new option -R, which specifies RAID options.
  		Currently the only supported RAID option is "stride" which
 		specifies the stripe width in RAID filesystem.  This is
 		used to aid in the placement of the inode and block
 		bitmaps.

	* mke2fs.8.in, tune2fs.8.in: Added warnings that the sparse
 		superblock option isn't yet supported by most kernels.

Wed Apr 23 22:42:51 1997  Theodre Ts'o  <tytso@localhost.mit.edu>

	* mke2fs.c (PRS): Make the default filesystem revision be 0, not
 		1.  (Since some people are still worried about 1.2.13
 		compatibility).

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:57:24 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* chattr.1.in: Updated man page so that the 'A' attribute is
		specified everywhere.

	* chattr.c (usage): Added usage message for the 'A' attribute.

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

	* Release of E2fsprogs version 1.08

Thu Apr 10 07:08:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dumpe2fs.c (list_desc): List the offsets of the inode and block
		bitmaps, and the inode table.  List the block boundaries
		for the groups.

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

	* tune2fs.c (main): Implement the -s flag allows the user to
		set and reset the sparse superblock flag.

	* mke2fs.c (PRS): By default generate DYNAMIC revision
		filesystems.  The -s flag controls whether or not the
		sparse superblock flag is set.
		(PRS): Change to allow the user to specify the true
		maximum number of blocks per group to reflect the
		blocksize. 

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

	* Release of E2fsprogs version 1.07

Thu Mar  6 17:15:05 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* mke2fs.c (create_root_dir): Set the root directory's i_uid and
		i_gid to be the real user and group id.

Tue Mar  4 10:14:33 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* mke2fs.c (check_plausibility): Add more intelligent error
		messages when the device doesn't exist.

Sat Mar  1 10:43:32 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* fsck.c (main): Fix bug where the PATH environment variable isn't
		set when it is unset.

Tue Jan 14 12:30:45 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* mke2fs.c (write_inode_tables): Fixed bug in write_inode_tables
 		where a loop variable was getting reused in a nested loop.
  		This caused the inode table to not be correctly
 		initialized.

Thu Jan  2 00:00:37 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* lsattr.c, chattr.c: Include string.h, since we use memcpy().

	* findsuper.c: Use time_t for ctime(), not __u32.

Sat Dec 28 23:39:18 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* badblocks.c: Adapted -vv modifications from Rik Faith so that
		they frequently update the block number field.

	* badblocks.8.in: Document the optional start-block parameter

Mon Oct 14 11:52:58 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* mke2fs.c: Updated to use new ext2fs_allocate_tables() function.

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:56:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* chattr.1.in: Documented the 'A' (noatime) attribute.

	* dumpe2fs.c (main): Change EXT2_SWAP to EXT2_FLAG_SWAP for
	 	consistency's sake.

Sun Sep 22 16:18:47 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* chattr.c (decode_arg): Add support for the 'A' (noatime) flag.

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

	* Release of E2fsprogs version 1.05

Sat Sep  7 07:34:11 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* tune2fs.c (main): Add support for new option -C, which sets the 
		current number of mounts.
		(main): Allow the interval to be specified in seconds,
		mostly for debugging.

Tue Aug 27 17:27:43 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* Makefile.in (SMANPAGES): Use @FSCK_MAN@ instead of fsck.8.
	(SPROGS): Use @FSCK_PROG@ instead of fsck.

Thu Aug 22 00:51:44 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* mke2fs.c (zap_bootblock): Don't do zap_bootblock on a
	 	sparc.

Tue Aug 20 00:15:46 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* chattr.c (main): Fixed bug so that chattr -v works.  (Bug report
 		and fix sent by Charles Howes, chowes@eznet.ca)

Fri Aug  9 11:52:42 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* tune2fs.8.in:
	* tune2fs.c: Added support for the -L option which sets the volume
		label, the -M option which sets the last mounted
		directory, and the -U option which sets the filesystem UUID.

	* mke2fs.8.in:
	* mke2fs.c: Added support for the -o option, which overrides the
		creator OS.  Generate a UUID for the filesystem, if
		applicable.  Added support for the -L option which sets
		the volume label, and the -M option which sets the last
		mounted directory.

Sat Jun 22 17:43:17 1996  Remy Card  <card@bbj.linux.eu.org>

	* chattr.c (decode_arg): Integrated Michael Nonweiler's fix to
		avoid a segmentation fault when the "-v" option is used
		and no version number is specified.
	
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:15:43 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (fsck): fsck doesn't need to be linked with the ext2
		libraries.

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

	* Release of E2fsprogs version 1.03

Thu Mar  7 03:43:20 1996    <tytso@rsts-11.mit.edu>

	* mke2fs.c (PRS): Add (for development only) support to
		specify revision and inode size of the new filesystem.

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

	* mke2fs.8.in: Fix a few minor typo's in the man page.

	* mke2fs.c (reserve_inodes): Add support for dynamic first inode
	        revision.

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

	* fsck.c (check_all, PRS): Added new flag -P, which turns on the
		parallel root option.  This allows you to check the root
		filesystem in parallel with the other filesystems.  Note
		that this is not the safest thing in the world to do,
		since if the root filesystem is in doubt things like
		the e2fsck executable might be corrupted!  But some
		sysadmins, who don't want to repartition the root
		filesystem to be small and compact, may really want this
		option turned on.

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

	* Release of E2fsprogs version 1.02

Tue Oct 30 21:14:12 1995    <tytso@rsts-11.mit.edu>

	* mke2fs.c (check_plausibility): Add check to warn user if they
		are trying to mke2fs the whole disk.  (/dev/hda
		vs. /dev/hda1)

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

	* fsck.c (check_all): If we break out of the loop because we are
		serializing and have just started at fsck we haven't
		finished the pass. We need to go round again in case there
		are more filesystems to be done in this pass.  (Patch
		submitted by Mike Jagdis)

Sat Dec  9 10:07:16 1995    <tytso@rsts-11.mit.edu>

	* dumpe2fs.c (in_use): test_bit() was renamed to
	        ext2fs_test_bit().

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

	* fsck.c (fsck_device): Check fstype instead of type; this was a
		stupid typo which caused coredumps in some cases.

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

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

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

	* mke2fs.c (PRS): Move call of check_mount() from main() to PRS(),
		so we do the check to see if the filesystem is mounted
		*before* we try to determine the size of the device.

Wed Sep  6 23:34:07 1995  Remy Card  <card@bbj>

	* fsck.c (load_fs_info): Load the informations from /etc/fstab in
		the same order.

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

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

	* mke2fs.c (PRS): Change call to use the new
		ext2fs_get_device_size() function in order to determine
		the size of the filesystem.  Remove get_size() and
		is_valid_offset(), which are no longer called.

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

	* fsck.c (fsck_device): Make sure fstype has been set by the user
		and that it does not begin with "no" and the user has
		specified exactly one type before using it as the type to
		check.

Fri Aug 11 14:17:18 1995  Remy Card  <card@bbj>

	* badblocks.8:
	* chattr.1:
	* dumpe2fs.8:
	* fsck.8:
	* lsattr.1:
	* mke2fs.8:
	* mklost+found.8:
	* tune2fs.8: Updated date and version number.

Thu Aug 10 14:18:36 1995  Remy Card  <card@bbj>

	* tune2fs.c: Fixed a bug which prevented the use of user and group
		names with the -g and -u options.  Thanks to Jean Christophe
		ANDRE <progfou@mycrob.cafard.freenix.fr>.

	* mke2fs.8:
	* tune2fs.8: Fixed a spelling error in Ted's name :-)

Wed Aug  9 20:41:54 1995  Theodore Y. Ts'o  <tytso@dcl>

	* mke2fs.c (count_blocks): Divide the size by
		EXT2_BLOCK_SIZE(&param), instead of assuming that the
		blocksize is always 1024 bytes.

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

	* mke2fs.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.

	* chattr.c (chattr_dir_proc): 
	* lsattr.c (lsattr_dir_proc): Use malloc() instead of alloca() ---
		alloca is not portable!

	* fsck.c (fsck_device): If the filesystem type is specified by the
		user using the -t option, let it override the type in
		/etc/fstab.

	* fsck.c (strdup): Don't build strdup() if the system defines it.

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

	* chattr.c, lsattr.c: Include <sys/types.h> for <dirent.h>'s
		benefit.

	* The $(UPROGS) go in bin, not sbin.

	* badblocks.c, chattr.c, dumpe2fs.c, fsck.c, lsattr.c, mke2fs.c,
		tune2fs.c:  Don't include <getopt.h> if it doesn't exist.

Mon Jun 12 16:36:04 1995  Theodore Y. Ts'o  <tytso@dcl>

	* badblocks.c, chattr.c, dumpe2fs.c, fsck.c, lsattr.c, mke2fs.c,
	        tune2fs.c: Only include getopt.h if HAVE_GETOPT_H is defined.

Sat Jun 10 23:37:09 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* chattr.c: Include errno.h, since we use errno

	* fsck.c (load_fs_info): If HAVE_MNTENT_H is not defined,
		explicitly initialize filesys_info to be NULL.

	* mke2fs.c: Include the stdio.h and errno.h header files

Thu Jun  8 13:25:23 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* mke2fs.c: Only include <linux/fs.h> if we can.
	(get_size): Don't try to use the BLKGETSIZE ioctl unless it's defined.
	(check_mount): Only check to see if the device is mounted if
	HAVE_MNTENT_H is defined (by configure).

	* fsck.c (load_fs_info): Only try to get info about filesystems if
	HAVE_MNTENT_H is defined (by configure).
	(main): Allocate space for a new fsck_path instead of append to a
	statically sized buffer.
	(PRS): Use alloca to allocate the new path string, instead of
	having a fixed size buffer (which was the wrong size anyway).

	* chattr.c (chattr_dir_proc): Use alloca to allocate space for a
	filename instead of using a fixed-size buffer.
	* lsattr.c (lsattr_dir_proc): Ditto.
	* mklost+fond.c (main): Calculate the actual needed size for the
	path buffer instead of using MAXPATHLEN (which not all systems have).

	* badblocks.c: Only include linux include files if we have them.
	(flush_bufs): New function to flush a block device, optionally
	syncing it first.  This replaces other copies of this code.
	(test_ro): Replace calls to ioctl with flush_bufs().
	(test_rw): Ditto.

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

Sat Mar 11 10:59:58 1995  Theodore Y. Ts'o  <tytso@localhost>

	* mke2fs.c (main, zap_bootblock): Added new function
		zap_bootblock() which clears the first 512 bytes of the
		filesystem.  This protects the filesystem from being
		misidentified as a MS-DOS FAT filesystem.

	* badblocks.c (alarm_intr, test_ro, test_rw): Increase the space
		allocated for printing the block numbers, so that the
		display doesn't get corrupted when running badblocks on a
		very large partition.

	* badblocks.c (do_test, test_ro, test_rw): Added missing cast to
		ext2_loff_t, so that when checking a large device,
		spurious seek errors aren't reported.

	* mke2fs.c (count_blocks): Declare mid to be of type ext2_loff_t
		instead of type int, so that it works for filesystems
		greater than 2 GB.  (Fortunately count_blocks is only
		called if the device does not support the BLKGETSIZE
		ioctl, which most do.)

	* fsck.c (ignore): Add check to ignore filesystems with a pass
		number of zero.  (This check was accidentally deleted at
		during 0.5b development.)

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

	* mke2fs.c (new_table_block, alloc_tables, PRS, main): Add a new
		option, -S, which only writes the superblock and group
		descriptors.  Useful for recovering when all of the
		superblocks are corrupted somehow (as a last ditch
		measure).

		Also, don't bother initializing the bitmap blocks in
		alloc_tables(), since they will be overwritten at the end
		anyway.  (Should speed up mke2fs by a little.)

Tue Dec  6 02:20:55 1994    <tytso@rsx-11.mit.edu>

	* fsck.c (main): Fix stupid typo where a null inst would be freed. 

	* fsck.c (wait_one): Check WIFEXITED on status before trying to
		extract the exit status.  In other cases, return
		FSCK_ERROR if the back end processor exited with a signal.

Tue Nov 15 10:20:00 1994  Remy Card  <card@bbj>

	* tune2fs.c (main): Fixed a bug which prevented the use of the
		new options.
	Added the `w' (week) suffix recognition in the check interval.

Sun Nov 13 15:58:48 1994    (tytso@rsx-11)

	* fsck.c (load_fs_info): If the user has an obviously old
		/etc/fstab file, issue a warning message and assume that
		all partitions should be checked.

Sat Nov 12 00:33:18 1994    (tytso@rsx-11)

	* dumpe2fs.c (list_desc): Update to new inode and block bitmap
		structures. 

	* mke2fs.c (create_root_dir): Create the root directory owned by
		the effective uid.

Mon Nov  7 22:04:37 1994  Remy Card  <card@bbj>

	* tune2fs.c (main.c): Added support for new options:
	-r reserved_blocks_count, -g reserved_gid, -u reserved_uid.

Sun Aug 21 00:57:33 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* fsck.c (ignore): If the pass number is 0, ignore the filesystem.

Wed Aug 17 21:55:03 1994  Remy Card  (card@bbj)

	* badblocks.c (test_rw): Added verbose output like in the
	read-only test.

	(do_test and test_rw): Use the llseek system call if available.

	* chattr.c: Added support for new attributes.

	* lsattr.c: Added support for long format.

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

	(valid_offset): Use the llseek system call if available.

Wed Aug 17 10:50:57 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* mke2fs.c (handle_bad_blocks): Check to see if a bad block is
	where a backup superblock/group descriptor is stored.  If so,
	print a warning message and adjust the superblock counts so that
	they are correct.  (Otherwise, the bad block will get counted
	twice and the # of free blocks count will be wrong.)

	(alloc_tables): Removed code which calcualated the free block
	statistics, which was moved to lib/ext2fs/initialize.c.  This
	allows the bad block code to adjust the group descriptor
	statistics if necessary.
