E2fsprosg 1.11 (June 17, 1997)
==============================

Fixed e2fsck to detect (previously ignored) conflicts between the
superblock or block group descriptors and block bitmaps, inode
bitmaps, and inode tables.

Fixed bug in e2fsck so that when the message printed out when a block
or inode bitmap conflicts with other data, it has the correct group
number.

Fixed bug in e2fsck and mke2fs where the blocksize wasn't being passed
to badblocks.  This meant that not all of the filesystem was being
tested for bad blocks! 

Fixed an array boundary overrun case which cropped up in
ext2fs_badblocks_list_test when a user tried running "mke2fs -c 
-b 4096".

Adjusted the number of columns printed by mke2fs when displaying the
superblock backups to avoid running over 80 columns when making a
really filesystem.

Fixed up the man pages for e2fsck, debugfs, badblocks, chattr,
dumpe2fs, fsck, mke2fs, and tune2fs (typos and other minor grammar
fixes), thanks to some suggestions from Bill Hawes (whawes@star.net).

Programmer's notes:
-------------------

Fixed install rule in lib/ss so that ss_err.h is actually getting
installed.

Fixed bug in ext2fs_copy_bitmap; the destination bitmap wasn't getting
bassed back to the caller.

Fixed bug in ext2fs_inode_scan_goto_blockgroup; it had not been
setting the current inode number (which meant this function wasn't
working at all).

Fixed bug in ext2fs_resize_generic_bitmap; it had not be zeroing all
blocks in the bitmap when increasing the size of the bitmap.

Changed the initial number of blocks allocated by ext2fs_init_dblist()
to be more realistic.

Added a new function ext2fs_allocate_group_table, which sets up the
group descriptor information (and allocates inode and block bitmaps,
and inode tables for a particular group).  The function was created by
factoring out code form ext2fs_allocate_tables().

Added a new function ext2fs_move_blocks which takes a bitmap of the
blocks to be moved, and moves them to another location on the
boardboard.

Make the unix_io channel's io_channel_flush implementation calls sync()
to to flush the kernel buffers to disk.

Added a new function ext2fs_dblist_count returns the number of
directory blocks in dblist.


E2fsprogs 1.10 (April 24, 1997)
===============================

Mke2fs once again defaults to creating revision #0 filesystems, since
people were complaining about breaking compatibility with 1.2 kernels.
Warning messages were added to the mke2fs and tune2fs man pages that
the sparse superblock option isn't supported by most kernels yet (1.2
and 2.0 both don't support parse superblocks.)

Added new flag to mke2fs, -R <raid options>, which allows the user to
tell mke2fs about the RAID configuration of the filesystem.  Currently
the only supported raid option is "stride" which specifies the width
of the RAID stripe.

Fixed bug in e2fsck where pass1b would bomb out if there were any
blocks marked bad in the inode table.

Fixed rare bug in mke2fs where if the user had a very unlucky number
of blocks in a filesystem (probability less than .002) the resulting
filesystem would be corrupt in the last block group.

Fixed bug where if e2fsck tried to allocate a block to fix a
filesystem corruption problem and the filesystem had no free blocks,
ext2fs_new_block() would loop forever.

The configure script now checks explicitly to see if "-static" works,
since that can't be assumed to be true --- RedHat doesn't install
libc-static by default.

Fixed bug in libext2's block iterator functions where under some
cirmcustances, file with holes would cause the bcount parameter to the
callback function to be incorrect.  This bug didn't affect any of
e2fsprogs programs, but it was discovered by Paul Mackerras, the
author of the PPC boot loader.

Removed use of static variables to store the inode cache in libext2fs.
This caused problems if more than one filesystem was accessed via
libext2fs (static variables in libraries are generally a bad idea).
Again, this didn't affect e2fsprogs programs, but it was discovered by
Paul Mackerras.

Fixed minor bugs and version code drift to assure that e2fsprogs 1.10
will compile cleanly with 1.2.13 kernels (even with a.out shared
libraries!)

Programmer's notes:
-------------------

Added new functions to duplicate an ext2 filesystem handle, and its
associated substructure.  New functions: ext2fs_dup_handle(),
ext2fs_copy_dblist(), ext2fs_badblocks_copy(), ext2fs_copy_bitmap().
Other structures, such as the io_channel and the inode_cache, now have
a ref count so that they only get freed when they are no longer used
by any filesystem handle.  (These functions were added as part of the
development effort for an ext2 resizer).

