E2fsprogs 1.20 (May 20, 2001)
=============================

Add support for replaying the ext3 journal purely in user mode,
including handling the orphaned inode list.  Used code contributed by
Andreas Dilger, with bug fixes and the orphaned inode handling done
by Theodore Ts'o.

The mke2fs and tune2fs programs can create or modify a filesystem to
include an ext3 journal.  Tune2fs also can be used to remove an ext3
journal from a filesystem.

E2fsck will now check for the existence of a linked list of orphan
inodes in the superblock, and clear those inodes before starting the
rest of the filesystem check (but after the journal playback).

E2fsck now validates the file descriptor passed to the -C option,
which saves against the completion bar getting written to an
unexpected location, such as the disk being checked.  (Debian
bug/wishlist #55220)

E2fsck will now bump the filesystem revision number from zero to one
if any of the compatibility bits are set.

Fixed a bug where a badly corrupted directory on a big endian system
could cause e2fsck to die with a bus error.  The
ext2fs_read_dir_block() and ext2fs_process_dir_block() functions in
the ext2 library now does alignment sanity checks on the rec_len field
of the directory entry before using it.

The ext2 library has been enhanced to make tune2fs safe to run on
mounted filesystems.  (Users could usually get away with using tune2fs
on mounted filesystems before, but with the advent of ext3 and
journalling, it became important to make tune2fs was *really* safe for
use even when the filesystem being modified is mounted.)  E2label is
now implemented by tune2fs using an argv[0] dispatch, so that e2label
is also now safe for use on mounted filesystems.

Added a new program, e2image, which creates a backup of critical ext2
filesystem data structures.  The generated image file can be examined
using dumpe2fs and debugfs.  In the future, e2fsck will be able to use
the image file to help recover very badly damaged filesystems.

Fixed a number of LFS bugs in e2fsck; very, very large (> 2**42) files
no longer cause e2fsck to bomb out.  Also treat files > 2GB as being
large file when deciding whether or not the filesystem has large files.

Fixed lsattr and chattr so that they work correctly on large files.
(Fixes Debian bug #72690.)

Removed limitation in get_device_size() which imposed a one terabyte
filesystem limitation.  (Most 2.2 kernels still have a signed int
problem which cause 1 TB block device limitation.  Fortunately, the
kernel patches to fix this are much easier than fixing the 2TB
limitation in the kernel.  :-)

A max_mount_count of zero is now treated as if no mount count were
set.  (Previously, no mount count was indicated by using -1, and a
mount count of zero caused e2fsck to always be run.)

Mke2fs supports two new filesystem types largefile and largefile4.

Mke2fs now adds some randomness in s_max_mount_count so that multiple
filesystems won't be all checked at the same time under normal
operations.

Fixed bug in the progress bar printing code which could cause e2fsck
to core dump on an illegal filesystem.

Fixed bug in fsck which could allow more than one instance of e2fsck
to be printing a progress bar.  (Debian bug #65267)

Fsck using a UUID or a LABEL specifier will work even if devfs is
compiled into the kernel and not mounted.  If the pathnames in
/proc/partitions are incorrect, fsck will search /dev for the correct
device (using the new ext2fs_find_block_device library function).
Fsck now also checks the RAID devices first so that they are properly
found when they are in use.  Support has also been added to support
additional IDE disks and the DAC 960 device names.  (Debian bug #94159)

Fixed a bug in fsck which caused it not deal properly with 16
byte long filesystem labels.

Fsck's -t option has been made a lot more flexible.  The semantics for
what happens if a comma-separated list to fsck has been regularized,
and it is now possible to filter what filesystems will get checked
based what is in the filesystem's fstab entry's option field.  (Debian
bug #89483.)

The dumpe2fs program can now print out the group description
information in hex, and also prints the location of the superblock and
block group descriptor for those block groups that have them.

Mke2fs now clears the ext2 superblock before it starts creating a
filesystem, so that the superblock magic number is only written if the
filesystem creation process successfully completes.

The debugfs program's stat command now pretty-prints the blocks used
by an inode so that it's more compact and informative.

The debugfs stats command now uses the same libe2p code (which is used
by dumpe2fs) to print the superblock header information.  This is more
complete, and it avoids a bit of code duplication.

Added a new debugfs command, set_super_value (ssv) which allows the
user to set arbitrary superblock fields.

Debugfs was extended to support inode numbers in hex (by prefixing
them with 0x), and so that modify_inode can set the inode generation
number.  Also, there is now a new function command called logdump
which will dump an ext3 journal.

Fixed a bug in debugfs so that quitting out of the pager doesn't kill
debugfs.

Debugfs's dump command now stops immediately upon reporting a disk
read error.  (Fixed a bug in ext2fs_file_read library routine which
caused debugfs not to stop.)  (Debian bug #79163)

On systems with /proc/mounts (mainly Linux systems), /proc/mounts is
checked before /etc/mtab is used, since /proc/mounts is more likely to
be accurate.

Added portability fixes for Solaris and Linux/ia64.

Various manual pages were clarified and cleaned up.  (Fixed debian
bugs #63442, #67446, and #87216)


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

The e2fsck message printer now supports %Iu and %Ig, which will print
out the inode's user and group owners, respectively.

E2fsprogs now includes its own version of include/linux/ext2_fs.h, so
that no longer dependent on the system having the correct version of
the kernel header files.

Added a new function to libext2, ext2fs_find_block_device(), which
searches the system (i.e., /dev, /devfs, /devices) for a pathname to a
device given its device number.

Added a new function to libext2, ext2fs_sync_device, which centralizes
all of the places which might try to use the BLKFLSBUF or FDFLUSH
ioctls (and usually failing to define them since the system header
files don't usually do this for us, and we're trying to avoid usage of
kernel include files now).

Added new utility programs in tests/progs: random_exercise and
hold_inode.  They aren't built by default; they're useful for
exercising ext3 filesystem code.

Added a new ext2 filesystem flag, EXT2_FLAG_SUPER_ONLY, which causes
the filesystem close functions to only update the superblock, and to
not touch the block group descriptors.  Needed by tune2fs when
modifying a mounted filesystem.

Got rid of struct ext2fs_sb and replaced it with the standard struct
ext2_super_block from include/linux/ext2_fs.h.  Note: this may break
source (but not binary) compatibility of some users of the ext2
library.  Those applications should just simply do a global search and
replace of struct ext2fs_sb with struct ext2_super_block, and include
the new header file <ext2fs/ext2_fs.h> which defines it.

The ino_t type has been renamed ext2_ino_t to protect applications
that attempt to compile -D_FILE_OFFSET_BITS=64, since this
inexplicably changes ino_t(!?).  So we use ext2_ino_t to avoid an
unexpected ABI change.

The Makefiles have been reworked so that "make check" can be run from
the top-level Makefile.

Fix general gcc -Wall complaints and removed dead code.

Remove use of NOARGS, because we assume everyone does ANSI C these
days.

Added build-rpm script from sct.

New functions ext2fs_image_{inode,super,bitmap}_{read,write} added 
to support e2image.

New function ext2fs_flush_icache which must be called if the
application program modifies the inode table blocks without going
through ext2fs_write_inode() interface.

New ext2fs_check_mount_point() function, which will return the mount
point of a device if mounted.

The io_channel abstraction now has an optional interface,
io_channel_write_range, which allows specific byte ranges to be
written.  

The unix_io IO channel now supports write-through caching, so that
journal creation is more efficient.

Added x86 assembly language routines to support byte swapping, to
reduce executable size.

Fixed bug in the utility program subst so that it's possible to
replace a substitution variable with a zero-length string.

Fixed numbering e2fsck pass1 problem numbers; an extra zero had
slipped into some of the problem number.

