/* Description: Looks up the scsi_device with the specified @lun for a given @starget. 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_by_target(struct scsi_target *starget, uint lun)
/* Description: Looks up the scsi_device with the specified @lun for a given @starget. 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_by_target(struct scsi_target *starget, uint lun)
{
	struct scsi_device *sdev;
	struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
	unsigned long flags;
	spin_lock_irqsave(shost->host_lock, flags);
	sdev = __scsi_device_lookup_by_target(starget, lun);
	if (sdev && scsi_device_get(sdev))
		sdev = NULL;
	spin_unlock_irqrestore(shost->host_lock, flags);
	return sdev;
}