Commit a1695151 authored by Damien Le Moal's avatar Damien Le Moal
Browse files

ata: libata-scsi: Improve ata_scsi_handle_link_detach()



A struct ata_device flags should always be set and cleared with the
device port locked. Testing for a flag should thus also be done while
holding the device port lock. In accordance to this principle, modify
ata_scsi_handle_link_detach() to test and clear the ATA_DFLAG_DETACHED
flag while holding the device port lock.

Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
Reviewed-by: default avatarNiklas Cassel <cassel@kernel.org>
parent c494708d
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -4605,10 +4605,12 @@ static void ata_scsi_handle_link_detach(struct ata_link *link)
	ata_for_each_dev(dev, link, ALL) {
		unsigned long flags;

		if (!(dev->flags & ATA_DFLAG_DETACHED))
		spin_lock_irqsave(ap->lock, flags);
		if (!(dev->flags & ATA_DFLAG_DETACHED)) {
			spin_unlock_irqrestore(ap->lock, flags);
			continue;
		}

		spin_lock_irqsave(ap->lock, flags);
		dev->flags &= ~ATA_DFLAG_DETACHED;
		spin_unlock_irqrestore(ap->lock, flags);