From: Neil Brown Make sure correct major is used when assembling partitioned md arrays from boot parameters. We need to make mdp_major available to do_mounts_md.c, and use it there. --- 25-akpm/drivers/md/md.c | 2 +- 25-akpm/init/do_mounts_md.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff -puN drivers/md/md.c~md-array-assembly-major-fix drivers/md/md.c --- 25/drivers/md/md.c~md-array-assembly-major-fix Wed Mar 10 15:46:59 2004 +++ 25-akpm/drivers/md/md.c Wed Mar 10 15:46:59 2004 @@ -1447,7 +1447,7 @@ abort: return 1; } -static int mdp_major = 0; +int mdp_major = 0; static struct kobject *md_probe(dev_t dev, int *part, void *data) { diff -puN init/do_mounts_md.c~md-array-assembly-major-fix init/do_mounts_md.c --- 25/init/do_mounts_md.c~md-array-assembly-major-fix Wed Mar 10 15:46:59 2004 +++ 25-akpm/init/do_mounts_md.c Wed Mar 10 15:46:59 2004 @@ -24,6 +24,7 @@ static struct { static int md_setup_ents __initdata; +extern int mdp_major; /* * Parse the command-line parameters given our kernel, but do not * actually try to invoke the MD device now; that is handled by @@ -115,6 +116,8 @@ static int __init md_setup(char *str) return 1; } +#define MdpMinorShift 6 + static void __init md_setup_drive(void) { int minor, i, ent, partitioned; @@ -134,7 +137,11 @@ static void __init md_setup_drive(void) sprintf(name, "/dev/md%s%d", partitioned?"_d":"", minor); sprintf(devfs_name, "/dev/md/%s%d", partitioned?"d":"", minor); - create_dev(name, MKDEV(MD_MAJOR, minor), devfs_name); + if (partitioned) + dev = MKDEV(mdp_major, minor << MdpMinorShift); + else + dev = MKDEV(MD_MAJOR, minor); + create_dev(name, dev, devfs_name); for (i = 0; i < MD_SB_DISKS && devname != 0; i++) { char *p; char comp_name[64]; _