diff options
author | Hannes Reinecke <hare@suse.de> | 2018-09-28 02:17:19 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-09-28 10:30:28 -0400 |
commit | fef912bf860e8e7e48a2bfb978a356bba743a8b7 (patch) | |
tree | 5cc5e4a4a02c9b898a1afc8e056664b762a1c852 | |
parent | 6c3b7af1c975b87b86dcb2af233d1ae21eb05107 (diff) |
block: genhd: add 'groups' argument to device_add_disk
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>
28 files changed, 43 insertions, 33 deletions
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 83c470364dfb..6ee4c56032f7 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
@@ -891,7 +891,7 @@ static int ubd_disk_register(int major, u64 size, int unit, | |||
891 | 891 | ||
892 | disk->private_data = &ubd_devs[unit]; | 892 | disk->private_data = &ubd_devs[unit]; |
893 | disk->queue = ubd_devs[unit].queue; | 893 | disk->queue = ubd_devs[unit].queue; |
894 | device_add_disk(parent, disk); | 894 | device_add_disk(parent, disk, NULL); |
895 | 895 | ||
896 | *disk_out = disk; | 896 | *disk_out = disk; |
897 | return 0; | 897 | return 0; |
diff --git a/block/genhd.c b/block/genhd.c index 8cc719a37b32..ef0936184d69 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
@@ -567,7 +567,8 @@ static int exact_lock(dev_t devt, void *data) | |||
567 | return 0; | 567 | return 0; |
568 | } | 568 | } |
569 | 569 | ||
570 | static void register_disk(struct device *parent, struct gendisk *disk) | 570 | static void register_disk(struct device *parent, struct gendisk *disk, |
571 | const struct attribute_group **groups) | ||
571 | { | 572 | { |
572 | struct device *ddev = disk_to_dev(disk); | 573 | struct device *ddev = disk_to_dev(disk); |
573 | struct block_device *bdev; | 574 | struct block_device *bdev; |
@@ -582,6 +583,10 @@ static void register_disk(struct device *parent, struct gendisk *disk) | |||
582 | /* delay uevents, until we scanned partition table */ | 583 | /* delay uevents, until we scanned partition table */ |
583 | dev_set_uevent_suppress(ddev, 1); | 584 | dev_set_uevent_suppress(ddev, 1); |
584 | 585 | ||
586 | if (groups) { | ||
587 | WARN_ON(ddev->groups); | ||
588 | ddev->groups = groups; | ||
589 | } | ||
585 | if (device_add(ddev)) | 590 | if (device_add(ddev)) |
586 | return; | 591 | return; |
587 | if (!sysfs_deprecated) { | 592 | if (!sysfs_deprecated) { |
@@ -647,6 +652,7 @@ exit: | |||
647 | * __device_add_disk - add disk information to kernel list | 652 | * __device_add_disk - add disk information to kernel list |
648 | * @parent: parent device for the disk | 653 | * @parent: parent device for the disk |
649 | * @disk: per-device partitioning information | 654 | * @disk: per-device partitioning information |
655 | * @groups: Additional per-device sysfs groups | ||
650 | * @register_queue: register the queue if set to true | 656 | * @register_queue: register the queue if set to true |
651 | * | 657 | * |
652 | * This function registers the partitioning information in @disk | 658 | * This function registers the partitioning information in @disk |
@@ -655,6 +661,7 @@ exit: | |||
655 | * FIXME: error handling | 661 | * FIXME: error handling |
656 | */ | 662 | */ |
657 | static void __device_add_disk(struct device *parent, struct gendisk *disk, | 663 | static void __device_add_disk(struct device *parent, struct gendisk *disk, |
664 | const struct attribute_group **groups, | ||
658 | bool register_queue) | 665 | bool register_queue) |
659 | { | 666 | { |
660 | dev_t devt; | 667 | dev_t devt; |
@@ -698,7 +705,7 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk, | |||
698 | blk_register_region(disk_devt(disk), disk->minors, NULL, | 705 | blk_register_region(disk_devt(disk), disk->minors, NULL, |
699 | exact_match, exact_lock, disk); | 706 | exact_match, exact_lock, disk); |
700 | } | 707 | } |
701 | register_disk(parent, disk); | 708 | register_disk(parent, disk, groups); |
702 | if (register_queue) | 709 | if (register_queue) |
703 | blk_register_queue(disk); | 710 | blk_register_queue(disk); |
704 | 711 | ||
@@ -712,15 +719,17 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk, | |||
712 | blk_integrity_add(disk); | 719 | blk_integrity_add(disk); |
713 | } | 720 | } |
714 | 721 | ||
715 | void device_add_disk(struct device *parent, struct gendisk *disk) | 722 | void device_add_disk(struct device *parent, struct gendisk *disk, |
723 | const struct attribute_group **groups) | ||
724 | |||
716 | { | 725 | { |
717 | __device_add_disk(parent, disk, true); | 726 | __device_add_disk(parent, disk, groups, true); |
718 | } | 727 | } |
719 | EXPORT_SYMBOL(device_add_disk); | 728 | EXPORT_SYMBOL(device_add_disk); |
720 | 729 | ||
721 | void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk) | 730 | void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk) |
722 | { | 731 | { |
723 | __device_add_disk(parent, disk, false); | 732 | __device_add_disk(parent, disk, NULL, false); |
724 | } | 733 | } |
725 | EXPORT_SYMBOL(device_add_disk_no_queue_reg); | 734 | EXPORT_SYMBOL(device_add_disk_no_queue_reg); |
726 | 735 | ||
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index 48f622728ce6..1bc99e9dfaee 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c | |||
@@ -4676,7 +4676,7 @@ static int __init do_floppy_init(void) | |||
4676 | /* to be cleaned up... */ | 4676 | /* to be cleaned up... */ |
4677 | disks[drive]->private_data = (void *)(long)drive; | 4677 | disks[drive]->private_data = (void *)(long)drive; |
4678 | disks[drive]->flags |= GENHD_FL_REMOVABLE; | 4678 | disks[drive]->flags |= GENHD_FL_REMOVABLE; |
4679 | device_add_disk(&floppy_device[drive].dev, disks[drive]); | 4679 | device_add_disk(&floppy_device[drive].dev, disks[drive], NULL); |
4680 | } | 4680 | } |
4681 | 4681 | ||
4682 | return 0; | 4682 | return 0; |
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c index d0666f5ce003..1d7d48d8a205 100644 --- a/drivers/block/mtip32xx/mtip32xx.c +++ b/drivers/block/mtip32xx/mtip32xx.c | |||
@@ -3861,7 +3861,7 @@ skip_create_disk: | |||
3861 | set_capacity(dd->disk, capacity); | 3861 | set_capacity(dd->disk, capacity); |
3862 | 3862 | ||
3863 | /* Enable the block device and add it to /dev */ | 3863 | /* Enable the block device and add it to /dev */ |
3864 | device_add_disk(&dd->pdev->dev, dd->disk); | 3864 | device_add_disk(&dd->pdev->dev, dd->disk, NULL); |
3865 | 3865 | ||
3866 | dd->bdev = bdget_disk(dd->disk, 0); | 3866 | dd->bdev = bdget_disk(dd->disk, 0); |
3867 | /* | 3867 | /* |
diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c index afe1508d82c6..29a4419e8ba3 100644 --- a/drivers/block/ps3disk.c +++ b/drivers/block/ps3disk.c | |||
@@ -500,7 +500,7 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev) | |||
500 | gendisk->disk_name, priv->model, priv->raw_capacity >> 11, | 500 | gendisk->disk_name, priv->model, priv->raw_capacity >> 11, |
501 | get_capacity(gendisk) >> 11); | 501 | get_capacity(gendisk) >> 11); |
502 | 502 | ||
503 | device_add_disk(&dev->sbd.core, gendisk); | 503 | device_add_disk(&dev->sbd.core, gendisk, NULL); |
504 | return 0; | 504 | return 0; |
505 | 505 | ||
506 | fail_cleanup_queue: | 506 | fail_cleanup_queue: |
diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c index 1e3d5de9d838..c0c50816a10b 100644 --- a/drivers/block/ps3vram.c +++ b/drivers/block/ps3vram.c | |||
@@ -769,7 +769,7 @@ static int ps3vram_probe(struct ps3_system_bus_device *dev) | |||
769 | dev_info(&dev->core, "%s: Using %lu MiB of GPU memory\n", | 769 | dev_info(&dev->core, "%s: Using %lu MiB of GPU memory\n", |
770 | gendisk->disk_name, get_capacity(gendisk) >> 11); | 770 | gendisk->disk_name, get_capacity(gendisk) >> 11); |
771 | 771 | ||
772 | device_add_disk(&dev->core, gendisk); | 772 | device_add_disk(&dev->core, gendisk, NULL); |
773 | return 0; | 773 | return 0; |
774 | 774 | ||
775 | fail_cleanup_queue: | 775 | fail_cleanup_queue: |
diff --git a/drivers/block/rsxx/dev.c b/drivers/block/rsxx/dev.c index 1a92f9e65937..3894aa0f350b 100644 --- a/drivers/block/rsxx/dev.c +++ b/drivers/block/rsxx/dev.c | |||
@@ -226,7 +226,7 @@ int rsxx_attach_dev(struct rsxx_cardinfo *card) | |||
226 | set_capacity(card->gendisk, card->size8 >> 9); | 226 | set_capacity(card->gendisk, card->size8 >> 9); |
227 | else | 227 | else |
228 | set_capacity(card->gendisk, 0); | 228 | set_capacity(card->gendisk, 0); |
229 | device_add_disk(CARD_TO_DEV(card), card->gendisk); | 229 | device_add_disk(CARD_TO_DEV(card), card->gendisk, NULL); |
230 | card->bdev_attached = 1; | 230 | card->bdev_attached = 1; |
231 | } | 231 | } |
232 | 232 | ||
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c index 87b9e7fbf062..a85c9a622c41 100644 --- a/drivers/block/skd_main.c +++ b/drivers/block/skd_main.c | |||
@@ -3104,7 +3104,7 @@ static int skd_bdev_getgeo(struct block_device *bdev, struct hd_geometry *geo) | |||
3104 | static int skd_bdev_attach(struct device *parent, struct skd_device *skdev) | 3104 | static int skd_bdev_attach(struct device *parent, struct skd_device *skdev) |
3105 | { | 3105 | { |
3106 | dev_dbg(&skdev->pdev->dev, "add_disk\n"); | 3106 | dev_dbg(&skdev->pdev->dev, "add_disk\n"); |
3107 | device_add_disk(parent, skdev->disk); | 3107 | device_add_disk(parent, skdev->disk, NULL); |
3108 | return 0; | 3108 | return 0; |
3109 | } | 3109 | } |
3110 | 3110 | ||
diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c index 5ca56bfae63c..09409edce384 100644 --- a/drivers/block/sunvdc.c +++ b/drivers/block/sunvdc.c | |||
@@ -850,7 +850,7 @@ static int probe_disk(struct vdc_port *port) | |||
850 | port->vdisk_size, (port->vdisk_size >> (20 - 9)), | 850 | port->vdisk_size, (port->vdisk_size >> (20 - 9)), |
851 | port->vio.ver.major, port->vio.ver.minor); | 851 | port->vio.ver.major, port->vio.ver.minor); |
852 | 852 | ||
853 | device_add_disk(&port->vio.vdev->dev, g); | 853 | device_add_disk(&port->vio.vdev->dev, g, NULL); |
854 | 854 | ||
855 | return 0; | 855 | return 0; |
856 | } | 856 | } |
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 23752dc99b00..fe80560000a1 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
@@ -780,7 +780,7 @@ static int virtblk_probe(struct virtio_device *vdev) | |||
780 | virtblk_update_capacity(vblk, false); | 780 | virtblk_update_capacity(vblk, false); |
781 | virtio_device_ready(vdev); | 781 | virtio_device_ready(vdev); |
782 | 782 | ||
783 | device_add_disk(&vdev->dev, vblk->disk); | 783 | device_add_disk(&vdev->dev, vblk->disk, NULL); |
784 | err = device_create_file(disk_to_dev(vblk->disk), &dev_attr_serial); | 784 | err = device_create_file(disk_to_dev(vblk->disk), &dev_attr_serial); |
785 | if (err) | 785 | if (err) |
786 | goto out_del_disk; | 786 | goto out_del_disk; |
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index a71d817e900d..e5e40272d233 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c | |||
@@ -2420,7 +2420,7 @@ static void blkfront_connect(struct blkfront_info *info) | |||
2420 | for (i = 0; i < info->nr_rings; i++) | 2420 | for (i = 0; i < info->nr_rings; i++) |
2421 | kick_pending_request_queues(&info->rinfo[i]); | 2421 | kick_pending_request_queues(&info->rinfo[i]); |
2422 | 2422 | ||
2423 | device_add_disk(&info->xbdev->dev, info->gd); | 2423 | device_add_disk(&info->xbdev->dev, info->gd, NULL); |
2424 | 2424 | ||
2425 | info->is_ready = 1; | 2425 | info->is_ready = 1; |
2426 | return; | 2426 | return; |
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 44a7a255ef74..f9b59d41813f 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -1784,7 +1784,7 @@ static int ide_cd_probe(ide_drive_t *drive) | |||
1784 | ide_cd_read_toc(drive); | 1784 | ide_cd_read_toc(drive); |
1785 | g->fops = &idecd_ops; | 1785 | g->fops = &idecd_ops; |
1786 | g->flags |= GENHD_FL_REMOVABLE | GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE; | 1786 | g->flags |= GENHD_FL_REMOVABLE | GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE; |
1787 | device_add_disk(&drive->gendev, g); | 1787 | device_add_disk(&drive->gendev, g, NULL); |
1788 | return 0; | 1788 | return 0; |
1789 | 1789 | ||
1790 | out_free_disk: | 1790 | out_free_disk: |
diff --git a/drivers/ide/ide-gd.c b/drivers/ide/ide-gd.c index e823394ed543..04e008e8f6f9 100644 --- a/drivers/ide/ide-gd.c +++ b/drivers/ide/ide-gd.c | |||
@@ -416,7 +416,7 @@ static int ide_gd_probe(ide_drive_t *drive) | |||
416 | if (drive->dev_flags & IDE_DFLAG_REMOVABLE) | 416 | if (drive->dev_flags & IDE_DFLAG_REMOVABLE) |
417 | g->flags = GENHD_FL_REMOVABLE; | 417 | g->flags = GENHD_FL_REMOVABLE; |
418 | g->fops = &ide_gd_ops; | 418 | g->fops = &ide_gd_ops; |
419 | device_add_disk(&drive->gendev, g); | 419 | device_add_disk(&drive->gendev, g, NULL); |
420 | return 0; | 420 | return 0; |
421 | 421 | ||
422 | out_free_disk: | 422 | out_free_disk: |
diff --git a/drivers/memstick/core/ms_block.c b/drivers/memstick/core/ms_block.c index 716fc8ed31d3..8a02f11076f9 100644 --- a/drivers/memstick/core/ms_block.c +++ b/drivers/memstick/core/ms_block.c | |||
@@ -2146,7 +2146,7 @@ static int msb_init_disk(struct memstick_dev *card) | |||
2146 | set_disk_ro(msb->disk, 1); | 2146 | set_disk_ro(msb->disk, 1); |
2147 | 2147 | ||
2148 | msb_start(card); | 2148 | msb_start(card); |
2149 | device_add_disk(&card->dev, msb->disk); | 2149 | device_add_disk(&card->dev, msb->disk, NULL); |
2150 | dbg("Disk added"); | 2150 | dbg("Disk added"); |
2151 | return 0; | 2151 | return 0; |
2152 | 2152 | ||
diff --git a/drivers/memstick/core/mspro_block.c b/drivers/memstick/core/mspro_block.c index 5ee932631fae..0cd30dcb6801 100644 --- a/drivers/memstick/core/mspro_block.c +++ b/drivers/memstick/core/mspro_block.c | |||
@@ -1236,7 +1236,7 @@ static int mspro_block_init_disk(struct memstick_dev *card) | |||
1236 | set_capacity(msb->disk, capacity); | 1236 | set_capacity(msb->disk, capacity); |
1237 | dev_dbg(&card->dev, "capacity set %ld\n", capacity); | 1237 | dev_dbg(&card->dev, "capacity set %ld\n", capacity); |
1238 | 1238 | ||
1239 | device_add_disk(&card->dev, msb->disk); | 1239 | device_add_disk(&card->dev, msb->disk, NULL); |
1240 | msb->active = 1; | 1240 | msb->active = 1; |
1241 | return 0; | 1241 | return 0; |
1242 | 1242 | ||
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index a0b9102c4c6e..de8e1a8be690 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c | |||
@@ -2698,7 +2698,7 @@ static int mmc_add_disk(struct mmc_blk_data *md) | |||
2698 | int ret; | 2698 | int ret; |
2699 | struct mmc_card *card = md->queue.card; | 2699 | struct mmc_card *card = md->queue.card; |
2700 | 2700 | ||
2701 | device_add_disk(md->parent, md->disk); | 2701 | device_add_disk(md->parent, md->disk, NULL); |
2702 | md->force_ro.show = force_ro_show; | 2702 | md->force_ro.show = force_ro_show; |
2703 | md->force_ro.store = force_ro_store; | 2703 | md->force_ro.store = force_ro_store; |
2704 | sysfs_attr_init(&md->force_ro.attr); | 2704 | sysfs_attr_init(&md->force_ro.attr); |
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c index 29c0bfd74e8a..6a41dfa3c36b 100644 --- a/drivers/mtd/mtd_blkdevs.c +++ b/drivers/mtd/mtd_blkdevs.c | |||
@@ -447,7 +447,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new) | |||
447 | if (new->readonly) | 447 | if (new->readonly) |
448 | set_disk_ro(gd, 1); | 448 | set_disk_ro(gd, 1); |
449 | 449 | ||
450 | device_add_disk(&new->mtd->dev, gd); | 450 | device_add_disk(&new->mtd->dev, gd, NULL); |
451 | 451 | ||
452 | if (new->disk_attributes) { | 452 | if (new->disk_attributes) { |
453 | ret = sysfs_create_group(&disk_to_dev(gd)->kobj, | 453 | ret = sysfs_create_group(&disk_to_dev(gd)->kobj, |
diff --git a/drivers/nvdimm/blk.c b/drivers/nvdimm/blk.c index 62e9cb167aad..db45c6bbb7bb 100644 --- a/drivers/nvdimm/blk.c +++ b/drivers/nvdimm/blk.c | |||
@@ -290,7 +290,7 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk) | |||
290 | } | 290 | } |
291 | 291 | ||
292 | set_capacity(disk, available_disk_size >> SECTOR_SHIFT); | 292 | set_capacity(disk, available_disk_size >> SECTOR_SHIFT); |
293 | device_add_disk(dev, disk); | 293 | device_add_disk(dev, disk, NULL); |
294 | revalidate_disk(disk); | 294 | revalidate_disk(disk); |
295 | return 0; | 295 | return 0; |
296 | } | 296 | } |
diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c index 0360c015f658..b123b0dcf274 100644 --- a/drivers/nvdimm/btt.c +++ b/drivers/nvdimm/btt.c | |||
@@ -1556,7 +1556,7 @@ static int btt_blk_init(struct btt *btt) | |||
1556 | } | 1556 | } |
1557 | } | 1557 | } |
1558 | set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9); | 1558 | set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9); |
1559 | device_add_disk(&btt->nd_btt->dev, btt->btt_disk); | 1559 | device_add_disk(&btt->nd_btt->dev, btt->btt_disk, NULL); |
1560 | btt->nd_btt->size = btt->nlba * (u64)btt->sector_size; | 1560 | btt->nd_btt->size = btt->nlba * (u64)btt->sector_size; |
1561 | revalidate_disk(btt->btt_disk); | 1561 | revalidate_disk(btt->btt_disk); |
1562 | 1562 | ||
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index 6071e2942053..a75d10c23d80 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c | |||
@@ -474,7 +474,7 @@ static int pmem_attach_disk(struct device *dev, | |||
474 | gendev = disk_to_dev(disk); | 474 | gendev = disk_to_dev(disk); |
475 | gendev->groups = pmem_attribute_groups; | 475 | gendev->groups = pmem_attribute_groups; |
476 | 476 | ||
477 | device_add_disk(dev, disk); | 477 | device_add_disk(dev, disk, NULL); |
478 | if (devm_add_action_or_reset(dev, pmem_release_disk, pmem)) | 478 | if (devm_add_action_or_reset(dev, pmem_release_disk, pmem)) |
479 | return -ENOMEM; | 479 | return -ENOMEM; |
480 | 480 | ||
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index dd8ec1dd9219..0e824e8c8fd7 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c | |||
@@ -3099,7 +3099,7 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid) | |||
3099 | 3099 | ||
3100 | nvme_get_ctrl(ctrl); | 3100 | nvme_get_ctrl(ctrl); |
3101 | 3101 | ||
3102 | device_add_disk(ctrl->device, ns->disk); | 3102 | device_add_disk(ctrl->device, ns->disk, NULL); |
3103 | if (sysfs_create_group(&disk_to_dev(ns->disk)->kobj, | 3103 | if (sysfs_create_group(&disk_to_dev(ns->disk)->kobj, |
3104 | &nvme_ns_id_attr_group)) | 3104 | &nvme_ns_id_attr_group)) |
3105 | pr_warn("%s: failed to create sysfs group for identification\n", | 3105 | pr_warn("%s: failed to create sysfs group for identification\n", |
diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 5a9562881d4e..477af51d01e8 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c | |||
@@ -283,7 +283,7 @@ static void nvme_mpath_set_live(struct nvme_ns *ns) | |||
283 | return; | 283 | return; |
284 | 284 | ||
285 | if (!(head->disk->flags & GENHD_FL_UP)) { | 285 | if (!(head->disk->flags & GENHD_FL_UP)) { |
286 | device_add_disk(&head->subsys->dev, head->disk); | 286 | device_add_disk(&head->subsys->dev, head->disk, NULL); |
287 | if (sysfs_create_group(&disk_to_dev(head->disk)->kobj, | 287 | if (sysfs_create_group(&disk_to_dev(head->disk)->kobj, |
288 | &nvme_ns_id_attr_group)) | 288 | &nvme_ns_id_attr_group)) |
289 | dev_warn(&head->subsys->dev, | 289 | dev_warn(&head->subsys->dev, |
diff --git a/drivers/s390/block/dasd_genhd.c b/drivers/s390/block/dasd_genhd.c index 7036a6c6f86f..5542d9eadfe0 100644 --- a/drivers/s390/block/dasd_genhd.c +++ b/drivers/s390/block/dasd_genhd.c | |||
@@ -76,7 +76,7 @@ int dasd_gendisk_alloc(struct dasd_block *block) | |||
76 | gdp->queue = block->request_queue; | 76 | gdp->queue = block->request_queue; |
77 | block->gdp = gdp; | 77 | block->gdp = gdp; |
78 | set_capacity(block->gdp, 0); | 78 | set_capacity(block->gdp, 0); |
79 | device_add_disk(&base->cdev->dev, block->gdp); | 79 | device_add_disk(&base->cdev->dev, block->gdp, NULL); |
80 | return 0; | 80 | return 0; |
81 | } | 81 | } |
82 | 82 | ||
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c index 23e526cda5c1..4e8aedd50cb0 100644 --- a/drivers/s390/block/dcssblk.c +++ b/drivers/s390/block/dcssblk.c | |||
@@ -685,7 +685,7 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char | |||
685 | } | 685 | } |
686 | 686 | ||
687 | get_device(&dev_info->dev); | 687 | get_device(&dev_info->dev); |
688 | device_add_disk(&dev_info->dev, dev_info->gd); | 688 | device_add_disk(&dev_info->dev, dev_info->gd, NULL); |
689 | 689 | ||
690 | switch (dev_info->segment_type) { | 690 | switch (dev_info->segment_type) { |
691 | case SEG_TYPE_SR: | 691 | case SEG_TYPE_SR: |
diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c index 98f66b7b6794..e01889394c84 100644 --- a/drivers/s390/block/scm_blk.c +++ b/drivers/s390/block/scm_blk.c | |||
@@ -500,7 +500,7 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) | |||
500 | 500 | ||
501 | /* 512 byte sectors */ | 501 | /* 512 byte sectors */ |
502 | set_capacity(bdev->gendisk, scmdev->size >> 9); | 502 | set_capacity(bdev->gendisk, scmdev->size >> 9); |
503 | device_add_disk(&scmdev->dev, bdev->gendisk); | 503 | device_add_disk(&scmdev->dev, bdev->gendisk, NULL); |
504 | return 0; | 504 | return 0; |
505 | 505 | ||
506 | out_queue: | 506 | out_queue: |
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 64514e8359e4..67ed5906b462 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -3272,7 +3272,7 @@ static void sd_probe_async(void *data, async_cookie_t cookie) | |||
3272 | } | 3272 | } |
3273 | 3273 | ||
3274 | blk_pm_runtime_init(sdp->request_queue, dev); | 3274 | blk_pm_runtime_init(sdp->request_queue, dev); |
3275 | device_add_disk(dev, gd); | 3275 | device_add_disk(dev, gd, NULL); |
3276 | if (sdkp->capacity) | 3276 | if (sdkp->capacity) |
3277 | sd_dif_config_host(sdkp); | 3277 | sd_dif_config_host(sdkp); |
3278 | 3278 | ||
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index 4f07b3410595..54dd70ae9731 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c | |||
@@ -759,7 +759,7 @@ static int sr_probe(struct device *dev) | |||
759 | 759 | ||
760 | dev_set_drvdata(dev, cd); | 760 | dev_set_drvdata(dev, cd); |
761 | disk->flags |= GENHD_FL_REMOVABLE; | 761 | disk->flags |= GENHD_FL_REMOVABLE; |
762 | device_add_disk(&sdev->sdev_gendev, disk); | 762 | device_add_disk(&sdev->sdev_gendev, disk, NULL); |
763 | 763 | ||
764 | sdev_printk(KERN_DEBUG, sdev, | 764 | sdev_printk(KERN_DEBUG, sdev, |
765 | "Attached scsi CD-ROM %s\n", cd->cdi.name); | 765 | "Attached scsi CD-ROM %s\n", cd->cdi.name); |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 57864422a2c8..0b820ff05839 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
@@ -399,10 +399,11 @@ static inline void free_part_info(struct hd_struct *part) | |||
399 | extern void part_round_stats(struct request_queue *q, int cpu, struct hd_struct *part); | 399 | extern void part_round_stats(struct request_queue *q, int cpu, struct hd_struct *part); |
400 | 400 | ||
401 | /* block/genhd.c */ | 401 | /* block/genhd.c */ |
402 | extern void device_add_disk(struct device *parent, struct gendisk *disk); | 402 | extern void device_add_disk(struct device *parent, struct gendisk *disk, |
403 | const struct attribute_group **groups); | ||
403 | static inline void add_disk(struct gendisk *disk) | 404 | static inline void add_disk(struct gendisk *disk) |
404 | { | 405 | { |
405 | device_add_disk(NULL, disk); | 406 | device_add_disk(NULL, disk, NULL); |
406 | } | 407 | } |
407 | extern void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk); | 408 | extern void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk); |
408 | static inline void add_disk_no_queue_reg(struct gendisk *disk) | 409 | static inline void add_disk_no_queue_reg(struct gendisk *disk) |