On 3/30/23 09:49, 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@xxxxxxxxxx>
---
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);
}
Shouldn't new I/O to the SCSI disk be prevented whether or not the SCSI
disk has been runtime suspended?
Thanks,
Bart.