/* Description: Looks up the scsi_device with the specified @channel, @id, @lun for a given host. The returned scsi_device has an additional reference that needs to be released with scsi_device_put once you're done with it.  */
struct scsi_device* scsi_device_lookup(struct Scsi_Host *shost, uint channel, uint id, uint lun)
/* Description: Looks up the scsi_device with the specified @channel, @id, @lun for a given host. The returned scsi_device has an additional reference that needs to be released with scsi_device_put once you're done with it.  */
struct scsi_device* scsi_device_lookup(struct Scsi_Host *shost, uint channel, uint id, uint lun)
{
	struct scsi_device *sdev;
	unsigned long flags;
	spin_lock_irqsave(shost->host_lock, flags);
	sdev = __scsi_device_lookup(shost, channel, id, lun);
	if (sdev && scsi_device_get(sdev))
		sdev = NULL;
	spin_unlock_irqrestore(shost->host_lock, flags);
	return sdev;
}