]> git.proxmox.com Git - mirror_zfs.git/commit
Fix synchronous behavior in __vdev_disk_physio()
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 24 Sep 2015 23:32:25 +0000 (16:32 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 25 Sep 2015 19:47:31 +0000 (12:47 -0700)
commit5592404784d3125cbeb6df002674867c009c8b48
tree4ae2c1d2e180906e718138b5680c7ca996aeba99
parentef5b2e1048eeeb7a81d932d38e52d897b33fca54
Fix synchronous behavior in __vdev_disk_physio()

Commit b39c22b set the READ_SYNC and WRITE_SYNC flags for a bio
based on the ZIO_PRIORITY_* flag passed in.  This had the unnoticed
side-effect of making the vdev_disk_io_start() synchronous for
certain I/Os.

This in turn resulted in vdev_disk_io_start() being able to
re-dispatch zio's which would result in a RCU stalls when a disk
was removed from the system.  Additionally, this could negatively
impact performance and explains the performance regressions reported
in both #3829 and #3780.

This patch resolves the issue by making the blocking behavior
dependent on a 'wait' flag being passed rather than overloading
the passed bio flags.

Finally, the WRITE_SYNC and READ_SYNC behavior is restricted to
non-rotational devices where there is no benefit to queuing to
aggregate the I/O.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #3652
Issue #3780
Issue #3785
Issue #3817
Issue #3821
Issue #3829
Issue #3832
Issue #3870
config/kernel-bio-rw-syncio.m4 [deleted file]
config/kernel.m4
module/zfs/vdev_disk.c