|
@@ -481,6 +481,15 @@ static inline int idedisk_supports_lba48(const struct hd_driveid *id)
|
|
|
&& 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", NULL },
|
|
|
+ { 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_t *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;
|
|
|
|