Andrew Morton's ext2 sync mount speedup. Description:
authorJeff Garzik <jgarzik@mandrakesoft.com>
Thu, 4 Apr 2002 01:16:12 +0000 (20:16 -0500)
committerJeff Garzik <jgarzik@mandrakesoft.com>
Thu, 4 Apr 2002 01:16:12 +0000 (20:16 -0500)
commit9950435bee7ece5d2fa15abd755cf52aa59ca5be
tree28b7f8d2c3a2240a6ad618b4e247f05fd54bf3f6
parentb1a5f6420971b910f690f521bfc6a27620b342af
Andrew Morton's ext2 sync mount speedup.  Description:

At present, when mounted synchronously or with `chattr +S' in effect,
ext2 syncs the indirect blocks for every new block when extending a
file.

This is not necessary, because a sync is performed on the way out of
generic_file_write().  This will pick up all necessary data from
inode->i_dirty_buffers and inode->i_dirty_data_buffers, and is
sufficient.

The patch removes all the syncing of indirect blocks.

On a non-write-caching scsi disk, an untar of the util-linux tarball
runs three times faster.  Writing a 100 megabyte file in one megabyte
chunks speeds up ten times.

The patch also removes the intermediate indirect block syncing on the
truncate() path.  Instead, we sync the indirects at a single place, via
inode->i_dirty_buffers.  This not only means that the writes (may)
cluster better.  It means that we perform much, much less actual I/O
during truncate, because most or all of the indirects will no longer be
needed for the file, and will be invalidated.

fsync() and msync() still work correctly.  One side effect of this
patch is that VM-initiated writepage() against a file hole will no
longer block on writeout of indirect blocks.  This is good.
fs/ext2/ext2.h
fs/ext2/ialloc.c
fs/ext2/inode.c