diff -urpN -X /home/fletch/.diff.exclude 610-dynamic_hd_struct/drivers/scsi/sd.c 620-devfs_fixup/drivers/scsi/sd.c
--- 610-dynamic_hd_struct/drivers/scsi/sd.c	Sun Apr 20 19:35:03 2003
+++ 620-devfs_fixup/drivers/scsi/sd.c	Sun Apr 20 22:32:28 2003
@@ -124,6 +124,9 @@ static int sd_major(int major_idx)
 		return SCSI_DISK1_MAJOR + major_idx - 1;
 	case 8 ... 15:
 		return SCSI_DISK8_MAJOR + major_idx - 8;
+#define MAX_IDX       (TOTAL_SD_DISKS >> 4)
+	case 16 ... MAX_IDX:
+		return SCSI_DISK15_MAJOR;
 	default:
 		BUG();
 		return 0;	/* shut up gcc */
diff -urpN -X /home/fletch/.diff.exclude 610-dynamic_hd_struct/fs/partitions/check.c 620-devfs_fixup/fs/partitions/check.c
--- 610-dynamic_hd_struct/fs/partitions/check.c	Sun Apr 20 22:24:49 2003
+++ 620-devfs_fixup/fs/partitions/check.c	Sun Apr 20 22:29:54 2003
@@ -259,14 +259,13 @@ void add_partition(struct gendisk *disk,
 	memset(p, 0, sizeof(struct hd_struct));
 	p->start_sect = start;
 	p->nr_sects = len;
+	p->partno = part;
+	disk->part[part-1] = p;
 	devfs_register_partition(disk, part);
 	snprintf(p->kobj.name,KOBJ_NAME_LEN,"%s%d",disk->kobj.name,part);
 	p->kobj.parent = &disk->kobj;
 	p->kobj.ktype = &ktype_part;
 	kobject_register(&p->kobj);
-
-	p->partno = part;
-	disk->part[part-1] = p;
 }
 
 static void disk_sysfs_symlinks(struct gendisk *disk)