block: genhd: add 'groups' argument to device_add_disk
commit fef912bf860e8e7e48a2bfb978a356bba743a8b7 upstream. Update device_add_disk() to take an 'groups' argument so that individual drivers can register a device with additional sysfs attributes. This avoids race condition the driver would otherwise have if these groups were to be created with sysfs_add_groups(). Signed-off-by: Martin Wilck <martin.wilck@suse.com> Signed-off-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Jeffle Xu <jefflexu@linux.alibaba.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com>
This commit is contained in:
parent
7540c07de7
commit
54399d7eb2
@ -891,7 +891,7 @@ static int ubd_disk_register(int major, u64 size, int unit,
|
|||||||
|
|
||||||
disk->private_data = &ubd_devs[unit];
|
disk->private_data = &ubd_devs[unit];
|
||||||
disk->queue = ubd_devs[unit].queue;
|
disk->queue = ubd_devs[unit].queue;
|
||||||
device_add_disk(parent, disk);
|
device_add_disk(parent, disk, NULL);
|
||||||
|
|
||||||
*disk_out = disk;
|
*disk_out = disk;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -582,7 +582,8 @@ static int exact_lock(dev_t devt, void *data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void register_disk(struct device *parent, struct gendisk *disk)
|
static void register_disk(struct device *parent, struct gendisk *disk,
|
||||||
|
const struct attribute_group **groups)
|
||||||
{
|
{
|
||||||
struct device *ddev = disk_to_dev(disk);
|
struct device *ddev = disk_to_dev(disk);
|
||||||
struct block_device *bdev;
|
struct block_device *bdev;
|
||||||
@ -597,6 +598,10 @@ static void register_disk(struct device *parent, struct gendisk *disk)
|
|||||||
/* delay uevents, until we scanned partition table */
|
/* delay uevents, until we scanned partition table */
|
||||||
dev_set_uevent_suppress(ddev, 1);
|
dev_set_uevent_suppress(ddev, 1);
|
||||||
|
|
||||||
|
if (groups) {
|
||||||
|
WARN_ON(ddev->groups);
|
||||||
|
ddev->groups = groups;
|
||||||
|
}
|
||||||
if (device_add(ddev))
|
if (device_add(ddev))
|
||||||
return;
|
return;
|
||||||
if (!sysfs_deprecated) {
|
if (!sysfs_deprecated) {
|
||||||
@ -662,6 +667,7 @@ exit:
|
|||||||
* __device_add_disk - add disk information to kernel list
|
* __device_add_disk - add disk information to kernel list
|
||||||
* @parent: parent device for the disk
|
* @parent: parent device for the disk
|
||||||
* @disk: per-device partitioning information
|
* @disk: per-device partitioning information
|
||||||
|
* @groups: Additional per-device sysfs groups
|
||||||
* @register_queue: register the queue if set to true
|
* @register_queue: register the queue if set to true
|
||||||
*
|
*
|
||||||
* This function registers the partitioning information in @disk
|
* This function registers the partitioning information in @disk
|
||||||
@ -670,6 +676,7 @@ exit:
|
|||||||
* FIXME: error handling
|
* FIXME: error handling
|
||||||
*/
|
*/
|
||||||
static void __device_add_disk(struct device *parent, struct gendisk *disk,
|
static void __device_add_disk(struct device *parent, struct gendisk *disk,
|
||||||
|
const struct attribute_group **groups,
|
||||||
bool register_queue)
|
bool register_queue)
|
||||||
{
|
{
|
||||||
dev_t devt;
|
dev_t devt;
|
||||||
@ -713,7 +720,7 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
|
|||||||
blk_register_region(disk_devt(disk), disk->minors, NULL,
|
blk_register_region(disk_devt(disk), disk->minors, NULL,
|
||||||
exact_match, exact_lock, disk);
|
exact_match, exact_lock, disk);
|
||||||
}
|
}
|
||||||
register_disk(parent, disk);
|
register_disk(parent, disk, groups);
|
||||||
if (register_queue)
|
if (register_queue)
|
||||||
blk_register_queue(disk);
|
blk_register_queue(disk);
|
||||||
|
|
||||||
@ -727,15 +734,17 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
|
|||||||
blk_integrity_add(disk);
|
blk_integrity_add(disk);
|
||||||
}
|
}
|
||||||
|
|
||||||
void device_add_disk(struct device *parent, struct gendisk *disk)
|
void device_add_disk(struct device *parent, struct gendisk *disk,
|
||||||
|
const struct attribute_group **groups)
|
||||||
|
|
||||||
{
|
{
|
||||||
__device_add_disk(parent, disk, true);
|
__device_add_disk(parent, disk, groups, true);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(device_add_disk);
|
EXPORT_SYMBOL(device_add_disk);
|
||||||
|
|
||||||
void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk)
|
void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk)
|
||||||
{
|
{
|
||||||
__device_add_disk(parent, disk, false);
|
__device_add_disk(parent, disk, NULL, false);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(device_add_disk_no_queue_reg);
|
EXPORT_SYMBOL(device_add_disk_no_queue_reg);
|
||||||
|
|
||||||
|
@ -4733,7 +4733,7 @@ static int __init do_floppy_init(void)
|
|||||||
/* to be cleaned up... */
|
/* to be cleaned up... */
|
||||||
disks[drive]->private_data = (void *)(long)drive;
|
disks[drive]->private_data = (void *)(long)drive;
|
||||||
disks[drive]->flags |= GENHD_FL_REMOVABLE;
|
disks[drive]->flags |= GENHD_FL_REMOVABLE;
|
||||||
device_add_disk(&floppy_device[drive].dev, disks[drive]);
|
device_add_disk(&floppy_device[drive].dev, disks[drive], NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3861,7 +3861,7 @@ skip_create_disk:
|
|||||||
set_capacity(dd->disk, capacity);
|
set_capacity(dd->disk, capacity);
|
||||||
|
|
||||||
/* Enable the block device and add it to /dev */
|
/* Enable the block device and add it to /dev */
|
||||||
device_add_disk(&dd->pdev->dev, dd->disk);
|
device_add_disk(&dd->pdev->dev, dd->disk, NULL);
|
||||||
|
|
||||||
dd->bdev = bdget_disk(dd->disk, 0);
|
dd->bdev = bdget_disk(dd->disk, 0);
|
||||||
/*
|
/*
|
||||||
|
@ -499,7 +499,7 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev)
|
|||||||
gendisk->disk_name, priv->model, priv->raw_capacity >> 11,
|
gendisk->disk_name, priv->model, priv->raw_capacity >> 11,
|
||||||
get_capacity(gendisk) >> 11);
|
get_capacity(gendisk) >> 11);
|
||||||
|
|
||||||
device_add_disk(&dev->sbd.core, gendisk);
|
device_add_disk(&dev->sbd.core, gendisk, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail_cleanup_queue:
|
fail_cleanup_queue:
|
||||||
|
@ -769,7 +769,7 @@ static int ps3vram_probe(struct ps3_system_bus_device *dev)
|
|||||||
dev_info(&dev->core, "%s: Using %lu MiB of GPU memory\n",
|
dev_info(&dev->core, "%s: Using %lu MiB of GPU memory\n",
|
||||||
gendisk->disk_name, get_capacity(gendisk) >> 11);
|
gendisk->disk_name, get_capacity(gendisk) >> 11);
|
||||||
|
|
||||||
device_add_disk(&dev->core, gendisk);
|
device_add_disk(&dev->core, gendisk, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail_cleanup_queue:
|
fail_cleanup_queue:
|
||||||
|
@ -226,7 +226,7 @@ int rsxx_attach_dev(struct rsxx_cardinfo *card)
|
|||||||
set_capacity(card->gendisk, card->size8 >> 9);
|
set_capacity(card->gendisk, card->size8 >> 9);
|
||||||
else
|
else
|
||||||
set_capacity(card->gendisk, 0);
|
set_capacity(card->gendisk, 0);
|
||||||
device_add_disk(CARD_TO_DEV(card), card->gendisk);
|
device_add_disk(CARD_TO_DEV(card), card->gendisk, NULL);
|
||||||
card->bdev_attached = 1;
|
card->bdev_attached = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3104,7 +3104,7 @@ static int skd_bdev_getgeo(struct block_device *bdev, struct hd_geometry *geo)
|
|||||||
static int skd_bdev_attach(struct device *parent, struct skd_device *skdev)
|
static int skd_bdev_attach(struct device *parent, struct skd_device *skdev)
|
||||||
{
|
{
|
||||||
dev_dbg(&skdev->pdev->dev, "add_disk\n");
|
dev_dbg(&skdev->pdev->dev, "add_disk\n");
|
||||||
device_add_disk(parent, skdev->disk);
|
device_add_disk(parent, skdev->disk, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -862,7 +862,7 @@ static int probe_disk(struct vdc_port *port)
|
|||||||
port->vdisk_size, (port->vdisk_size >> (20 - 9)),
|
port->vdisk_size, (port->vdisk_size >> (20 - 9)),
|
||||||
port->vio.ver.major, port->vio.ver.minor);
|
port->vio.ver.major, port->vio.ver.minor);
|
||||||
|
|
||||||
device_add_disk(&port->vio.vdev->dev, g);
|
device_add_disk(&port->vio.vdev->dev, g, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -866,7 +866,7 @@ static int virtblk_probe(struct virtio_device *vdev)
|
|||||||
virtblk_update_capacity(vblk, false);
|
virtblk_update_capacity(vblk, false);
|
||||||
virtio_device_ready(vdev);
|
virtio_device_ready(vdev);
|
||||||
|
|
||||||
device_add_disk(&vdev->dev, vblk->disk);
|
device_add_disk(&vdev->dev, vblk->disk, NULL);
|
||||||
err = device_create_file(disk_to_dev(vblk->disk), &dev_attr_serial);
|
err = device_create_file(disk_to_dev(vblk->disk), &dev_attr_serial);
|
||||||
if (err)
|
if (err)
|
||||||
goto out_del_disk;
|
goto out_del_disk;
|
||||||
|
@ -550,7 +550,7 @@ static int vs_block_client_disk_add(struct block_client *client)
|
|||||||
client->blkdev = blkdev;
|
client->blkdev = blkdev;
|
||||||
vs_service_state_unlock(client->service);
|
vs_service_state_unlock(client->service);
|
||||||
|
|
||||||
device_add_disk(&client->service->dev, blkdev->disk);
|
device_add_disk(&client->service->dev, blkdev->disk, NULL);
|
||||||
dev_dbg(&client->service->dev, "added block disk '%s'\n",
|
dev_dbg(&client->service->dev, "added block disk '%s'\n",
|
||||||
blkdev->disk->disk_name);
|
blkdev->disk->disk_name);
|
||||||
|
|
||||||
|
@ -2498,7 +2498,7 @@ static void blkfront_connect(struct blkfront_info *info)
|
|||||||
for (i = 0; i < info->nr_rings; i++)
|
for (i = 0; i < info->nr_rings; i++)
|
||||||
kick_pending_request_queues(&info->rinfo[i]);
|
kick_pending_request_queues(&info->rinfo[i]);
|
||||||
|
|
||||||
device_add_disk(&info->xbdev->dev, info->gd);
|
device_add_disk(&info->xbdev->dev, info->gd, NULL);
|
||||||
|
|
||||||
info->is_ready = 1;
|
info->is_ready = 1;
|
||||||
return;
|
return;
|
||||||
|
@ -1784,7 +1784,7 @@ static int ide_cd_probe(ide_drive_t *drive)
|
|||||||
ide_cd_read_toc(drive);
|
ide_cd_read_toc(drive);
|
||||||
g->fops = &idecd_ops;
|
g->fops = &idecd_ops;
|
||||||
g->flags |= GENHD_FL_REMOVABLE | GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE;
|
g->flags |= GENHD_FL_REMOVABLE | GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE;
|
||||||
device_add_disk(&drive->gendev, g);
|
device_add_disk(&drive->gendev, g, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_free_disk:
|
out_free_disk:
|
||||||
|
@ -416,7 +416,7 @@ static int ide_gd_probe(ide_drive_t *drive)
|
|||||||
if (drive->dev_flags & IDE_DFLAG_REMOVABLE)
|
if (drive->dev_flags & IDE_DFLAG_REMOVABLE)
|
||||||
g->flags = GENHD_FL_REMOVABLE;
|
g->flags = GENHD_FL_REMOVABLE;
|
||||||
g->fops = &ide_gd_ops;
|
g->fops = &ide_gd_ops;
|
||||||
device_add_disk(&drive->gendev, g);
|
device_add_disk(&drive->gendev, g, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_free_disk:
|
out_free_disk:
|
||||||
|
@ -2147,7 +2147,7 @@ static int msb_init_disk(struct memstick_dev *card)
|
|||||||
set_disk_ro(msb->disk, 1);
|
set_disk_ro(msb->disk, 1);
|
||||||
|
|
||||||
msb_start(card);
|
msb_start(card);
|
||||||
device_add_disk(&card->dev, msb->disk);
|
device_add_disk(&card->dev, msb->disk, NULL);
|
||||||
dbg("Disk added");
|
dbg("Disk added");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1236,7 +1236,7 @@ static int mspro_block_init_disk(struct memstick_dev *card)
|
|||||||
set_capacity(msb->disk, capacity);
|
set_capacity(msb->disk, capacity);
|
||||||
dev_dbg(&card->dev, "capacity set %ld\n", capacity);
|
dev_dbg(&card->dev, "capacity set %ld\n", capacity);
|
||||||
|
|
||||||
device_add_disk(&card->dev, msb->disk);
|
device_add_disk(&card->dev, msb->disk, NULL);
|
||||||
msb->active = 1;
|
msb->active = 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -2773,7 +2773,7 @@ static int mmc_add_disk(struct mmc_blk_data *md)
|
|||||||
int ret;
|
int ret;
|
||||||
struct mmc_card *card = md->queue.card;
|
struct mmc_card *card = md->queue.card;
|
||||||
|
|
||||||
device_add_disk(md->parent, md->disk);
|
device_add_disk(md->parent, md->disk, NULL);
|
||||||
md->force_ro.show = force_ro_show;
|
md->force_ro.show = force_ro_show;
|
||||||
md->force_ro.store = force_ro_store;
|
md->force_ro.store = force_ro_store;
|
||||||
sysfs_attr_init(&md->force_ro.attr);
|
sysfs_attr_init(&md->force_ro.attr);
|
||||||
|
@ -447,7 +447,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
|
|||||||
if (new->readonly)
|
if (new->readonly)
|
||||||
set_disk_ro(gd, 1);
|
set_disk_ro(gd, 1);
|
||||||
|
|
||||||
device_add_disk(&new->mtd->dev, gd);
|
device_add_disk(&new->mtd->dev, gd, NULL);
|
||||||
|
|
||||||
if (new->disk_attributes) {
|
if (new->disk_attributes) {
|
||||||
ret = sysfs_create_group(&disk_to_dev(gd)->kobj,
|
ret = sysfs_create_group(&disk_to_dev(gd)->kobj,
|
||||||
|
@ -290,7 +290,7 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_capacity(disk, available_disk_size >> SECTOR_SHIFT);
|
set_capacity(disk, available_disk_size >> SECTOR_SHIFT);
|
||||||
device_add_disk(dev, disk);
|
device_add_disk(dev, disk, NULL);
|
||||||
revalidate_disk(disk);
|
revalidate_disk(disk);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1565,7 +1565,7 @@ static int btt_blk_init(struct btt *btt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9);
|
set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9);
|
||||||
device_add_disk(&btt->nd_btt->dev, btt->btt_disk);
|
device_add_disk(&btt->nd_btt->dev, btt->btt_disk, NULL);
|
||||||
btt->nd_btt->size = btt->nlba * (u64)btt->sector_size;
|
btt->nd_btt->size = btt->nlba * (u64)btt->sector_size;
|
||||||
revalidate_disk(btt->btt_disk);
|
revalidate_disk(btt->btt_disk);
|
||||||
|
|
||||||
|
@ -482,7 +482,7 @@ static int pmem_attach_disk(struct device *dev,
|
|||||||
gendev = disk_to_dev(disk);
|
gendev = disk_to_dev(disk);
|
||||||
gendev->groups = pmem_attribute_groups;
|
gendev->groups = pmem_attribute_groups;
|
||||||
|
|
||||||
device_add_disk(dev, disk);
|
device_add_disk(dev, disk, NULL);
|
||||||
if (devm_add_action_or_reset(dev, pmem_release_disk, pmem))
|
if (devm_add_action_or_reset(dev, pmem_release_disk, pmem))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -3216,7 +3216,7 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)
|
|||||||
|
|
||||||
nvme_get_ctrl(ctrl);
|
nvme_get_ctrl(ctrl);
|
||||||
|
|
||||||
device_add_disk(ctrl->device, ns->disk);
|
device_add_disk(ctrl->device, ns->disk, NULL);
|
||||||
if (sysfs_create_group(&disk_to_dev(ns->disk)->kobj,
|
if (sysfs_create_group(&disk_to_dev(ns->disk)->kobj,
|
||||||
&nvme_ns_id_attr_group))
|
&nvme_ns_id_attr_group))
|
||||||
pr_warn("%s: failed to create sysfs group for identification\n",
|
pr_warn("%s: failed to create sysfs group for identification\n",
|
||||||
|
@ -314,7 +314,7 @@ static void nvme_mpath_set_live(struct nvme_ns *ns)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(head->disk->flags & GENHD_FL_UP)) {
|
if (!(head->disk->flags & GENHD_FL_UP)) {
|
||||||
device_add_disk(&head->subsys->dev, head->disk);
|
device_add_disk(&head->subsys->dev, head->disk, NULL);
|
||||||
if (sysfs_create_group(&disk_to_dev(head->disk)->kobj,
|
if (sysfs_create_group(&disk_to_dev(head->disk)->kobj,
|
||||||
&nvme_ns_id_attr_group))
|
&nvme_ns_id_attr_group))
|
||||||
dev_warn(&head->subsys->dev,
|
dev_warn(&head->subsys->dev,
|
||||||
|
@ -76,7 +76,7 @@ int dasd_gendisk_alloc(struct dasd_block *block)
|
|||||||
gdp->queue = block->request_queue;
|
gdp->queue = block->request_queue;
|
||||||
block->gdp = gdp;
|
block->gdp = gdp;
|
||||||
set_capacity(block->gdp, 0);
|
set_capacity(block->gdp, 0);
|
||||||
device_add_disk(&base->cdev->dev, block->gdp);
|
device_add_disk(&base->cdev->dev, block->gdp, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -685,7 +685,7 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_device(&dev_info->dev);
|
get_device(&dev_info->dev);
|
||||||
device_add_disk(&dev_info->dev, dev_info->gd);
|
device_add_disk(&dev_info->dev, dev_info->gd, NULL);
|
||||||
|
|
||||||
switch (dev_info->segment_type) {
|
switch (dev_info->segment_type) {
|
||||||
case SEG_TYPE_SR:
|
case SEG_TYPE_SR:
|
||||||
|
@ -500,7 +500,7 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev)
|
|||||||
|
|
||||||
/* 512 byte sectors */
|
/* 512 byte sectors */
|
||||||
set_capacity(bdev->gendisk, scmdev->size >> 9);
|
set_capacity(bdev->gendisk, scmdev->size >> 9);
|
||||||
device_add_disk(&scmdev->dev, bdev->gendisk);
|
device_add_disk(&scmdev->dev, bdev->gendisk, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_queue:
|
out_queue:
|
||||||
|
@ -3262,7 +3262,7 @@ static void sd_probe_async(void *data, async_cookie_t cookie)
|
|||||||
if (sdp->autosuspend_delay >= 0)
|
if (sdp->autosuspend_delay >= 0)
|
||||||
pm_runtime_set_autosuspend_delay(dev, sdp->autosuspend_delay);
|
pm_runtime_set_autosuspend_delay(dev, sdp->autosuspend_delay);
|
||||||
|
|
||||||
device_add_disk(dev, gd);
|
device_add_disk(dev, gd, NULL);
|
||||||
if (sdkp->capacity)
|
if (sdkp->capacity)
|
||||||
sd_dif_config_host(sdkp);
|
sd_dif_config_host(sdkp);
|
||||||
|
|
||||||
|
@ -760,7 +760,7 @@ static int sr_probe(struct device *dev)
|
|||||||
|
|
||||||
dev_set_drvdata(dev, cd);
|
dev_set_drvdata(dev, cd);
|
||||||
disk->flags |= GENHD_FL_REMOVABLE;
|
disk->flags |= GENHD_FL_REMOVABLE;
|
||||||
device_add_disk(&sdev->sdev_gendev, disk);
|
device_add_disk(&sdev->sdev_gendev, disk, NULL);
|
||||||
|
|
||||||
sdev_printk(KERN_DEBUG, sdev,
|
sdev_printk(KERN_DEBUG, sdev,
|
||||||
"Attached scsi CD-ROM %s\n", cd->cdi.name);
|
"Attached scsi CD-ROM %s\n", cd->cdi.name);
|
||||||
|
@ -417,10 +417,11 @@ static inline void free_part_info(struct hd_struct *part)
|
|||||||
extern void part_round_stats(struct request_queue *q, int cpu, struct hd_struct *part);
|
extern void part_round_stats(struct request_queue *q, int cpu, struct hd_struct *part);
|
||||||
|
|
||||||
/* block/genhd.c */
|
/* block/genhd.c */
|
||||||
extern void device_add_disk(struct device *parent, struct gendisk *disk);
|
extern void device_add_disk(struct device *parent, struct gendisk *disk,
|
||||||
|
const struct attribute_group **groups);
|
||||||
static inline void add_disk(struct gendisk *disk)
|
static inline void add_disk(struct gendisk *disk)
|
||||||
{
|
{
|
||||||
device_add_disk(NULL, disk);
|
device_add_disk(NULL, disk, NULL);
|
||||||
}
|
}
|
||||||
extern void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk);
|
extern void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk);
|
||||||
static inline void add_disk_no_queue_reg(struct gendisk *disk)
|
static inline void add_disk_no_queue_reg(struct gendisk *disk)
|
||||||
|
Loading…
Reference in New Issue
Block a user