ext3-2.4-0.9.6

Andrew Morton
2001-08-12T01:40:36Z

Patch against linux-2.4.8 is at

http://www.uow.edu.au/~andrewm/linux/ext3/

The only changes here are merging up to 2.4.8 and the bigendian
fix.

linux-2.4.8-ac1 currently has ext3-0.9.3 which has no known
crash-worthy bugs, but is old. I'm about to send Alan a diff
which takes -ac up to 0.9.6. The changes between 0.9.3 and
0.9.6 may be summarised as:

- Simplify the handling of synchronous operations (O_SYNC, fsync(),
chattr +S, etc).

- Fix a couple of places where we're not syncing writes when we should.

- Implement batching of synchronous operations: when multiple threads
want to perform synchronous writes we allow the threads to block together
and all their writes happen in the same transaction. Speeds things up
muchly.

- Implement support for external journal devices. This is experimental
at this stage. It works fine, but the operational interfaces will change.
At present the external journal device is not "mounted" when we're using
it and it really should be.

- ext3 has for a long time had developer code which allows the target device
to be turned read-only at the disk device driver level a certain number
of jiffies after the fs was mounted. This is to allow scripted testing
of crash recovery. This facility has been extended to support two devices;
one for the filesystem and one for the external journal device.

- Accelerate an O(N^2) algorithm in log_do_checkpoint().

- Accelerate an O(N^2) algorithm in journal_commit_transaction().

- Rate-limit some error messages which can come out when we're
hopelessly out of memory.

- Honour __GFP_WAIT in journal_try_to_free_buffers(). The fs is supposed
to perform synchronous writeout on the second pass of page_launder() and
we weren't doing that - we were starting all IO async. The net effect of
this change is to decrease throughout with dbench by 10-20%, but system
CPU time goes from 60% to 30%. It's the right thing to do...