[PATCH v2] ata: libata-eh: Do not retry reset if the device is gone

From: Igor Pylypiv

Date: Thu Apr 02 2026 - 12:08:20 EST


If a device is hot-unplugged or otherwise disappears during error handling,
ata_eh_reset() may fail with -ENODEV. Currently, the error handler will
continue to retry the reset operation up to max_tries times.

Prevent unnecessary reset retries by exiting the loop early when
ata_do_reset() returns -ENODEV.

Reviewed-by: Damien Le Moal <dlemoal@xxxxxxxxxx>
Signed-off-by: Igor Pylypiv <ipylypiv@xxxxxxxxxx>
---

Changes from v1:
- Corrected the commit message to reference ata_do_reset() instead of
ata_eh_reset() for the early loop break.

drivers/ata/libata-eh.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 23be85418b3b..e97a842005e9 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -3171,7 +3171,7 @@ int ata_eh_reset(struct ata_link *link, int classify,
sata_scr_read(link, SCR_STATUS, &sstatus))
rc = -ERESTART;

- if (try >= max_tries) {
+ if (try >= max_tries || rc == -ENODEV) {
/*
* Thaw host port even if reset failed, so that the port
* can be retried on the next phy event. This risks
--
2.53.0.1185.g05d4b7b318-goog