scsi: use 'scsi_device_from_queue()' for scsi_dh
The device handler needs to check if a given queue belongs to a scsi device; only then does it make sense to attach a device handler. [mkp: dropped flags] Cc: <stable@vger.kernel.org> Signed-off-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
此提交包含在:
@@ -2231,6 +2231,29 @@ void scsi_mq_destroy_tags(struct Scsi_Host *shost)
|
||||
blk_mq_free_tag_set(&shost->tag_set);
|
||||
}
|
||||
|
||||
/**
|
||||
* scsi_device_from_queue - return sdev associated with a request_queue
|
||||
* @q: The request queue to return the sdev from
|
||||
*
|
||||
* Return the sdev associated with a request queue or NULL if the
|
||||
* request_queue does not reference a SCSI device.
|
||||
*/
|
||||
struct scsi_device *scsi_device_from_queue(struct request_queue *q)
|
||||
{
|
||||
struct scsi_device *sdev = NULL;
|
||||
|
||||
if (q->mq_ops) {
|
||||
if (q->mq_ops == &scsi_mq_ops)
|
||||
sdev = q->queuedata;
|
||||
} else if (q->request_fn == scsi_request_fn)
|
||||
sdev = q->queuedata;
|
||||
if (!sdev || !get_device(&sdev->sdev_gendev))
|
||||
sdev = NULL;
|
||||
|
||||
return sdev;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(scsi_device_from_queue);
|
||||
|
||||
/*
|
||||
* Function: scsi_block_requests()
|
||||
*
|
||||
|
新增問題並參考
封鎖使用者