Re: [PATCH v2 2/5] ata: libata-scsi: convert dev->sdev to per-LUN array

From: Hannes Reinecke

Date: Thu Apr 23 2026 - 07:05:55 EST


On 4/20/26 14:23, Phil Pemberton wrote:
Multi-LUN ATAPI devices (PD/CD combos, CD changers) share a single
ata_device but expose multiple scsi_devices. The previous single
dev->sdev pointer could only track one LUN, making all other LUNs
invisible to code that operates on sdevs: port detach, suspend/resume,
ACPI uevent, ZPODD, media change notification, and EH teardown.

Replace the scalar struct scsi_device *sdev with a fixed-size array
dev->sdev[ATAPI_MAX_LUN] indexed by LUN number, where ATAPI_MAX_LUN
is 8 (the SCSI-2 ceiling, LUN values 0..7).

Key changes per call site:
- ata_scsi_dev_config: assign sdev to dev->sdev[sdev->lun]
- ata_scsi_sdev_destroy: clear dev->sdev[sdev->lun]; only trigger
ATA-level detach when LUN 0 is destroyed, since removing a higher
LUN should not tear down the underlying ATA device
- ata_port_detach: iterate all LUN slots (high→low)
- ata_scsi_offline_dev: iterate all LUN slots
- ata_scsi_remove_dev: snapshot and remove all LUN slots, then
scsi_remove_device each one outside the lock
- ata_scsi_media_change_notify: send event to all populated LUNs
- ata_scsi_dev_rescan: resume and rescan each populated LUN
- ACPI, ZPODD, ofnode, door-lock: use dev->sdev[0] (LUN 0 remains
canonical for ATA-level operations)
- ata_scsi_scan_host: uses dev->sdev[0] for the existing LUN-0
add/retry path

For single-LUN devices (the vast majority), only dev->sdev[0] is ever
populated and the additional slots remain NULL.

Signed-off-by: Phil Pemberton <philpem@xxxxxxxxxxxxx>
---
drivers/ata/libata-acpi.c | 4 +-
drivers/ata/libata-core.c | 10 ++-
drivers/ata/libata-scsi.c | 146 ++++++++++++++++++-------------------
drivers/ata/libata-zpodd.c | 6 +-
include/linux/libata.h | 2 +-
5 files changed, 86 insertions(+), 82 deletions(-)

Reviewed-by: Hannes Reinecke <hare@xxxxxxx>

Cheers,

Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@xxxxxxx +49 911 74053 688
SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg
HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich