Btrfs: Avoid unplug storms during commit
authorChris Mason <chris.mason@oracle.com>
Fri, 7 Nov 2008 23:22:45 +0000 (18:22 -0500)
committerChris Mason <chris.mason@oracle.com>
Fri, 7 Nov 2008 23:22:45 +0000 (18:22 -0500)
commit5f2cc086ccab27ac5252b3883ac004347860b4c7
tree5d9d1a5ebce044fabf6491e454af60289895bba5
parent42e70e7a2f9d96fd843723fa46d5121cb3e551d0
Btrfs: Avoid unplug storms during commit

While doing a commit, btrfs makes sure all the metadata blocks
were properly written to disk, calling wait_on_page_writeback for
each page.  This writeback happens after allowing another transaction
to start, so it competes for the disk with other processes in the FS.

If the page writeback bit is still set, each wait_on_page_writeback might
trigger an unplug, even though the page might be waiting for checksumming
to finish or might be waiting for the async work queue to submit the
bio.

This trades wait_on_page_writeback for waiting on the extent writeback
bits.  It won't trigger any unplugs and substantially improves performance
in a number of workloads.

This also changes the async bio submission to avoid requeueing if there
is only one device.  The requeue just wastes CPU time because there are
no other devices to service.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/transaction.c
fs/btrfs/volumes.c