zvol processing should use struct bio

The main impetus for this patch is the Illumos taskq import. The ZoL
zvol code operated in an interrupt context to take advantage of the IO
elevator and the SPL taskq code was (ab)used to form the bottom half.
The SPL taskq code was designed to be callable in an interrupt context
while the Illumos taskq code was designed to expect the assistance of
the thread thread scheduler. Since Linux's thread scheduler does not
provide that assistance, we must trampoline through the system workqueue
to continue providing the bottom half when using the Illumos taskq code.
This seems unnecessarily complex when we consider that Illumos itself
does not perform this emulation and the recent multiqueue work in Linux
has identified interrupt processing as a major bottleneck on Linux:

http://kernel.dk/systor13-final18.pdf

The entry point for zvol operations is zfs_request(). That is called in
an interrupt context by blk_queue_bio(), which is the kernel's generic
->make_request() handler. Registering our own handler allows us to avoid
this. Comments in the code suggest that this was not done to gain the
benefit of having Linux's IO elevator do merging. However, the DMU
already does write merging while arc_read() should implicitly merge read
IOs because only 1 thread is permitted to fetch the buffer. In addition,
the main consumers of zvols are VMs and iSCSI shares, which have their
own elevators to merge IOs. Furthermore, commercial ZFSOnLinux
distributions report that regular files are more performant than zvols.
That strongly suggests that the original rationale for using Linux'
generic ->make_request() handler was invalid.

Some minor refactoring allows us to register zfs_request() as our
->make_request() handler. This eliminates an obstacle to importing the
Illumos taskq code while giving us several additional benefits:

1. No per zvol spinlocks.
2. No redundant IO elevator processing.
3. Interrupts are disabled only when actually necessary.
4. No redispatching of IOs under heavy load.
5. Linux's page out routines will properly block.
6. Many autotools checks become obsolete.

It is worth noting that the previous zvol code would redispatch IOs when
all zio taskq threads were in use. The consequence being that IOs could
be redispatched and potentially, reordered across barriers. This
explains an obscure IRC report about corruption on zvol-backed iSCSI
shares triggered by a kernel panic during heavy load. It was thought
that the initiator did something wrong, but now it is clear that the
zvol code itself could reorder, which explains the incident.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Remove rq_for_each_segment() autotools check

Signed-off-by: Richard Yao <ryao@gentoo.org>
Remove rq_is_sync() autotools check

Signed-off-by: Richard Yao <ryao@gentoo.org>
Remove blk_end_request() autotools check.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Remove blk_requeue_request() autotools check

Signed-off-by: Richard Yao <ryao@gentoo.org>
Remove blk_fetch_request() autotools check

Signed-off-by: Richard Yao <ryao@gentoo.org>
Remove blk_rq_pos() autotools check

Signed-off-by: Richard Yao <ryao@gentoo.org>
Remove blk_rq_bytes()/blk_rq_sectors autotools checks

Signed-off-by: Richard Yao <ryao@gentoo.org>