For the scsi-mq case, ensure that the request has been started before returning it from scsi_find_tag(). This is akin to the ->special check for the non-mq case, it ensures that the request has been setup and issued.
Signed-off-by: Jens Axboe <ax...@fb.com> --- include/scsi/scsi_tcq.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h index b27977e8aaed..8634cab61aeb 100644 --- a/include/scsi/scsi_tcq.h +++ b/include/scsi/scsi_tcq.h @@ -35,8 +35,15 @@ static inline struct scsi_cmnd *scsi_find_tag(struct scsi_device *sdev, int tag) struct request *req; if (tag != SCSI_NO_TAG) { - if (shost_use_blk_mq(sdev->host)) - return scsi_mq_find_tag(sdev->host, tag); + if (shost_use_blk_mq(sdev->host)) { + struct scsi_cmnd *scmd; + + scmd = scsi_mq_find_tag(sdev->host, tag); + if (blk_mq_request_started(scmd->request)) + return scmd; + + return NULL; + } req = blk_queue_find_tag(sdev->request_queue, tag); return req ? (struct scsi_cmnd *)req->special : NULL; -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html