Restore the support for handling drives that report one sector too many (ie SCSI not ATA style). This worked before the HPA update but was removed in that process Signed-off-by: Alan Cox <alan@xxxxxxxxxx> diff -u --new-file --exclude-from /usr/src/exclude --recursive linux.vanilla-2.6.23rc8-mm1/drivers/ata/libata-core.c linux-2.6.23rc8-mm1/drivers/ata/libata-core.c --- linux.vanilla-2.6.23rc8-mm1/drivers/ata/libata-core.c 2007-09-26 16:46:48.515293608 +0100 +++ linux-2.6.23rc8-mm1/drivers/ata/libata-core.c 2007-09-26 17:02:06.530734048 +0100 @@ -921,7 +921,8 @@ *max_sectors = ata_tf_to_lba48(&tf); else *max_sectors = ata_tf_to_lba(&tf); - + if (dev->horkage & ATA_HORKAGE_HPA_SIZE) + (*max_sectors)--; return 0; } @@ -3957,6 +3958,10 @@ { "WDC WD2500JD-00HBB0", "WD-WMAL71490727", ATA_HORKAGE_BROKEN_HPA }, { "MAXTOR 6L080L4", "A93.0500", ATA_HORKAGE_BROKEN_HPA }, + /* Devices which report 1 sector over size HPA */ + { "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, }, + { "ST320413A", NULL, ATA_HORKAGE_HPA_SIZE, }, + /* End Marker */ { } }; diff -u --new-file --exclude-from /usr/src/exclude --recursive linux.vanilla-2.6.23rc8-mm1/include/linux/libata.h linux-2.6.23rc8-mm1/include/linux/libata.h --- linux.vanilla-2.6.23rc8-mm1/include/linux/libata.h 2007-09-26 16:46:57.844875296 +0100 +++ linux-2.6.23rc8-mm1/include/linux/libata.h 2007-09-26 17:11:56.215088400 +0100 @@ -315,7 +315,8 @@ ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */ ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */ ATA_HORKAGE_BROKEN_HPA = (1 << 4), /* Broken HPA */ - ATA_HORKAGE_DRQ = (1 << 5), /* Device forgets to clear DRQ on error */ + ATA_HORKAGE_HPA_SIZE = (1 << 5), /* Reports native size off by one */ + ATA_HORKAGE_DRQ = (1 << 6), /* Device forgets to clear DRQ on error */ /* DMA mask for user DMA control: User visible values do not renumber */ - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html