Test cdrom on intel ahci, it will trigger this condition. This is because scsi-mq don' test 'q->dma_drain_size && blk_rq_bytes(rq)' like in blk_peek_request(). Signed-off-by: Jianpeng Ma <majianpeng@xxxxxxxxx> --- drivers/scsi/scsi-mq.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/scsi/scsi-mq.c b/drivers/scsi/scsi-mq.c index 933ba0f..78b05c1 100644 --- a/drivers/scsi/scsi-mq.c +++ b/drivers/scsi/scsi-mq.c @@ -35,6 +35,16 @@ static int scsi_mq_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *rq) sc->device = sdev; sc->sense_buffer = sense_buf; sc->mq_sgl = sg; + + if (q->dma_drain_size && blk_rq_bytes(rq)) { + /* + * make sure space for the drain appears we + * know we can do this because max_hw_segments + * has been adjusted to be one fewer than the + * device can handle + */ + rq->nr_phys_segments++; + } /* * Mark the end of the pre-allocated SGL based upon the * incoming number of physical segments from blk-mq -- 1.7.10.4 ÿôèº{.nÇ+?·?®??+%?Ëÿ±éݶ¥?wÿº{.nÇ+?·¥?{±þÇ,?ø§¶?¡Ü¨}©?²Æ zÚ&j:+v?¨þø¯ù®w¥þ?à2?Þ?¨èÚ&¢)ß¡«a¶Úÿÿûàz¿äz¹Þ?ú+?ù???Ý¢jÿ?wèþf