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): 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.
