diff options
author | Linus Torvalds | 2008-11-15 11:33:05 -0800 |
---|---|---|
committer | Linus Torvalds | 2008-11-15 11:33:05 -0800 |
commit | fa0cfc202c4969ceed567b1567c2e5effe7fd28b (patch) | |
tree | a6b23ec91fdf7f140f72cfc6aaf9b5cab342ae7b /drivers | |
parent | 8141c7f3e7aee618312fa1c15109e1219de784a7 (diff) | |
parent | 6a6b97d360702b98c02c7fca4c4e088dcf3a2985 (diff) |
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
libata: improve phantom device detection
Diffstat (limited to 'drivers')
-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 4b4739486327..9033d164c4ec 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. |