On Fri, Aug 03, 2007 at 12:34:13AM +0200, Bartlomiej Zolnierkiewicz wrote: > Mikko, please verify that the following patch fixes the issue. A few oopses later and this actually works with vanilla 2.6.22.1 and Debian 2.6.18 (2.6.18.dfsg.1-12etch2), latter without EXPORT_SYMBOL_GPL since it's there already. diff -X linux-2.6.22.1/Documentation/dontdiff -upr linux-2.6.22.1.orig/drivers/ide/ide-disk.c linux-2.6.22.1/drivers/ide/ide-disk.c --- linux-2.6.22.1.orig/drivers/ide/ide-disk.c 2007-07-10 21:56:30.000000000 +0300 +++ linux-2.6.22.1/drivers/ide/ide-disk.c 2007-08-03 00:22:46.000000000 +0300 @@ -481,6 +481,15 @@ static inline int idedisk_supports_lba48 && id->lba_capacity_2; } +/* + * Some disks report total number of sectors instead of + * maximum sector address. We list them here. + */ +static const struct drive_list_entry hpa_list[] = { + { "ST340823A", "ALL" }, + { NULL , NULL } +}; + static void idedisk_check_hpa(ide_drive_t *drive) { unsigned long long capacity, set_max; @@ -492,6 +501,15 @@ static void idedisk_check_hpa(ide_drive_ else set_max = idedisk_read_native_max_address(drive); + if (ide_in_drive_list(drive->id, hpa_list)) { + /* + * Since we are inclusive wrt to firmware revisions do this + * extra check and apply the workaround only when needed. + */ + if (set_max == capacity + 1) + set_max--; + } + if (set_max <= capacity) return; diff -X linux-2.6.22.1/Documentation/dontdiff -upr linux-2.6.22.1.orig/drivers/ide/ide-dma.c linux-2.6.22.1/drivers/ide/ide-dma.c --- linux-2.6.22.1.orig/drivers/ide/ide-dma.c 2007-07-10 21:56:30.000000000 +0300 +++ linux-2.6.22.1/drivers/ide/ide-dma.c 2007-08-03 01:10:25.000000000 +0300 @@ -152,6 +152,7 @@ int ide_in_drive_list(struct hd_driveid return 1; return 0; } +EXPORT_SYMBOL_GPL(ide_in_drive_list); /** * ide_dma_intr - IDE DMA interrupt handler - 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