libata: improve HPA error handling
PATCH 1/1 libata: improve HPA error handling
There's no point in retrying and eventually failing device detection when the device rejects READ_NATIVE_MAX[_EXT]. Disable HPA unlocking if READ_NATIVE_MAX[_EXT] is rejected as done when SET_MAX[_EXT] is rejected.
This allows some old drives to work even if they aren't blacklisted.
Signed-off-by Tejun Heo <[email protected]>
--- drivers/ata/libata-core.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/ata/libata-core.c +4 -4
@@ -1416,12 +1416,12 @@ static int ata_hpa_resize(struct ata_device *dev)/* read native max address */ rc =ata_read_native_max_address (dev, &native_sectors);if (rc) { -/* If HPA isn't going to be unlocked, skip HPA -* resizing from the next try. +/* If device aborted the command or HPA isn't going to +* be unlocked, skip HPA resizing. */ -if (!ata_ignore_hpa) { +if (rc == -EACCES || !ata_ignore_hpa) {ata_dev_printk (dev,KERN_WARNING ,"HPA support seems " -"broken, will skip HPA handling\n" ); +"broken, skipping HPA handling\n" ); dev->horkage |=ATA_HORKAGE_BROKEN_HPA ;/* we can continue if device aborted the command */
drivers/ata/libata-sff.c +0 -0
Jeff Garzik
AppliedQuoted 11 lines · Tejun Heo
There's no point in retrying and eventually failing device detection when the device rejects READ_NATIVE_MAX[_EXT]. Disable HPA unlocking if READ_NATIVE_MAX[_EXT] is rejected as done when SET_MAX[_EXT] is rejected.
This allows some old drives to work even if they aren't blacklisted.
Signed-off-by Tejun Heo <[email protected]>--- drivers/ata/libata-core.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
applied