]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
ata: libata-core: Allow capacity transition to zero for locked drives
authorTJ Adams <tadamsjr@google.com>
Mon, 6 Jul 2026 21:00:54 +0000 (14:00 -0700)
committerDamien Le Moal <dlemoal@kernel.org>
Wed, 8 Jul 2026 04:49:48 +0000 (13:49 +0900)
commit793bf193b18e9bff6c4280268bbffd16a5b533e5
treea7ccf1aab9f44f9478b3020590fca261959ea055
parent917d0a4b95ea7ba01ed6296fb808f752d5d81107
ata: libata-core: Allow capacity transition to zero for locked drives

Commit 91842ed844a0 ("ata: libata-core: Set capacity to zero for a
security locked drive") introduced setting the device capacity (n_sectors)
to zero in ata_dev_configure() if the drive is security locked.

However, during runtime revalidation, ata_dev_revalidate() compares the
new capacity (now 0) with the old capacity (>0) and detects a mismatch.
Since it does not consider the locked status, it returns -ENODEV.

This revalidation failure can occur when doing a reset of the PHY (e.g.
hard reset) for a controller that has I/Os in flight. The timed out
I/Os trigger the SCSI Error Handling (EH) path, which in turn invokes
libata device revalidation. If the drive is locked at runtime (e.g.
it lost power during reset and relocked), revalidation sees the capacity
transition to zero and fails, eventually disabling the device.

Fix this by allowing the capacity transition to zero in
ata_dev_revalidate() if the drive is reported as security locked by
ata_id_is_locked().

Fixes: 91842ed844a0 ("ata: libata-core: Set capacity to zero for a security locked drive")
Cc: stable@vger.kernel.org
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Terrence Adams <tadamsjr@google.com>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
drivers/ata/libata-core.c