summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2018-09-28 02:17:19 -0400
committerJens Axboe <axboe@kernel.dk>2018-09-28 10:30:28 -0400
commitfef912bf860e8e7e48a2bfb978a356bba743a8b7 (patch)
tree5cc5e4a4a02c9b898a1afc8e056664b762a1c852
parent6c3b7af1c975b87b86dcb2af233d1ae21eb05107 (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>
-rw-r--r--arch/um/drivers/ubd_kern.c2
-rw-r--r--block/genhd.c19
-rw-r--r--drivers/block/floppy.c2
-rw-r--r--drivers/block/mtip32xx/mtip32xx.c2
-rw-r--r--drivers/block/ps3disk.c2
-rw-r--r--drivers/block/ps3vram.c2
-rw-r--r--drivers/block/rsxx/dev.c2
-rw-r--r--drivers/block/skd_main.c2
-rw-r--r--drivers/block/sunvdc.c2
-rw-r--r--drivers/block/virtio_blk.c2
-rw-r--r--drivers/block/xen-blkfront.c2
-rw-r--r--drivers/ide/ide-cd.c2
-rw-r--r--drivers/ide/ide-gd.c2
-rw-r--r--drivers/memstick/core/ms_block.c2
-rw-r--r--drivers/memstick/core/mspro_block.c2
-rw-r--r--drivers/mmc/core/block.c2
-rw-r--r--drivers/mtd/mtd_blkdevs.c2
-rw-r--r--drivers/nvdimm/blk.c2
-rw-r--r--drivers/nvdimm/btt.c2
-rw-r--r--drivers/nvdimm/pmem.c2
-rw-r--r--drivers/nvme/host/core.c2
-rw-r--r--drivers/nvme/host/multipath.c2
-rw-r--r--drivers/s390/block/dasd_genhd.c2
-rw-r--r--drivers/s390/block/dcssblk.c2
-rw-r--r--drivers/s390/block/scm_blk.c2
-rw-r--r--drivers/scsi/sd.c2
-rw-r--r--drivers/scsi/sr.c2
-rw-r--r--include/linux/genhd.h5
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
570static void register_disk(struct device *parent, struct gendisk *disk) 570static 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 */
657static void __device_add_disk(struct device *parent, struct gendisk *disk, 663static 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
715void device_add_disk(struct device *parent, struct gendisk *disk) 722void 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}
719EXPORT_SYMBOL(device_add_disk); 728EXPORT_SYMBOL(device_add_disk);
720 729
721void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk) 730void 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}
725EXPORT_SYMBOL(device_add_disk_no_queue_reg); 734EXPORT_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
506fail_cleanup_queue: 506fail_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
775fail_cleanup_queue: 775fail_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)
3104static int skd_bdev_attach(struct device *parent, struct skd_device *skdev) 3104static 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
1790out_free_disk: 1790out_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
422out_free_disk: 422out_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
506out_queue: 506out_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)
399extern void part_round_stats(struct request_queue *q, int cpu, struct hd_struct *part); 399extern void part_round_stats(struct request_queue *q, int cpu, struct hd_struct *part);
400 400
401/* block/genhd.c */ 401/* block/genhd.c */
402extern void device_add_disk(struct device *parent, struct gendisk *disk); 402extern void device_add_disk(struct device *parent, struct gendisk *disk,
403 const struct attribute_group **groups);
403static inline void add_disk(struct gendisk *disk) 404static inline void add_disk(struct gendisk *disk)
404{ 405{
405 device_add_disk(NULL, disk); 406 device_add_disk(NULL, disk, NULL);
406} 407}
407extern void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk); 408extern void device_add_disk_no_queue_reg(struct device *parent, struct gendisk *disk);
408static inline void add_disk_no_queue_reg(struct gendisk *disk) 409static inline void add_disk_no_queue_reg(struct gendisk *disk)