Message ID | 20230403183910.5485-1-thenzl@redhat.com (mailing list archive) |
---|---|
State | Deferred |
Headers | show |
Series | scsi: sd: mark the scsi device in shutdown as deleted | expand |
Please drop this one, I've sent it by mistake. tomash On 4/3/23 20:39, Tomas Henzl wrote: > Set the state to deleted in sd_shutdown so that the attached LLD > doesn't receive new I/O (can happen when in kexec) 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(+) > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c > index 4f28dd617eca..8095f0302e66 100644 > --- a/drivers/scsi/sd.c > +++ b/drivers/scsi/sd.c > @@ -3694,10 +3694,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; > > @@ -3710,6 +3713,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)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 4f28dd617eca..8095f0302e66 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -3694,10 +3694,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; @@ -3710,6 +3713,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 receive new I/O (can happen when in kexec) 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(+)