From: Alan Cox <[EMAIL PROTECTED]>
Ok this is a different approach to handling it - knowing it is an off by one
so we can handle the drive if clipped
Signed-off-by: Alan Cox <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---
drivers/ata/libata-core.c | 7 +++++++
include/linux/libata.h | 1 +
2 files changed, 8 insertions(+)
diff -puN drivers/ata/libata-core.c~st340823a-hpa-and-libata
drivers/ata/libata-core.c
--- a/drivers/ata/libata-core.c~st340823a-hpa-and-libata
+++ a/drivers/ata/libata-core.c
@@ -988,6 +988,10 @@ static u64 ata_hpa_resize(struct ata_dev
else
hpa_sectors = ata_read_native_max_address(dev);
+ /* Reports one sector too many */
+ if (hpa_sectors && (dev->horkage & ATA_HORKAGE_HPA_SIZE))
+ hpa_sectors--;
+
if (hpa_sectors > sectors) {
ata_dev_printk(dev, KERN_INFO,
"Host Protected Area detected:\n"
@@ -3863,6 +3867,9 @@ static const struct ata_blacklist_entry
/* Devices with NCQ limits */
+ /* Devices which report 1 sector over size HPA */
+ { "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, },
+
/* End Marker */
{ }
};
diff -puN include/linux/libata.h~st340823a-hpa-and-libata include/linux/libata.h
--- a/include/linux/libata.h~st340823a-hpa-and-libata
+++ a/include/linux/libata.h
@@ -315,6 +315,7 @@ enum {
ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */
ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */
ATA_HORKAGE_IPM = (1 << 4), /* LPM problems */
+ ATA_HORKAGE_HPA_SIZE = (1 << 6), /* Reports native size off by
one */
};
enum hsm_task_states {
_
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html