diff options
Diffstat (limited to 'drivers/ata/libata-sff.c')
| -rw-r--r-- | drivers/ata/libata-sff.c | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 4b473948632..9033d164c4e 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c @@ -1227,10 +1227,19 @@ fsm_start:  			/* ATA PIO protocol */  			if (unlikely((status & ATA_DRQ) == 0)) {  				/* handle BSY=0, DRQ=0 as error */ -				if (likely(status & (ATA_ERR | ATA_DF))) +				if (likely(status & (ATA_ERR | ATA_DF))) {  					/* device stops HSM for abort/error */  					qc->err_mask |= AC_ERR_DEV; -				else { + +					/* If diagnostic failed and this is +					 * IDENTIFY, it's likely a phantom +					 * device.  Mark hint. +					 */ +					if (qc->dev->horkage & +					    ATA_HORKAGE_DIAGNOSTIC) +						qc->err_mask |= +							AC_ERR_NODEV_HINT; +				} else {  					/* HSM violation. Let EH handle this.  					 * Phantom devices also trigger this  					 * condition.  Mark hint.  |