drivers/scsi/sd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Commit aa3998dbeb3a ("ata: libata-scsi: Disable scsi device
manage_system_start_stop") enabled libata EH to manage device power mode
trasitions for system suspend/resume and removed the flag from
ata_scsi_dev_config. However, since the sd_shutdown() function still
relies on the manage_system_start_stop flag, a spin-down command is not
issued to the disk with command "echo 1 > /sys/block/sdb/device/delete"
sd_shutdown() can be called for both system/runtime start stop
operations, so utilize the manage_run_time_start_stop flag set in the
ata_scsi_dev_config and issue a spin-down command during disk removal
when the system is running. This is in addition to when the system is
powering off and manage_shutdown flag is set. The
manage_system_start_stop flag will still be used for drivers that still
set the flag.
Fixes: aa3998dbeb3a ("ata: libata-scsi: Disable scsi device manage_system_start_stop")
Signed-off-by: Salomon Dushimirimana <salomondush@google.com>
Change-Id: I820269189d1a2ee03795b8c0db41aa50c0cb484d
---
drivers/scsi/sd.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index eeaa6af294b81..282000c761f8e 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -4173,7 +4173,9 @@ static void sd_shutdown(struct device *dev)
if ((system_state != SYSTEM_RESTART &&
sdkp->device->manage_system_start_stop) ||
(system_state == SYSTEM_POWER_OFF &&
- sdkp->device->manage_shutdown)) {
+ sdkp->device->manage_shutdown) ||
+ (system_state == SYSTEM_RUNNING &&
+ sdkp->device->manage_runtime_start_stop)) {
sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
sd_start_stop_device(sdkp, 0);
}
--
2.50.1.470.g6ba607880d-goog
Commit aa3998dbeb3a ("ata: libata-scsi: Disable scsi device
manage_system_start_stop") enabled libata EH to manage device power mode
trasitions for system suspend/resume and removed the flag from
ata_scsi_dev_config. However, since the sd_shutdown() function still
relies on the manage_system_start_stop flag, a spin-down command is not
issued to the disk with command "echo 1 > /sys/block/sdb/device/delete"
sd_shutdown() can be called for both system/runtime start stop
operations, so utilize the manage_run_time_start_stop flag set in the
ata_scsi_dev_config and issue a spin-down command during disk removal
when the system is running. This is in addition to when the system is
powering off and manage_shutdown flag is set. The
manage_system_start_stop flag will still be used for drivers that still
set the flag.
Fixes: aa3998dbeb3a ("ata: libata-scsi: Disable scsi device manage_system_start_stop")
Signed-off-by: Salomon Dushimirimana <salomondush@google.com>
---
Changes in v3:
- Removed unnecessary tag
drivers/scsi/sd.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index eeaa6af294b81..282000c761f8e 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -4173,7 +4173,9 @@ static void sd_shutdown(struct device *dev)
if ((system_state != SYSTEM_RESTART &&
sdkp->device->manage_system_start_stop) ||
(system_state == SYSTEM_POWER_OFF &&
- sdkp->device->manage_shutdown)) {
+ sdkp->device->manage_shutdown) ||
+ (system_state == SYSTEM_RUNNING &&
+ sdkp->device->manage_runtime_start_stop)) {
sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
sd_start_stop_device(sdkp, 0);
}
--
2.50.1.470.g6ba607880d-goog
On 7/24/25 2:45 PM, Salomon Dushimirimana wrote: > Commit aa3998dbeb3a ("ata: libata-scsi: Disable scsi device > manage_system_start_stop") enabled libata EH to manage device power mode > trasitions for system suspend/resume and removed the flag from > ata_scsi_dev_config. However, since the sd_shutdown() function still > relies on the manage_system_start_stop flag, a spin-down command is not > issued to the disk with command "echo 1 > /sys/block/sdb/device/delete" > > sd_shutdown() can be called for both system/runtime start stop > operations, so utilize the manage_run_time_start_stop flag set in the > ata_scsi_dev_config and issue a spin-down command during disk removal > when the system is running. This is in addition to when the system is > powering off and manage_shutdown flag is set. The > manage_system_start_stop flag will still be used for drivers that still > set the flag. > > Fixes: aa3998dbeb3a ("ata: libata-scsi: Disable scsi device manage_system_start_stop") > Signed-off-by: Salomon Dushimirimana <salomondush@google.com> > --- > Changes in v3: > - Removed unnecessary tag > > drivers/scsi/sd.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c > index eeaa6af294b81..282000c761f8e 100644 > --- a/drivers/scsi/sd.c > +++ b/drivers/scsi/sd.c > @@ -4173,7 +4173,9 @@ static void sd_shutdown(struct device *dev) > if ((system_state != SYSTEM_RESTART && > sdkp->device->manage_system_start_stop) || > (system_state == SYSTEM_POWER_OFF && > - sdkp->device->manage_shutdown)) { > + sdkp->device->manage_shutdown) || > + (system_state == SYSTEM_RUNNING && > + sdkp->device->manage_runtime_start_stop)) { > sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n"); > sd_start_stop_device(sdkp, 0); > } Runtime power management is not related at all to deleting a LUN through sysfs. This patch makes it impossible to understand the sd_shutdown() implementation without studying the ATA subsystem and its history. Additionally, this patch makes the documentation of .manage_runtime_start_stop incorrect. There are only two drivers that set .manage_runtime_start_stop: libata and the unmaintained sbp2 driver. Has it been considered to test sdkp->device->is_ata instead of sdkp->device->manage_runtime_start_stop? Thanks, Bart.
On 7/29/25 00:47, Bart Van Assche wrote: > On 7/24/25 2:45 PM, Salomon Dushimirimana wrote: >> Commit aa3998dbeb3a ("ata: libata-scsi: Disable scsi device >> manage_system_start_stop") enabled libata EH to manage device power mode >> trasitions for system suspend/resume and removed the flag from >> ata_scsi_dev_config. However, since the sd_shutdown() function still >> relies on the manage_system_start_stop flag, a spin-down command is not >> issued to the disk with command "echo 1 > /sys/block/sdb/device/delete" >> >> sd_shutdown() can be called for both system/runtime start stop >> operations, so utilize the manage_run_time_start_stop flag set in the >> ata_scsi_dev_config and issue a spin-down command during disk removal >> when the system is running. This is in addition to when the system is >> powering off and manage_shutdown flag is set. The >> manage_system_start_stop flag will still be used for drivers that still >> set the flag. >> >> Fixes: aa3998dbeb3a ("ata: libata-scsi: Disable scsi device manage_system_start_stop") >> Signed-off-by: Salomon Dushimirimana <salomondush@google.com> >> --- >> Changes in v3: >> - Removed unnecessary tag >> >> drivers/scsi/sd.c | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c >> index eeaa6af294b81..282000c761f8e 100644 >> --- a/drivers/scsi/sd.c >> +++ b/drivers/scsi/sd.c >> @@ -4173,7 +4173,9 @@ static void sd_shutdown(struct device *dev) >> if ((system_state != SYSTEM_RESTART && >> sdkp->device->manage_system_start_stop) || >> (system_state == SYSTEM_POWER_OFF && >> - sdkp->device->manage_shutdown)) { >> + sdkp->device->manage_shutdown) || >> + (system_state == SYSTEM_RUNNING && >> + sdkp->device->manage_runtime_start_stop)) { >> sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n"); >> sd_start_stop_device(sdkp, 0); >> } > > Runtime power management is not related at all to deleting a LUN through > sysfs. This patch makes it impossible to understand the sd_shutdown() > implementation without studying the ATA subsystem and its history. > Additionally, this patch makes the documentation of > .manage_runtime_start_stop incorrect. > > There are only two drivers that set .manage_runtime_start_stop: libata > and the unmaintained sbp2 driver. Has it been considered to test > sdkp->device->is_ata instead of sdkp->device->manage_runtime_start_stop? I would rather prefer to not spread the use of device->is_ata further than it already is. We are not even supposed to be needing that one in the first place, but SAT is not a perfect specification. But nevertheless, feel free to send cleanup patches to make this code prettier :) -- Damien Le Moal Western Digital Research
Salomon, > Commit aa3998dbeb3a ("ata: libata-scsi: Disable scsi device > manage_system_start_stop") enabled libata EH to manage device power > mode trasitions for system suspend/resume and removed the flag from > ata_scsi_dev_config. However, since the sd_shutdown() function still > relies on the manage_system_start_stop flag, a spin-down command is > not issued to the disk with command "echo 1 > > /sys/block/sdb/device/delete" Applied to 6.17/scsi-staging, thanks! -- Martin K. Petersen
On 7/25/25 06:45, Salomon Dushimirimana wrote: > Commit aa3998dbeb3a ("ata: libata-scsi: Disable scsi device > manage_system_start_stop") enabled libata EH to manage device power mode > trasitions for system suspend/resume and removed the flag from > ata_scsi_dev_config. However, since the sd_shutdown() function still > relies on the manage_system_start_stop flag, a spin-down command is not > issued to the disk with command "echo 1 > /sys/block/sdb/device/delete" > > sd_shutdown() can be called for both system/runtime start stop > operations, so utilize the manage_run_time_start_stop flag set in the > ata_scsi_dev_config and issue a spin-down command during disk removal > when the system is running. This is in addition to when the system is > powering off and manage_shutdown flag is set. The > manage_system_start_stop flag will still be used for drivers that still > set the flag. > > Fixes: aa3998dbeb3a ("ata: libata-scsi: Disable scsi device manage_system_start_stop") > Signed-off-by: Salomon Dushimirimana <salomondush@google.com> Tested-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: Damien Le Moal <dlemoal@kernel.org> -- Damien Le Moal Western Digital Research
© 2016 - 2025 Red Hat, Inc.