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.
