2001-09-20  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.25

2001-09-19  Theodore Tso  <tytso@valinux.com>

	* tune2fs.c (remove_journal_inode): Remove dead code that wasn't
		in use.

	* tune2fs.8.in: Update man page to reflect the fact that adding or
		removing a journal doesn't require running e2fsck.

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

	* mke2fs.c (zap_sector): Allocate sufficient space for 
		zero-filled buffer.

2001-09-02  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.24a

2001-08-31  Andreas Dilger  <adilger@turbolinux.com>

	* mke2fs.c (main): Fix version format string.

2001-08-30  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.24

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

	* badblocks.8.in: Fix spelling typo.  (Addresses Debian bug #110621)

	* mke2fs.c (zap_sector): Now takes a third argument, which is how
		many sectors to clear out.  Fixed up Andreas's patch to
		make it a bit more efficient/compact.

2001-08-30  Andreas Dilger  <adilger@turbolinux.com>

	* mke2fs.c (main): Zap the second sector of the disk, along with
		any sectors in the same filesystem block after the superblock.
		The latter will remove (for example) swapspace signatures
		on 4kB+ blocksize filesystems.  Also when zeroing the "end"
		of the filesystem don't actually zero the start of a very
		small device (less than 64 blocks).

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

	* fsck.c (main): Make version display consistent with the other
		e2fsprogs programs.

	* lsattr.c, chattr.c, mke2fs.c, tune2fs.c, dumpe2fs.c, e2image.c,
		mklost+found.c: Remove EXT2FS_VERSION from the version
		display, since it only confuses people.

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

	* tune2fs.c (remove_journal_device): Remove unused variable
		check_uuid.

	* get_device_by_label.h: Define function prototype for
		copy_string(), since this was moved from fsck.c to
		get_device_by_label.c by Andreas's BK changeset.

2001-08-17  Andreas Dilger  <adilger@turbolinux.com>

	* get_device_by_label.[ch], fsck.c, util.c:  New interpret_spec()
		function in get_device_by_label.c to allow the use of
		UUID= or LABEL= when creating filesystems which use external
		journal dev (e.g.  mke2fs -J device=LABEL=<journal_label>).

	* tune2fs.c: Use superblock s_journal_uuid to locate an external
		journal device instead of s_journal_dev when removing it.
		Allow opening journal devices to set the label and UUID
		in the ext2 superblock.

	* mke2fs.c, tune2fs.c: Free journal_device after use, as it is
		malloc'd in interpret spec.
 
2001-08-15  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.23

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

	* tune2fs.c: Make sure that error messages are sent to stderr, and
		normal messages are sent to stdout.  (Addresses Debian bug
		#108555.)

	* fsck.8.in: Fixed error in synopsis of the man page.

	* fsck.c (check_all): Don't bother to interpret a device where the
		pass number is zero.  (Addresses Debian bug #106696.)
		(main): Print a warning message if there are no devices to
		be checked.  (Addresses Debian bug #107458.)

	* mke2fs.c (PRS): Handle -O and -s options in line in the getopt
		loop, so that -s and -O handling are a bit more intuitive.
		(Not that they should be mixed anyway; -s is deprecated.)

	* tune2fs.c (parse_tune2fs_options): Give an error if -O is
		specified more than once.

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

	* mke2fs.8.in: Slim down text describing the -O flag to remove
		text that erroneously implied that all features
		(including compatible flags) aren't compatible with older
		kernels.

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

	* mke2fs.c (PRS): Fix bug pointed out by Christopher Niessen; if
		mke2fs -O none is specified, the sparse_super feature
		should not be present.

	* e2image.c, e2image.8.in: Add support for raw image files.

2001-08-04  Andreas Dilger  <root@lynx.adilger.int>

	* mke2fs.c (PRS): Put check for JOURNAL_DEV before sparse_option,
		so we don't set the sparse superblock flag on journal devices.

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

	* tune2fs.c (update_feature_set, remove_journal_inode): If
		removing an in-filesystem journal, clear out the journal
		inode and update the filesystem accounting structures so
		we don't have to run e2fsck to clean up after ourselves

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

	* tune2fs.c (update_feature_set): Don't require a forced fsck if
		we're removing an external journal from a filesystem.

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

	* mke2fs.c (PRS): If the blocksize is not specified and the
		journal device is specified, use it to determine the
		blocksize of the new filesystem.

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

	* fsck.8.in: Add much more explicit language documenting how the
		fs_passno field in /etc/fstab is handled.  (Addresses
		Debian bug #30833).

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

	* fstype.c (identify_fs): New file which looks at the superblock
		of the filesystem to determines its type.

	* fsck.c (fsck_device, ignore, interpret_type): Call identify_fs
		if the type specified in /etc/fstab is "auto".

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

	* Release of E2fsprogs 1.22

2001-06-15  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.21

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

	* mke2fs.c (PRS): Remove unneeded test in when creating a external
		filesystem journal.

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

	* tune2fs.c, mke2fs.c, util.c, util.h (print_check_message): Move
		the message which displays how often the filesystem will
		be checked from mke2fs into a utility subroutine.  Then
		cause tune2fs to call that function to display the message
		after adding a journal to a filesystem.

	* mke2fs.8.in: Add manual page fixups and explanation for why it's
		good to check filesystems periodically from Andreas
		Dilger.

	* Makefile.in: Don't build e2image if --disable-imager is
		specified to configure.

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

	* dumpe2fs.c: Use WORDS_BIGENDIAN to determine whether or not
		we're (not) using i386 byte order.

	* dumpe2fs.c, mke2fs.c: Stop using the compatibility badblocks
		function, and use the ext2fs_badblocks_* functions
		instead.

	* fsck.c (device_already_active): Fixed bug which can cause fsck
		to core dump if there are a mix of devices with standard
		and non-standard names.  (Addresses Debian bug #100559)

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

	* chattr.c, lsattr.c: Don't use _FILE_BITS_OFFSET method of using
		the 64-bit function, since this changes the expected size
		of struct dirent.  Instead use lseek64 explicitly.

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

	* Makefile.in: Move include/asm/types.h.in to
		lib/ext2fs/ext2_types.h.in.

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.
