libata: give devices one last chance even if recovery failed with -EINVAL
PATCH 1/1 libata: give devices one last chance even if recovery failed with -EINVAL
After certain errors, some devices report complete garbage on IDENTIFY. This can cause ata_dev_read_id() to fail with -EINVAL resulting in immediate disabling of the device. Give the device one last chance after -EINVAL to allow recovery from such situations. As -EINVAL is triggered very rarely, this shouldn't cause any noticeable affect on more common error paths.
drivers/ata/libata-eh.c +1 -5
@@ -2201,14 +2201,10 @@ static int ata_eh_recover(struct ata_por ehc->tries[dev->devno]--;switch (rc) { -case -EINVAL : -/* eeek, something went very wrong, give up */ - ehc->tries[dev->devno] =0 ; -break ; -case -ENODEV :/* device missing or wrong IDENTIFY data, schedule probing */ ehc->i.probe_mask |= (1 << dev->devno); +case -EINVAL :/* give it just one more chance */ ehc->tries[dev->devno] =min (ehc->tries[dev->devno],1 );case -EIO :
Jeff Garzik
AppliedQuoted 9 lines · Tejun Heo
After certain errors, some devices report complete garbage on IDENTIFY. This can cause
ata_dev_read_id()to fail with-EINVALresulting in immediate disabling of the device. Give the device one last chance after-EINVALto allow recovery from such situations. As-EINVALis triggered very rarely, this shouldn't cause any noticeable affect on more common error paths.Signed-off-by Tejun Heo <[email protected]>Cc Harald Dunkel <[email protected]>
applied