Commit 996e509b authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

sd: use __register_blkdev to avoid a modprobe for an unregistered dev_t

Switch from using blk_register_region to the probe callback passed to
__register_blkdev to disable the request_module call for an unclaimed
dev_t in the SD majors.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Acked-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent f9550f1b
...@@ -630,13 +630,11 @@ static struct scsi_driver sd_template = { ...@@ -630,13 +630,11 @@ static struct scsi_driver sd_template = {
}; };
/* /*
* Dummy kobj_map->probe function. * Don't request a new module, as that could deadlock in multipath
* The default ->probe function will call modprobe, which is * environment.
* pointless as this module is already loaded.
*/ */
static struct kobject *sd_default_probe(dev_t devt, int *partno, void *data) static void sd_default_probe(dev_t devt)
{ {
return NULL;
} }
/* /*
...@@ -3528,9 +3526,6 @@ static int sd_remove(struct device *dev) ...@@ -3528,9 +3526,6 @@ static int sd_remove(struct device *dev)
free_opal_dev(sdkp->opal_dev); free_opal_dev(sdkp->opal_dev);
blk_register_region(devt, SD_MINORS, NULL,
sd_default_probe, NULL, NULL);
mutex_lock(&sd_ref_mutex); mutex_lock(&sd_ref_mutex);
dev_set_drvdata(dev, NULL); dev_set_drvdata(dev, NULL);
put_device(&sdkp->dev); put_device(&sdkp->dev);
...@@ -3720,11 +3715,9 @@ static int __init init_sd(void) ...@@ -3720,11 +3715,9 @@ static int __init init_sd(void)
SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n")); SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));
for (i = 0; i < SD_MAJORS; i++) { for (i = 0; i < SD_MAJORS; i++) {
if (register_blkdev(sd_major(i), "sd") != 0) if (__register_blkdev(sd_major(i), "sd", sd_default_probe))
continue; continue;
majors++; majors++;
blk_register_region(sd_major(i), SD_MINORS, NULL,
sd_default_probe, NULL, NULL);
} }
if (!majors) if (!majors)
...@@ -3797,10 +3790,8 @@ static void __exit exit_sd(void) ...@@ -3797,10 +3790,8 @@ static void __exit exit_sd(void)
class_unregister(&sd_disk_class); class_unregister(&sd_disk_class);
for (i = 0; i < SD_MAJORS; i++) { for (i = 0; i < SD_MAJORS; i++)
blk_unregister_region(sd_major(i), SD_MINORS);
unregister_blkdev(sd_major(i), "sd"); unregister_blkdev(sd_major(i), "sd");
}
} }
module_init(init_sd); module_init(init_sd);
......
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