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: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@suse.de> Acked-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
f9550f1b39
commit
996e509bbc
@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user