Changes in this release
-----------------------

0.0.6b:

Fix orphan list handling:
 * Make sure we reserve inode writes before updating the orphan lists
 * Don't read orphan list data structures until we have the superblock lock
 * Fix reading of revoke blocks so we don't accidentally revoke the 
   superblock updates of the orphan list head during recovery.
Should cure the reports of hanging during orphan list recovery after a crash.

0.0.6a:

Fix typo: ordered and writeback data modes were working the wrong way
around.

Rework the dirty buffer handling: dirty flags are now held in a private
flag while buffers are journaled, so the block device mid-layers see
those buffers as clean and non-flushable.

Fix some truncate recovery problems: not all filesystem state was being
flushed in large truncates when we had to split the truncate over
multiple transactions, so the on-disk inode might be slightly
inconsistent after a crash.

Clear the dirty bits when forgetting buffers (prevents aborted truncates
from leaving behind zeroed-out indirect buffers).


0.0.5e:

Added barrier support: it is now possible to suspend all journal
activity on a filesystem temporarily, forcing the journal into a clean
state.

Added support for forcing data-journaling on a per-inode basis.  Enable
this on the quota files.

Fix O_SYNC for the writeback data journaling mode.

In ext3_orphan_del, lock the superblock _before_ testing the orphan list
to make the entire operation atomic.

When rename overwrites and deletes a file, make sure that file gets put
on the orphan list.

Fix the initialisation of a new journal: make sure that the journal
superblock is pre-zeroed along with the rest of the journal.

Don't mount or remount a journal with unrecognised features.

0.0.5d:

Fix a major oops/hang bug when running with quotas.

The other fixes are mostly minor:

Forcibly clear the journal of stale recovery information on mount if the
NEEDS_RECOVERY flag is not set.

Cleanups from Andreas for the ext3 superblock revision/flags setting.

Fix a buffer_head leak on disk full.

Close a window during truncate where a crash could leak disk blocks.

Fix a posssible hang when recovering a partially-completed truncate.

Fix a couple of places where we had compiler incompatibilities if
running on non-Intel architectures or when compiling with gcc-2.7.2.

0.0.5c:

Fix a major kernel recovery bug which could prevent recovery if you
crashed too soon after first mouting a filesystem.

Fixed up all of the unnecessary recovery and journal warnings at boot
time.

Merged in Andreas's flags-handling cleanups.

Made the V2 data mode default to ordered, as documented (5b actually
defaulted to writeback).

Add e2fsck support for recovering the V2 superblocks.

0.0.5b:

The first functionally complete metadata-only journaling code is stable
enough for an initial public test release.

This release implements all of the revoke functionality necessary to
prevent old metadata blocks in the log from being replayed on top of
data if the metadata blocks are freed and reallocated as data.

Everything should work except for quotas (which will still be able to
get out of sync after a crash under some circumstances).

0.0.5a:

** WARNING --- ONLY THE FULLY-JOURNALED MODE IS STABLE IN THIS RELEASE.
** MOUNT WITH "-o data=journal" UNLESS YOU ARE DOING TESTING ON A
** DISPOSABLE FILESYSTEM.

Developer snapshot: stable *PARTIAL* release of new journal format.

This is for testing only: it has the same missing recovery feature as
0.0.4c (see below) but should otherwise be stable.

This release includes the new journal format required to add "feature
flags" to the journal, allowing for transarent expansion of the journal
capabilities in the future.  The revoke code necessary for safe metadata-
only journaling requires this format change.

New mount options:

    "mount -o journal=update"
	Mounts a filesystem with a Version 1 journal, upgrading the
	journal dynamically to Version 2.

    "mount -o data=journal"
	Journals all data and metadata, so data is written twice.  This
	is the mode which all prior versions of ext3 used.  

    "mount -o data=ordered"
	Only journals metadata changes, but data updates are flushed to
	disk before any transactions commit.  Data writes are not atomic
	but this mode still guarantees that after a crash, files will
	never contain stale data blocks from old files.

    "mount -o data=writeback"
	Only journals metadata changes, and data updates are entirely
	left to the normal "sync" process.  After a crash, files will
	may contain stale data blocks from old files: this mode is
	exactly equivalent to running ext2 with a very fast fsck on
	reboot. 

Ordered and Writeback data modes require a Version 2 journal: if you do
not update the journal format then only the Journaled data will be
allowed.

The default data mode is Journaled for a V1 journal, and Ordered for V2.

0.0.4c: 

Stable *PARTIAL* release of metadata-only journaling.

This is for testing only.  ext3 is now running reliably for me with
metadata-only journaling, so this snapshot is to open testing up to a
wider audience.  However, there is one critical thing missing: a new
type of journal entry is required to make recovery from crashes safe
for metadata-only journaling.  The 0.0.5 ext3 series will include the
new jfs superblock type to support this.  ext3-0.0.4c CAN DESTROY DATA
ON RECOVERY if you crash, because of the lack of the new log records.

