Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dda7aba1 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

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: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 1ffc151f
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -1416,12 +1416,12 @@ static int ata_hpa_resize(struct ata_device *dev)
	/* read native max address */
	/* read native max address */
	rc = ata_read_native_max_address(dev, &native_sectors);
	rc = ata_read_native_max_address(dev, &native_sectors);
	if (rc) {
	if (rc) {
		/* If HPA isn't going to be unlocked, skip HPA
		/* If device aborted the command or HPA isn't going to
		 * resizing from the next try.
		 * be unlocked, skip HPA resizing.
		 */
		 */
		if (!ata_ignore_hpa) {
		if (rc == -EACCES || !ata_ignore_hpa) {
			ata_dev_printk(dev, KERN_WARNING, "HPA support seems "
			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;
			dev->horkage |= ATA_HORKAGE_BROKEN_HPA;


			/* we can continue if device aborted the command */
			/* we can continue if device aborted the command */