From 3db537d4c0d2814e9e1b9bb21d45819449e50478 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 3 Oct 2006 01:15:59 -0700 Subject: [PATCH] --- yaml --- r: 38126 b: refs/heads/master c: e8703fe1f5cdcff686f7eb0a46487b5a04a9324a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/md/md.c | 33 +++++++++++++++------------------ trunk/include/linux/raid/md_k.h | 5 +---- trunk/init/do_mounts_md.c | 8 ++------ 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/[refs] b/[refs] index 93a469a2b9f9..643d0357fff7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d33a56d3639eba077489c937943a32ef6237b1b8 +refs/heads/master: e8703fe1f5cdcff686f7eb0a46487b5a04a9324a diff --git a/trunk/drivers/md/md.c b/trunk/drivers/md/md.c index db1ac84a739a..40cb79ac4039 100644 --- a/trunk/drivers/md/md.c +++ b/trunk/drivers/md/md.c @@ -3409,6 +3409,7 @@ static void autorun_devices(int part) printk(KERN_INFO "md: autorun ...\n"); while (!list_empty(&pending_raid_disks)) { + int unit; dev_t dev; LIST_HEAD(candidates); rdev0 = list_entry(pending_raid_disks.next, @@ -3428,16 +3429,19 @@ static void autorun_devices(int part) * mostly sane superblocks. It's time to allocate the * mddev. */ - if (rdev0->preferred_minor < 0 || rdev0->preferred_minor >= MAX_MD_DEVS) { + if (part) { + dev = MKDEV(mdp_major, + rdev0->preferred_minor << MdpMinorShift); + unit = MINOR(dev) >> MdpMinorShift; + } else { + dev = MKDEV(MD_MAJOR, rdev0->preferred_minor); + unit = MINOR(dev); + } + if (rdev0->preferred_minor != unit) { printk(KERN_INFO "md: unit number in %s is bad: %d\n", bdevname(rdev0->bdev, b), rdev0->preferred_minor); break; } - if (part) - dev = MKDEV(mdp_major, - rdev0->preferred_minor << MdpMinorShift); - else - dev = MKDEV(MD_MAJOR, rdev0->preferred_minor); md_probe(dev, NULL, NULL); mddev = mddev_find(dev); @@ -5524,22 +5528,15 @@ static void md_geninit(void) static int __init md_init(void) { - printk(KERN_INFO "md: md driver %d.%d.%d MAX_MD_DEVS=%d," - " MD_SB_DISKS=%d\n", - MD_MAJOR_VERSION, MD_MINOR_VERSION, - MD_PATCHLEVEL_VERSION, MAX_MD_DEVS, MD_SB_DISKS); - printk(KERN_INFO "md: bitmap version %d.%d\n", BITMAP_MAJOR_HI, - BITMAP_MINOR); - if (register_blkdev(MAJOR_NR, "md")) return -1; if ((mdp_major=register_blkdev(0, "mdp"))<=0) { unregister_blkdev(MAJOR_NR, "md"); return -1; } - blk_register_region(MKDEV(MAJOR_NR, 0), MAX_MD_DEVS, THIS_MODULE, - md_probe, NULL, NULL); - blk_register_region(MKDEV(mdp_major, 0), MAX_MD_DEVS<= MAX_MD_DEVS) { - printk(KERN_WARNING "md: md=%d, Minor device number too high.\n", minor); - return 0; - } for (ent=0 ; ent< md_setup_ents ; ent++) if (md_setup_args[ent].minor == minor && md_setup_args[ent].partitioned == partitioned) { @@ -72,7 +68,7 @@ static int __init md_setup(char *str) "Replacing previous definition.\n", partitioned?"d":"", minor); break; } - if (ent >= MAX_MD_DEVS) { + if (ent >= ARRAY_SIZE(md_setup_args)) { printk(KERN_WARNING "md: md=%s%d - too many md initialisations\n", partitioned?"d":"", minor); return 0; }