+++ /dev/null
-From: Hannes Reinecke <hare@suse.de>
-Subject: Skip deleted devices in __scsi_device_lookup_by_target()
-References: bnc#465346
-
-__scsi_device_lookup_by_target() will always return
-the first sdev with a matching LUN, regardless of
-the state. However, when this sdev is in SDEV_DEL
-scsi_device_lookup_by_target() will ignore this
-device and so any valid device on the list after
-the deleted device will never be found.
-So we have to modify __scsi_device_lookup_by_target()
-to skip any device in SDEV_DEL.
-
-Signed-off-by: Hannes Reinecke <hare@suse.de>
-
-diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
-index f8b79d4..537bb92 100644
---- a/drivers/scsi/scsi.c
-+++ b/drivers/scsi/scsi.c
-@@ -1099,7 +1099,8 @@ EXPORT_SYMBOL(__starget_for_each_device);
- * Description: Looks up the scsi_device with the specified @lun for a given
- * @starget. The returned scsi_device does not have an additional
- * reference. You must hold the host's host_lock over this call and
-- * any access to the returned scsi_device.
-+ * any access to the returned scsi_device. A scsi_device in state
-+ * SDEV_DEL is skipped.
- *
- * Note: The only reason why drivers should use this is because
- * they need to access the device list in irq context. Otherwise you
-@@ -1111,6 +1112,8 @@ struct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *starget,
- struct scsi_device *sdev;
-
- list_for_each_entry(sdev, &starget->devices, same_target_siblings) {
-+ if (sdev->sdev_state == SDEV_DEL)
-+ continue;
- if (sdev->lun ==lun)
- return sdev;
- }