@@ -3676,10 +3676,13 @@ static int sd_start_stop_device(struct scsi_disk *sdkp, int start)
static void sd_shutdown(struct device *dev)
{
struct scsi_disk *sdkp = dev_get_drvdata(dev);
+ struct scsi_device *sdp;
if (!sdkp)
return; /* this can happen */
+ sdp = sdkp->device;
+
if (pm_runtime_suspended(dev))
return;
@@ -3692,6 +3695,10 @@ static void sd_shutdown(struct device *dev)
sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
sd_start_stop_device(sdkp, 0);
}
+
+ mutex_lock(&sdp->state_mutex);
+ scsi_device_set_state(sdp, SDEV_DEL);
+ mutex_unlock(&sdp->state_mutex);
}
static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
Set the state to deleted in sd_shutdown so that the attached LLD doesn't get new I/O (can happen when in kexec for example) later after LLD's shutdown function has been called. Signed-off-by: Tomas Henzl <thenzl@redhat.com> --- drivers/scsi/sd.c | 7 +++++++ 1 file changed, 7 insertions(+)