xfs simplify and speed up direct I/O completions
authorChristoph Hellwig <hch@infradead.org>
Sun, 18 Jul 2010 21:17:11 +0000 (21:17 +0000)
committerAlex Elder <aelder@sgi.com>
Mon, 26 Jul 2010 21:09:19 +0000 (16:09 -0500)
commit209fb87a259ead17e966627b7f053d16a96898da
tree2cb348a32e2c1488cfb14189e975bcbcb6a0695f
parentfb511f2150174b18b28ad54708c1adda0df39b17
xfs simplify and speed up direct I/O completions

Our current handling of direct I/O completions is rather suboptimal,
because we defer it to a workqueue more often than needed, and we
perform a much to aggressive flush of the workqueue in case unwritten
extent conversions happen.

This patch changes the direct I/O reads to not even use a completion
handler, as we don't bother to use it at all, and to perform the unwritten
extent conversions in caller context for synchronous direct I/O.

For a small I/O size direct I/O workload on a consumer grade SSD, such as
the untar of a kernel tree inside qemu this patch gives speedups of
about 5%.  Getting us much closer to the speed of a native block device,
or a fully allocated XFS file.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
fs/xfs/linux-2.6/xfs_aops.c