diff options
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r-- | drivers/md/md.c | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index db1ac84a739a..40cb79ac4039 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -3409,6 +3409,7 @@ static void autorun_devices(int part) | |||
3409 | 3409 | ||
3410 | printk(KERN_INFO "md: autorun ...\n"); | 3410 | printk(KERN_INFO "md: autorun ...\n"); |
3411 | while (!list_empty(&pending_raid_disks)) { | 3411 | while (!list_empty(&pending_raid_disks)) { |
3412 | int unit; | ||
3412 | dev_t dev; | 3413 | dev_t dev; |
3413 | LIST_HEAD(candidates); | 3414 | LIST_HEAD(candidates); |
3414 | rdev0 = list_entry(pending_raid_disks.next, | 3415 | rdev0 = list_entry(pending_raid_disks.next, |
@@ -3428,16 +3429,19 @@ static void autorun_devices(int part) | |||
3428 | * mostly sane superblocks. It's time to allocate the | 3429 | * mostly sane superblocks. It's time to allocate the |
3429 | * mddev. | 3430 | * mddev. |
3430 | */ | 3431 | */ |
3431 | if (rdev0->preferred_minor < 0 || rdev0->preferred_minor >= MAX_MD_DEVS) { | 3432 | if (part) { |
3433 | dev = MKDEV(mdp_major, | ||
3434 | rdev0->preferred_minor << MdpMinorShift); | ||
3435 | unit = MINOR(dev) >> MdpMinorShift; | ||
3436 | } else { | ||
3437 | dev = MKDEV(MD_MAJOR, rdev0->preferred_minor); | ||
3438 | unit = MINOR(dev); | ||
3439 | } | ||
3440 | if (rdev0->preferred_minor != unit) { | ||
3432 | printk(KERN_INFO "md: unit number in %s is bad: %d\n", | 3441 | printk(KERN_INFO "md: unit number in %s is bad: %d\n", |
3433 | bdevname(rdev0->bdev, b), rdev0->preferred_minor); | 3442 | bdevname(rdev0->bdev, b), rdev0->preferred_minor); |
3434 | break; | 3443 | break; |
3435 | } | 3444 | } |
3436 | if (part) | ||
3437 | dev = MKDEV(mdp_major, | ||
3438 | rdev0->preferred_minor << MdpMinorShift); | ||
3439 | else | ||
3440 | dev = MKDEV(MD_MAJOR, rdev0->preferred_minor); | ||
3441 | 3445 | ||
3442 | md_probe(dev, NULL, NULL); | 3446 | md_probe(dev, NULL, NULL); |
3443 | mddev = mddev_find(dev); | 3447 | mddev = mddev_find(dev); |
@@ -5524,22 +5528,15 @@ static void md_geninit(void) | |||
5524 | 5528 | ||
5525 | static int __init md_init(void) | 5529 | static int __init md_init(void) |
5526 | { | 5530 | { |
5527 | printk(KERN_INFO "md: md driver %d.%d.%d MAX_MD_DEVS=%d," | ||
5528 | " MD_SB_DISKS=%d\n", | ||
5529 | MD_MAJOR_VERSION, MD_MINOR_VERSION, | ||
5530 | MD_PATCHLEVEL_VERSION, MAX_MD_DEVS, MD_SB_DISKS); | ||
5531 | printk(KERN_INFO "md: bitmap version %d.%d\n", BITMAP_MAJOR_HI, | ||
5532 | BITMAP_MINOR); | ||
5533 | |||
5534 | if (register_blkdev(MAJOR_NR, "md")) | 5531 | if (register_blkdev(MAJOR_NR, "md")) |
5535 | return -1; | 5532 | return -1; |
5536 | if ((mdp_major=register_blkdev(0, "mdp"))<=0) { | 5533 | if ((mdp_major=register_blkdev(0, "mdp"))<=0) { |
5537 | unregister_blkdev(MAJOR_NR, "md"); | 5534 | unregister_blkdev(MAJOR_NR, "md"); |
5538 | return -1; | 5535 | return -1; |
5539 | } | 5536 | } |
5540 | blk_register_region(MKDEV(MAJOR_NR, 0), MAX_MD_DEVS, THIS_MODULE, | 5537 | blk_register_region(MKDEV(MAJOR_NR, 0), 1UL<<MINORBITS, THIS_MODULE, |
5541 | md_probe, NULL, NULL); | 5538 | md_probe, NULL, NULL); |
5542 | blk_register_region(MKDEV(mdp_major, 0), MAX_MD_DEVS<<MdpMinorShift, THIS_MODULE, | 5539 | blk_register_region(MKDEV(mdp_major, 0), 1UL<<MINORBITS, THIS_MODULE, |
5543 | md_probe, NULL, NULL); | 5540 | md_probe, NULL, NULL); |
5544 | 5541 | ||
5545 | register_reboot_notifier(&md_notifier); | 5542 | register_reboot_notifier(&md_notifier); |
@@ -5598,8 +5595,8 @@ static __exit void md_exit(void) | |||
5598 | mddev_t *mddev; | 5595 | mddev_t *mddev; |
5599 | struct list_head *tmp; | 5596 | struct list_head *tmp; |
5600 | 5597 | ||
5601 | blk_unregister_region(MKDEV(MAJOR_NR,0), MAX_MD_DEVS); | 5598 | blk_unregister_region(MKDEV(MAJOR_NR,0), 1U << MINORBITS); |
5602 | blk_unregister_region(MKDEV(mdp_major,0), MAX_MD_DEVS << MdpMinorShift); | 5599 | blk_unregister_region(MKDEV(mdp_major,0), 1U << MINORBITS); |
5603 | 5600 | ||
5604 | unregister_blkdev(MAJOR_NR,"md"); | 5601 | unregister_blkdev(MAJOR_NR,"md"); |
5605 | unregister_blkdev(mdp_major, "mdp"); | 5602 | unregister_blkdev(mdp_major, "mdp"); |