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.
