diff options
-rw-r--r-- | drivers/md/md.c | 33 | ||||
-rw-r--r-- | include/linux/raid/md_k.h | 5 | ||||
-rw-r--r-- | init/do_mounts_md.c | 8 |
3 files changed, 18 insertions, 28 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"); |
diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h index e423dad1a7fd..8245c282168b 100644 --- a/include/linux/raid/md_k.h +++ b/include/linux/raid/md_k.h | |||
@@ -31,18 +31,15 @@ | |||
31 | #define LEVEL_NONE (-1000000) | 31 | #define LEVEL_NONE (-1000000) |
32 | 32 | ||
33 | #define MaxSector (~(sector_t)0) | 33 | #define MaxSector (~(sector_t)0) |
34 | #define MD_THREAD_NAME_MAX 14 | ||
35 | 34 | ||
36 | typedef struct mddev_s mddev_t; | 35 | typedef struct mddev_s mddev_t; |
37 | typedef struct mdk_rdev_s mdk_rdev_t; | 36 | typedef struct mdk_rdev_s mdk_rdev_t; |
38 | 37 | ||
39 | #define MAX_MD_DEVS 256 /* Max number of md dev */ | ||
40 | |||
41 | /* | 38 | /* |
42 | * options passed in raidrun: | 39 | * options passed in raidrun: |
43 | */ | 40 | */ |
44 | 41 | ||
45 | /* Currently this must fix in an 'int' */ | 42 | /* Currently this must fit in an 'int' */ |
46 | #define MAX_CHUNK_SIZE (1<<30) | 43 | #define MAX_CHUNK_SIZE (1<<30) |
47 | 44 | ||
48 | /* | 45 | /* |
diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c index 2429e1bf8c60..753dc54a6649 100644 --- a/init/do_mounts_md.c +++ b/init/do_mounts_md.c | |||
@@ -20,7 +20,7 @@ static struct { | |||
20 | int level; | 20 | int level; |
21 | int chunk; | 21 | int chunk; |
22 | char *device_names; | 22 | char *device_names; |
23 | } md_setup_args[MAX_MD_DEVS] __initdata; | 23 | } md_setup_args[256] __initdata; |
24 | 24 | ||
25 | static int md_setup_ents __initdata; | 25 | static int md_setup_ents __initdata; |
26 | 26 | ||
@@ -61,10 +61,6 @@ static int __init md_setup(char *str) | |||
61 | return 0; | 61 | return 0; |
62 | } | 62 | } |
63 | str1 = str; | 63 | str1 = str; |
64 | if (minor >= MAX_MD_DEVS) { | ||
65 | printk(KERN_WARNING "md: md=%d, Minor device number too high.\n", minor); | ||
66 | return 0; | ||
67 | } | ||
68 | for (ent=0 ; ent< md_setup_ents ; ent++) | 64 | for (ent=0 ; ent< md_setup_ents ; ent++) |
69 | if (md_setup_args[ent].minor == minor && | 65 | if (md_setup_args[ent].minor == minor && |
70 | md_setup_args[ent].partitioned == partitioned) { | 66 | md_setup_args[ent].partitioned == partitioned) { |
@@ -72,7 +68,7 @@ static int __init md_setup(char *str) | |||
72 | "Replacing previous definition.\n", partitioned?"d":"", minor); | 68 | "Replacing previous definition.\n", partitioned?"d":"", minor); |
73 | break; | 69 | break; |
74 | } | 70 | } |
75 | if (ent >= MAX_MD_DEVS) { | 71 | if (ent >= ARRAY_SIZE(md_setup_args)) { |
76 | printk(KERN_WARNING "md: md=%s%d - too many md initialisations\n", partitioned?"d":"", minor); | 72 | printk(KERN_WARNING "md: md=%s%d - too many md initialisations\n", partitioned?"d":"", minor); |
77 | return 0; | 73 | return 0; |
78 | } | 74 | } |