Reinstate zvol_taskq to fix aio on zvol
authorChunwei Chen <david.chen@osnexus.com>
Thu, 23 Feb 2017 00:08:04 +0000 (16:08 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 26 Apr 2017 20:54:40 +0000 (13:54 -0700)
commit692e55b8fea00a0d0bd46188d68031292f04e4a8
tree855589ccee3826a5935b3816e4f3d22e6a3b2408
parente815485fe9e1716d92e0e0e1e6e4ce1b95d3bb00
Reinstate zvol_taskq to fix aio on zvol

Commit 37f9dac removed the zvol_taskq for processing zvol requests.
This was removed as part of switching to make_request_fn and was
motivated by a concern at the time over dispatch latency.

However, this also made all bio request synchronous, and caused
serious performance issues as the bio submitter would wait for
every bio it submitted, effectively making the IO depth 1.

This patch reinstate zvol_taskq, and to make sure overlapped I/Os
are ordered properly, we take range lock in zvol_request, and pass
it along with bio to the I/O functions zvol_{write,discard,read}.

In order to facilitate benchmarks a zvol_request_sync module
option was added to switch between sync and async request handling.
For the moment, the default behavior is synchronous but this is
likely to change pending additional testing.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
Closes #5824
include/linux/blkdev_compat.h
man/man5/zfs-module-parameters.5
module/zfs/zvol.c