On Fri, Jun 07, 2024 at 10:25:07AM +0900, Damien Le Moal wrote: > For scsi devices supporting the Command Duration Limits feature set, the > user can enable/disable this feature use through the sysfs device > attribute cdl_enable. This attribute modification triggers a call to > scsi_cdl_enable() to enable and disable the feature for ATA devices and > set the scsi device cdl_enable field to the user provided bool value. > For SCSI devices supporting CDL, the feature set is always enabled and > scsi_cdl_enable() is reduced to setting the cdl_enable field. > > However, for ATA devices, a drive may spin-up with the CDL feature > enabled by default. But the scsi device cdl_enable field is always > initialized to false (CDL disabled), regardless of the actual device > CDL feature state. For ATA devices managed by libata (or libsas), > libata-core always disables the CDL feature set when the device is > attached, thus syncing the state of the CDL feature on the device and of > the scsi device cdl_enable field. However, for ATA devices connected to > a SAS HBA, the CDL feature is not disabled on scan for ATA devices that > have this feature enabled by default, leading to an inconsistent state > of the feature on the device with the scsi device cdl_enable field. > > Avoid this inconsistency by adding a call to scsi_cdl_enable() in > scsi_cdl_check() to make sure that the device-side state of the CDL > feature set always matches the scsi device cdl_enable field state. > This implies that CDL will always be disabled for ATA devices connected > to SAS HBAs, which is consistent with libata/libsas initialization of > the device. > > Reported-by: Scott McCoy <scott.mccoy@xxxxxxx> > Fixes: 1b22cfb14142 ("scsi: core: Allow enabling and disabling command duration limits") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Damien Le Moal <dlemoal@xxxxxxxxxx> > --- Reviewed-by: Igor Pylypiv <ipylypiv@xxxxxxxxxx> Thank you!