diskio: hard-code CD-ROM sectors to 2048 bytes
authorH. Peter Anvin <hpa@linux.intel.com>
Mon, 28 Jun 2010 21:34:08 +0000 (14:34 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Mon, 28 Jun 2010 21:34:08 +0000 (14:34 -0700)
At least the ThinkPad T22 and T23 will incorrectly report a sector
size of 512 bytes for El Torito CD-ROMs.  Ignore the reported sector
size for El Torito boots.

Reported-by: Helmut Hullen <hullen@t-online.de>
Tested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
core/fs/diskio.c

index b832868..1625bdb 100644 (file)
@@ -278,7 +278,18 @@ struct disk *disk_init(uint8_t devno, bool cdrom, sector_t part_start,
            if (edd_params.len < sizeof edd_params)
                memset((char *)&edd_params + edd_params.len, 0,
                       sizeof edd_params - edd_params.len);
-           if (edd_params.sector_size >= 512 &&
+
+           /*
+            * Note: filter impossible sector sizes.  Some BIOSes
+            * are known to report incorrect sector size information
+            * (usually 512 rather than 2048) for CD-ROMs, so at least
+            * for now ignore the reported sector size if booted via
+            * El Torito.
+            *
+            * Known affected systems: ThinkPad T22, T23.
+            */
+           if (!cdrom &&
+               edd_params.sector_size >= 512 &&
                is_power_of_2(edd_params.sector_size))
                sector_size = edd_params.sector_size;
        }