Commit 28144f99 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

md: use __register_blkdev to allocate devices on demand

Use the simpler mechanism attached to major_name to allocate a md device
when a currently unregistered minor is accessed.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Acked-by: default avatarSong Liu <song@kernel.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 8410d38c
...@@ -5765,11 +5765,12 @@ static int md_alloc(dev_t dev, char *name) ...@@ -5765,11 +5765,12 @@ static int md_alloc(dev_t dev, char *name)
return error; return error;
} }
static struct kobject *md_probe(dev_t dev, int *part, void *data) static void md_probe(dev_t dev)
{ {
if (MAJOR(dev) == MD_MAJOR && MINOR(dev) >= 512)
return;
if (create_on_open) if (create_on_open)
md_alloc(dev, NULL); md_alloc(dev, NULL);
return NULL;
} }
static int add_named_array(const char *val, const struct kernel_param *kp) static int add_named_array(const char *val, const struct kernel_param *kp)
...@@ -6535,7 +6536,7 @@ static void autorun_devices(int part) ...@@ -6535,7 +6536,7 @@ static void autorun_devices(int part)
break; break;
} }
md_probe(dev, NULL, NULL); md_probe(dev);
mddev = mddev_find(dev); mddev = mddev_find(dev);
if (!mddev || !mddev->gendisk) { if (!mddev || !mddev->gendisk) {
if (mddev) if (mddev)
...@@ -9567,18 +9568,15 @@ static int __init md_init(void) ...@@ -9567,18 +9568,15 @@ static int __init md_init(void)
if (!md_rdev_misc_wq) if (!md_rdev_misc_wq)
goto err_rdev_misc_wq; goto err_rdev_misc_wq;
if ((ret = register_blkdev(MD_MAJOR, "md")) < 0) ret = __register_blkdev(MD_MAJOR, "md", md_probe);
if (ret < 0)
goto err_md; goto err_md;
if ((ret = register_blkdev(0, "mdp")) < 0) ret = __register_blkdev(0, "mdp", md_probe);
if (ret < 0)
goto err_mdp; goto err_mdp;
mdp_major = ret; mdp_major = ret;
blk_register_region(MKDEV(MD_MAJOR, 0), 512, THIS_MODULE,
md_probe, NULL, NULL);
blk_register_region(MKDEV(mdp_major, 0), 1UL<<MINORBITS, THIS_MODULE,
md_probe, NULL, NULL);
register_reboot_notifier(&md_notifier); register_reboot_notifier(&md_notifier);
raid_table_header = register_sysctl_table(raid_root_table); raid_table_header = register_sysctl_table(raid_root_table);
...@@ -9845,9 +9843,6 @@ static __exit void md_exit(void) ...@@ -9845,9 +9843,6 @@ static __exit void md_exit(void)
struct list_head *tmp; struct list_head *tmp;
int delay = 1; int delay = 1;
blk_unregister_region(MKDEV(MD_MAJOR,0), 512);
blk_unregister_region(MKDEV(mdp_major,0), 1U << MINORBITS);
unregister_blkdev(MD_MAJOR,"md"); unregister_blkdev(MD_MAJOR,"md");
unregister_blkdev(mdp_major, "mdp"); unregister_blkdev(mdp_major, "mdp");
unregister_reboot_notifier(&md_notifier); unregister_reboot_notifier(&md_notifier);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment