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 customizable 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 e2fsck 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 environment
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.