E2fsprogs 1.09 (April 14, 1997)
===============================

Fixed bug in mke2fs (really in lib/ext2fs/initialize.c) which was
accidentally introduced in the 1.08 release.  The overhead calculation
was accidentally removed, which caused ext2fs_initialize() to not
notice when the filesystem size needed to be adjusted down because
there wasn't enough space in the last block group.

Fixed bug in version parsing library routine; it was always parsing
the library version string, instead of using the passed-in string.

Clarified chattr man page.

E2fsprogs 1.08 (April 10, 1997)
===============================

E2fsck 1.07 was very slow when checking very large filesystems with a
lot of files that had hard links (i.e., news spools).  This was fixed
by seriously revamping the icount abstraction.  Added a formal test
suite for the icount abstraction.

Debugfs now has a "-l" option to the "ls" command, which lists the
inode number, permissions, owner, group, size, and name of the files
in the directory.

Fix a bug in e2fsck where when a directory had its blocks moved to
another location during the pass 1b processing, the directory block
list wasn't updated, so pass 2 wouldn't check (and correct) the
correct directory block.

E2fsck will now treat inodes which contain blocks which are claimed by
the filesystem metadata by treating them as multiply claimed blocks.
This way, the data in those blocks can be copied to a new block during
the pass 1b--1d processing.

E2fsck will attempt to determine the correct superblock number and
display it in the diagnostic and warning messages if possible.

Add support for a new (incompatible) feature, "sparse_super".  This
feature reduces the number of blocks which contain copies of backup
superblocks and block group descriptors.  (It is only an incompatible
feature because of a bug in ext2_free_blocks.)  mke2fs and tune2fs now
support a new -s option; e2fsck will recognize filesystems built with
this feature turned on.

E2fsck now checks the library to make sure is the correct version,
using new library functions.  (This helps to diagnose incorrectly
installed e2fsprogs distributions.)

Dumpe2fs now prints more information; its now prints the the
filesystem revision number, the filesystem sparse_super feature (if
present), the block ranges for each block group, and the offset from
the beginning of the block group.

Mke2fs now distributes the inode and block bitmap blok so that the
won't be concentrated in one or two disks in RAID/striping setups.
Also, if the user chooses a 2k or 4k block group, mke2fs will try to
choose the largest blocks per group that be chosen.  (For 2k blocks,
you can have up to 16384 blocks/group; for 4k blocks, you can have up
to 32768 blocks/group.)  Previously mke2fs would not allow
specification of more than 8192 blocks per group, even if you were
using a 2k or 4k block group.

Programmer's notes:
-------------------

Added a new function ext2fs_create_icount2() which takes a "hint"
argument.  This hint argument presets the icount array with the list
of inodes which actually need to be in the icount array.  This really
helps to speed up e2fsck.

Added a new function ext2fs_icount_validate() which checks the rep
invariant for the icount structure.  This is used mostly for testing.

The error mesasage given when a bad inode number is passed to
test_generic_bitmap to reflect EXT2FS_TEST_ERROR (instead of
EXT2FS_UNMARK_ERROR).

Added a new function ext2fs_set_dir_block which sets the block of a
dblist entry, given the directory inode and blockcnt.

Added a new function ext2fs_get_library_version() which returns the
current library version, and ext2fs_parse_version_string() which
returns a version number based on a e2fsprogs version string.

The icount functions will return EINVAL if the passed in inode number
is out of bounds.

E2fsprogs 1.07 (March 9, 1997)
==============================

E2fsck is now uses much less memory when checking really large
filesystems (or rather, filesystems with a large number of inodes).
Previously a filesystem with 1 million inodes required 4 megabytes of
memory to store inode count statistics; that storage requirement has
now been reduced to roughly half a megabyte.

