mirror of
https://github.com/torvalds/linux.git
synced 2024-11-14 16:12:02 +00:00
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: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@suse.de> Acked-by: Song Liu <song@kernel.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
8410d38c25
commit
28144f9998
@ -5765,11 +5765,12 @@ static int md_alloc(dev_t dev, char *name)
|
||||
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)
|
||||
md_alloc(dev, NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int add_named_array(const char *val, const struct kernel_param *kp)
|
||||
@ -6535,7 +6536,7 @@ static void autorun_devices(int part)
|
||||
break;
|
||||
}
|
||||
|
||||
md_probe(dev, NULL, NULL);
|
||||
md_probe(dev);
|
||||
mddev = mddev_find(dev);
|
||||
if (!mddev || !mddev->gendisk) {
|
||||
if (mddev)
|
||||
@ -9567,18 +9568,15 @@ static int __init md_init(void)
|
||||
if (!md_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;
|
||||
|
||||
if ((ret = register_blkdev(0, "mdp")) < 0)
|
||||
ret = __register_blkdev(0, "mdp", md_probe);
|
||||
if (ret < 0)
|
||||
goto err_mdp;
|
||||
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);
|
||||
raid_table_header = register_sysctl_table(raid_root_table);
|
||||
|
||||
@ -9845,9 +9843,6 @@ static __exit void md_exit(void)
|
||||
struct list_head *tmp;
|
||||
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(mdp_major, "mdp");
|
||||
unregister_reboot_notifier(&md_notifier);
|
||||
|
Loading…
Reference in New Issue
Block a user