#include <asm/io.h>
 #include <asm/div64.h>
 
+#define IDE_DISK_PARTS         (1 << PARTN_BITS)
+#define IDE_DISK_MINORS                IDE_DISK_PARTS
+#define IDE_DISK_EXT_MINORS    (IDE_DISK_PARTS - IDE_DISK_MINORS)
+
 struct ide_disk_obj {
        ide_drive_t     *drive;
        ide_driver_t    *driver;
        if (!idkp)
                goto failed;
 
-       g = alloc_disk_node(1 << PARTN_BITS,
-                       hwif_to_node(drive->hwif));
+       g = alloc_disk_ext_node(IDE_DISK_MINORS, IDE_DISK_EXT_MINORS,
+                               hwif_to_node(drive->hwif));
        if (!g)
                goto out_free_idkp;
 
        } else
                drive->attach = 1;
 
-       g->minors = 1 << PARTN_BITS;
+       g->minors = IDE_DISK_MINORS;
+       g->ext_minors = IDE_DISK_EXT_MINORS;
        g->driverfs_dev = &drive->gendev;
        g->flags = drive->removable ? GENHD_FL_REMOVABLE : 0;
        set_capacity(g, idedisk_capacity(drive));
 
 MODULE_ALIAS_SCSI_DEVICE(TYPE_MOD);
 MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);
 
+#define SD_PARTS       64
+#define SD_MINORS      16
+#define SD_EXT_MINORS  (SD_PARTS - SD_MINORS)
+
 static int  sd_revalidate_disk(struct gendisk *);
 static int  sd_probe(struct device *);
 static int  sd_remove(struct device *);
        if (!sdkp)
                goto out;
 
-       gd = alloc_disk(16);
+       gd = alloc_disk_ext(SD_MINORS, SD_EXT_MINORS);
        if (!gd)
                goto out_free;
 
 
        gd->major = sd_major((index & 0xf0) >> 4);
        gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
-       gd->minors = 16;
+       gd->minors = SD_MINORS;
+       gd->ext_minors = SD_EXT_MINORS;
        gd->fops = &sd_fops;
 
        if (index < 26) {