E2fsck can now properly deal with bad blocks appearing inside the
inode table.  Instead of trying to relocate the inode table (which
often failed because there wasn't enough space), the inodes in the bad
block are marked as in use.

E2fsck will automatically try to use the backup superblocks if the
primary superblocks have a bad magic number or have missing meta-data
blocks (or meta-data blocks which are out of range).

E2fsck's pass 3 has been made more efficient; most noticeable on
filesystems with a very large number of directories.

Completely revamped e2fsck's system of printing problem reports.  It
is now table driven, to make them more easily customizeable and
extendable.  Error messages which can be printed out during preen mode
are now one line long.

Fixed e2fsck's filesystem swapping code so that it won't try to swap
fast symbolic links or deleted files.

Fixed e2fsck core dumping when fixing a filesystem which has no
directories (not even a root directory).

Added a check to e2fsck to make sure that the length of every
directory entry is a multiple of 4 (since the kernel complains if it
isn't).

Added a check to e2fsck to make sure that a directory entry isn't a
link to the root directory, since that isn't allowed.

Added a check to e2fsk to now make sure the '.' and '..' directory
entries are null terminated, since the 2.0 kernel requires it.

Added check to write_bitmaps() to make sure the superblock doesn't get
trashed if the inode or block bitmap is marked as being block zero.

Added checking of the new feature set fields in the superblock, to
avoid dealing with new filesystem features that this package wasn't
set up to handle.

Fixed a fencepost error in ext2fs_new_block() which would occasionally
try to allocate a block beyond the end of a filesystem.

When the UUID library picks a random IEEE 802 address (because it
can't find one from a network card), it sets the multicast bit, to
avoid conflicting with a legitimate IEEE 802 address.

Mke2fs now sets the root directory's owner to be the real uid of the
user running mke2fs.  If the real uid is non-zero, it also sets
the group ownership of the root directory to be the real group-id of
the user running mke2fs.

Mke2fs now has more intelligent error checking when it is given a
non-existent device.

When badblocks is given the -vv option, it now updates the block that
it is currently testing on every block.

Fixed a bug in fsck where it wouldn't modify the PATH envirnoment
currently correctly if PATH wasn't already set.

Shared libraries now built with dependencies.  This allows the shared
library files to be used with dlopen(); it also makes the transition
to libc 6 easier, since ld.so can tell which libc a particular shared
library expects to use.

Programmer's notes:
-------------------

Added new abstraction (defined in dblist.c) for maintaining a list of
blocks which belongs to directories.  This is used in e2fsck and other
programs which need to iterate over all directories.

Added new functions which test to see if a contiguous range of blocks
(or inodes) are available.  (ext2fs_*_bitmap_range).

Added new function (ext2_inode_has_valid_blocks) which returns true if
an inode has valid blocks.  (moved from e2fsck code).

Added new function (ext2fs_allocate_tables) which allocates the
meta-data blocks as part of initializing a filesystem.  (moved from
mke2fs code).

Added a new I/O manager for testing purposes.  It will either allow a
program to intercept I/O requests, or print debugging messages to
trace the activity of a program using the I/O manager.

The badblocks_list functions now store the bad blocks in a sorted
order, and use a binary search to speed up badblocks_list_test.

The inode scan function ext2fs_get_next_inode() may now return a soft
error returns: MISSING_INODE_TABLE and BAD_BLOCK_IN_INODE_TABLE in
those cases where part of an inode table is missing or there is a bad
block in the inode table.  

Added a new function (ext2fs_block_iterate2) which adds new arguments to
the callback function to return a pointer (block and offset) to the
reference of the block.

Added new function (ext2fs_inode_scan_goto_blockgroup) which allows an
application to jump to a particular block group while doing an inode
scan.

The badblocks list functions were renamed from badblocks_* to
ext2fs_badblocks_*.  Backwards compatibility functions are available
for now, but programs should be modified to use the new interface.

Some of the library functions were reorganized into separate files to
reduce the size of some programs which statically link against the
ext2 library.

Put in some miscellaneous fixes for the Alpha platform.


E2fsprogs 1.06 (October 7, 1996)
================================

Fixed serious bug in e2fsck: if the block descriptors are bad, don't
smash the backup copies in ext2fs_close().  (The problem was that when
e2fsck -p discovered the problem, while it was closing the filesystem
and exiting, it was also blowing away the backup superblocks on the
disk, which was less than friendly.)  We now make it the case that we
only write out the backup superblock and the back block descriptors if
the filesystem is completely free from problems.

Fixed a bug in block_interate in the lib/ext2fs library which caused
e2fsck to fail on GNU Hurd-created filesystems.

Add support for Linux/FT's bootloader, which actually uses
EXT2_BOOT_LOADER, and sets its mode bits which caused e2fsck to want
to clear the inode.

Add support for the "A" (no atime update) attribute.  (Note: this
attribute is not yet in production kernels.)

The test suite is not automatically run when doing a "make all" from
the top level directory.  Users should manually run "make check" if
they wish to run the test suite.

Upon a preenhalt(), make the printed message more explicit that
running e2fsck "MANAULLY" means without the -p or -a options.

In e2fsck, if a disconnected inode is zero-length, offer to clear it
instead of offering to connect it to lost+found.

In e2fsck, if a filesystem was just unmounted uncleanly, and needs
e2fsck to be run over it, change e2fsck to explicitly display this
fact.

For dumpe2fs and e2fsck, cause the -V option to print out which
version of the ext2fs library is actually getting used.  (This will
help detect mismatches of using a 1.06 utility with a 1.05 library,
etc.)

Programmers' notes:
-------------------

EXT2_SWAP_BYTES was changed to EXT2_FLAG_SWAP_BYTES, which better fits
the naming convention.

In ext2fs_initialize(), make sure the description for the inode bitmap
is correctly initialize.

Fixed minor type typo in ext2fs_allocate_generic_bitmap();

E2fsprogs 1.05 (September 7, 1996)
==================================

Add support for new fields in the ext2 superblock --- volume name,
volume UUID, and last mounted field.  Dumpe2fs displays these fields,
tune2fs and mke2fs allows you to set them.  E2fsck will automatically
generate a UUID for those volumes that don't have them.  

Put in support for e2fsck to recognize HURD specific ext2 features ---
most notably, the translator block.  The e2fsprogs tools will now use
the creator_os field in the superblock to correctly handle different
OS-specific variants of the ext2 filesystem.

E2fsck now fixes inodes which have a the deletion time set, but which
have a non-zero i_link_count field by offering to clear the deletion
time.  Previously e2fsck assumed that the inode was deleted (per 0.3c
ext2 kernel behavior) and offered to unlink the file.

If e2fsck sets the clean bit, but nothing else, set the exit code
FSCK_NONDESTRUCT.  After all, e2fsck did fix a filesystem error --- it
set the filesystem valid bit when it was previously cleared.  :-) This
was needed to make the HURD fsck driver happy.

If the  user  refuses to attach an  unattached  inode, e2fsck  will no
longer set the inode's link count.  Otherwise, the  inode would end up
getting marked as unused, which might cause loss of data later.

Make the message issued by e2fsck when the superblock is corrupt less
confusing for users.  It now mentions that another reason for the
"corrupt superblock" message might be that the partition might not be
an ext2 filesystem at all (it might swap, msdos filesystem, ufs, etc.)

Make the libext2 library more robuest so that e2fsck won't coredump on
an illegal superblock where the blocksize is zero.  (f_crashdisk is
the test case).

By default, create filesystems where the default checkinterval is 6
months (180 days).  Linux servers can be robust enough that 20 reboots
can be a long, long time.

Added configure flag --enable-old-bitops, which forces the bitops to
use the old (native) bitmask operations.  By default on the sparc
platform, the standard ext2 bit ordering is now used.

Added a new feature to e2fsck to byte-swap filesystems; this can be
used to convert old m68k filesystems to use the standard byte-order
storage for the superblock, inodes, and directory blocks.  This
function is invoked by using the '-s' option to e2fsck.

Debugfs's "dump" command has been enhanced so that it writes out the
exact size of the file so that the nulls at the end of the file are
eliminated.  The command also accept a new "-p" option which will
attempt preserve to preserve the ownernship, permissions, and
file modification/access times.

Debugfs has two new options, -f and -R.  The -R option allows the user
to execute a single debugfs command from the command line.  The -f
option allows the user to specify a "command file" containing debugfs
commands which will get executed.

Dumpe2fs now pretty prints the check interval, instead of just
printing the check interval as a number of seconds.

Fix bugs in debugfs: the params command when no filesystem is opened
no longer causes a core dump.  It is now possible to unlink a file
when a pathame containing a '/' is specified.

Tune2fs has a new -C option which sets the number of times the
filesystem has been mounted.

Fix the chattr '-v' option so that it actually works.  Chattr was
being buggy about the -v option parsing.

Programmers' notes:
-------------------

The directory lib/uuid contains a set of library routines to generate
DCE compatible UUIDs.  

Extended ext2fs_namei() to handle symbolic links.  Added new function
ext2fs_nami_follow() which will follow last symbolic link in the case
where the pathname points to a sym link.

The ext2fs_block_iterate function will now return the HURD translator
block, if present.  The new flag BLOCK_FLAG_DATA_ONLY will cause the
iterator to return data blocks only.  The ext2fs.h file now defines
constants BLOCK_COUNT_IND, BLOCK_COUNT_DIND, BLOCK_COUNT_TIND, and
BLOCK_COUNT_TRANSLATOR, which are the magic values passed in the block
count field of the iterator callback function.

The test script driver now takes an optional second argument, which is
the test case to be run.  This allows you to run a test case without
needing to run the entire test suite.

On Linux ELF systems, install the .so files in the correct places
(/usr/lib).  The .so files must be stored in the same directory as the
.a files.

Fixed miscellaneous HURD compilation issues with header file being
included in the right order.

Fixed debugfs so that it resets optind to zero, not one, since setting
optind to zero is more correct.


E2fsprogs 1.04 (May 16, 1996)
=============================

First "official" (1.03 was a limited release only) to support building
e2fsprogs under Linux 2.0 kernels (as well as late model 1.3 and 1.99
kernels).

This package includes a RPM specs file, that it can be built using the
RedHat Package Manager.

E2fsck now prints a hint that if there are lots of incorrectly located
inode bitmaps, block bitmaps, and inode table blocks, the user might
want to try using e2fsck -b 8193 first, to see if that fares any
better.

For ext2 filesystem written with the hurd, debugfs will now print out
the translator field when printing an inode structure.

Lots of miscellaneous linking/installation cleanups:

  Libraries are now linked using a relative pathname, instead of
  relying on -L working correct.  It doesn't, in many cases, including
  current versions of GNU ld.  This guarantees that the build tree is
  linking with the right libraries, instead of the ones installed in
  /usr/lib.

  Header files, man pages, and the et/ss shell scripts are now
  generated using a custom substitution script, instead of relying on
  the configure script.  This prevents needless recompilation of
  files; in addition, the custom substitution script is much faster.

  e2fsck may now be linked dynamically, by using the
  --enable-dynamic-e2fsck flag to configure.  This is not recommended,
  since it increases e2fsck's dependence on other files, but some
  people need to save disk space, and other critical programs on their
  systems were being linked dynamically anyway.

  Programs such as fsck which didn't need to be linked against
  libext2fs (or mke2fs which didn't need to be linked against libe2p)
  only link against libraries they actually need.  Otherwise, those
  programs would require the presense of libraries that otherwise
  could be removed from a rescuse diskette.

  The ss include files are now installed correctly so they can
  actually be used by another package.

  If the profiling libraries are built, they are now installed on a
  "make install-libs".


E2fsprogs 1.03 (March 27, 1996)
===============================

Change the m68k bit numbering for bitmasks to match the bit numbering
used by all other ext2 implementations.  (This change was requested by
the m68k kernel development team.)

Support (in-development) filesystem format revision which supports
(among other things) dynamically sized inodes.

Fixed a bug in the ext2 library so that an intelligent error is
returned if mke2fs is run with a ridiculously small number of blocks
for a partition.

Fixed a bug in the ext2 library which required that the device be
openable in read/write mode in order to determine its size.  This
caused e2fsck -n to require read/write access when it was not
previously necessary.

Fixed a bug in e2fsck which casued it to occasionally fail the test
suite depending on which version of the floating point library it was
using.

Fixed a bug in e2fsck so that it now halts with a fatal error when
certain superblock consistency checks fail.  Previously it continued
running e2fsck, with some potential confusing/damaging consequences.

Added new flag to fsck which allows the root to be checked in parallel
with other filesytems.  This is not the safest thing in the world to
do, but some system administrators really wanted it.

Fixed -Wall flames in lib/ss.


E2fsprogs 1.02 (January 16, 1996)
=================================

Fix to allow e2fsprogs to be compiled on recent 1.3 (pl45+) kernels.

Change e2fsck to print statistics of how many non-contiguous files are
on the system.  Note that a file which is larger than 8k blocks, it is
guaranteed to be non-contiguous.

In mke2fs, print a warning message if a user tries to format a whole
disk (/dev/hda versus /dev/hda1).  If a user really wants to format a
whole disk, the -F (force) option forces mke2fs to format a whole disk
as a filesytem.

Fix a bug in fsck where in some cases it might start checking
partitions in the next pass before it finishes checking partitions in
the current pass.  This still won't cause two partitions on the same
disk will be checked, so it's rarely a problem in real life.

Patch lsattr so that it won't hang when checking a named pipe.

Minor compilation fixes:
	* Fix the order of libraries that were linked in debugfs.
	* Allow the sources to be compiled with -ansi turned on.
