Any device might be setting a queuedata structure, so we need to check if the queuedata really belongs to a SCSI device before proceeding. Signed-off-by: Hannes Reinecke <hare@xxxxxxxx> --- drivers/scsi/scsi_dh.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/scsi_dh.c b/drivers/scsi/scsi_dh.c index b8d3b97..da104ed 100644 --- a/drivers/scsi/scsi_dh.c +++ b/drivers/scsi/scsi_dh.c @@ -226,7 +226,9 @@ static struct scsi_device *get_sdev_from_queue(struct request_queue *q) spin_lock_irqsave(q->queue_lock, flags); sdev = q->queuedata; - if (!sdev || !get_device(&sdev->sdev_gendev)) + if (!sdev || + !scsi_is_sdev_device(&sdev->sdev_gendev) || + !get_device(&sdev->sdev_gendev)) sdev = NULL; spin_unlock_irqrestore(q->queue_lock, flags); -- 1.8.5.6