This is a testing-only release.  It should never corrupt metadata and
should work during normal stress testing.

No performance tuning has been done on this release so far.  Informal
performance measurements range from 100% of ext2 performance (doing
simple linear writes to a single file) to 75% of ext2 performance (for
30-client dbench runs on a restricted-memory machine).

0.0.4b: 

Internal development snapshot.

in 0.0.4a:

First unstable snapshot of metadata-only journaling.

in 0.0.3b:

Development release.

Only kernel change: add protection against trying to specify a deleted
inode as the journal.

This is the first release to include e2fsprogs-1.20-WIP and a working
quota package in the build to provide user-level support for fsck and
quotas.

in 0.0.3a:

Development release. 

Adds new journal_abort() API.  journal_start and journal_stop can now
return errors if the journal has been aborted.  Aborting the journal
results in all current transactions running to completion, at which
point they will return -EIO.  Future transactions will return -EROFS.

The ext3_panic and ext3_error filesystem fatal error mechanisms will use
the journal_abort to fail cleanly, as will certain exceptional journal
internal errors (such as journal IO failures and unrecoverable
out-of-memory errors).

A second new journal API allows an error code to be set in the journal
on journal_abort().  ext3_error() can set this in order to record the
detection of errors on the filesystem without having to write back the
superblock (which we cannot necessarily do due to write ordering
constraints).

Added a few bug fixes:

 * Make sure that no new transactions get started once the filesystem
   has been remounted readonly (there was previously a window between
   checking the readonly flag and starting the transaction)

 * Added a one-line orphan list handling fix from Andreas Dilger:
   removing and reading an inode on the orphan list (eg. doing multiple
   truncates on a file) could corrupt the list.

 * Quota fix --- add the capability for quotas to be marked
   writethrough, to make sure that we journal all quota updates
   immediately rather than waiting for deferred quota file writeback.
   (This also prevents recursive transactions from crossing filesystems
   if a transaction tries to reuse an inode with dirty quota entries
   attached to it and flushes those to disk.)

in 0.0.2f:

Fix two bugs introduced in 0.0.2e:
 directory corruption bug on extending directory files
 fix possible OOPS on illegal directory operations

Include "rmdir" operations in the orphan-handling code

in 0.0.2e:

Port forward to current (2.2.17pre9, and Red Hat errata 2.2.16-3)
kernels

Merge in a number of ext2 fixes from 2.2.15+:
 * NFS versioning 
 * Set directory type information correctly on sockets

Fix a number of buffer leaks in recovery (prevents set_blocksize errors
on mounting filesystems)

sync(2) waits for current transactions correctly

Set the superblock s_dirt flag on all transaction completions

Fixed the order of asserts and buffer writes in fs/buffer.c: this was
causing false assertion failures on Mylex raid controllers

Delete the filesystem commit timer on unmount in all cases

Include Andreas Dilger's implementation of the "orphan list" code:
  The orphan list maintains an on-disk list of inodes needing cleaned up
  on recovery, including:
  * Deletion of unlinked, but still opened, files after a reboot;
  * Completion after recovery of truncates which were in progress but 
    which had to be split across a transaction boundary

in 0.0.2d:

Port forward to 2.2.15pre15

Fixed a missing lock_journal in journal_forget() (this could potentially
confuse the transaction engine when doing deletes under heavy memory
pressure).

Merged in a small directory IO error handling fix from ext2

Included Andrea Arcangeli's elevator IO scheduling changes.  This should
improve the performance of ext3 on non-SCSI devices substantially.


in 0.0.2c:

Lots of fixes to the way we set the filesystem's NEEDS_RECOVERY flag.
It should basically get this right now.  This flag is the thing that
prevents you from accidentally running e2fsck on a filesystem which
still needs kernel attention after a crash or unclean shutdown.

Fixed releasing of the journal inode when unmounting a readonly ext3
filesystem.


in 0.0.2b:

Fixed a lockup when the VFS is trying to reclaim dirty inodes


in 0.0.2a:

Fixed a nasty bug in truncate.  If truncate overflowed the
transaction, the transaction state machine could get seriously
confused.

0.0.2:

Bug fixes.  Lots of bug fixes.  Buckets of them.

It works on >1K blocksize filesystems.  It recovers reliably.  It
survives log wraps properly during recovery.  mknod() works properly: it
will no longer turn /dev into a socket if used on your root filesystem.  

This one survives under load quite happily.  A 50-client dbench run
completes reliably.

So basically, this is the first usable ext3 release.

Note that there are two major places where the implementation is not
complete: clean handling of all errors (in particular out-of-memory and
IO errors), and performance (there is still a lot of debugging code in
place, and all data is journaled as part of the testing cycle).  But it
is usable: I've been running it on all of my laptop's filesystems for
over a week now.

