cam iosched: Use the write queue for BIO_ZONE commands

Use the write queue for BIO_ZONE commands so they can't get executed
ahead of writes that were sent after them. More generally, since they
introduce strong ordering into the list, they need to go to the write
queue (which is the only queue that BIO_ORDERED is honored for at the
moment). In fact, fix mismatch between queueing and dequeueing code by
changing this to queue all non-reads (and non-trims) to the write
queue.

As a side effect this prevents the kernel message:
kernel: Found bio_cmd = 0x9
which cam_iosched_next_bio() emits when finding commands
other than BIO_READ in the read queue.

PR: 221973
Obtained from: ElectroBSD
Submitted by: Fabian Keil
Differential Revision: https://reviews.freebsd.org/D12353
This commit is contained in:
Warner Losh 2017-09-20 21:13:20 +00:00
parent d0d0ad0ae2
commit 84c12dcdd0

View File

@ -1345,8 +1345,7 @@ cam_iosched_queue_work(struct cam_iosched_softc *isc, struct bio *bp)
#endif
}
#ifdef CAM_IOSCHED_DYNAMIC
else if (do_dynamic_iosched &&
(bp->bio_cmd == BIO_WRITE || bp->bio_cmd == BIO_FLUSH)) {
else if (do_dynamic_iosched && (bp->bio_cmd != BIO_READ)) {
if (cam_iosched_sort_queue(isc))
bioq_disksort(&isc->write_queue, bp);
else