summaryrefslogtreecommitdiffstats
path: root/block/genhd.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2017-03-08 11:48:34 -0500
committerJens Axboe <axboe@fb.com>2017-03-08 12:55:17 -0500
commitc01228db4ba965986511a5b28c478bddd7e2726e (patch)
tree41fe10418d432b17e93898ed9f84b8aebc78c7ad /block/genhd.c
parent90f16fddcc2802726142b8386c65ccb89f044613 (diff)
Revert "scsi, block: fix duplicate bdi name registration crashes"
This reverts commit 0dba1314d4f81115dce711292ec7981d17231064. It causes leaking of device numbers for SCSI when SCSI registers multiple gendisks for one request_queue in succession. It can be easily reproduced using Omar's script [1] on kernel with CONFIG_DEBUG_TEST_DRIVER_REMOVE. Furthermore the protection provided by this commit is not needed anymore as the problem it was fixing got also fixed by commit 165a5e22fafb "block: Move bdi_unregister() to del_gendisk()". [1]: http://marc.info/?l=linux-block&m=148554717109098&w=2 Signed-off-by: Jan Kara <jack@suse.cz> Acked-by: Dan Williams <dan.j.williams@intel.com> Tested-by: Omar Sandoval <osandov@fb.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/genhd.c')
-rw-r--r--block/genhd.c21
1 files changed, 0 insertions, 21 deletions
diff --git a/block/genhd.c b/block/genhd.c
index 94f323842b52..a9c516a8b37d 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -572,20 +572,6 @@ exit:
572 disk_part_iter_exit(&piter); 572 disk_part_iter_exit(&piter);
573} 573}
574 574
575void put_disk_devt(struct disk_devt *disk_devt)
576{
577 if (disk_devt && atomic_dec_and_test(&disk_devt->count))
578 disk_devt->release(disk_devt);
579}
580EXPORT_SYMBOL(put_disk_devt);
581
582void get_disk_devt(struct disk_devt *disk_devt)
583{
584 if (disk_devt)
585 atomic_inc(&disk_devt->count);
586}
587EXPORT_SYMBOL(get_disk_devt);
588
589/** 575/**
590 * device_add_disk - add partitioning information to kernel list 576 * device_add_disk - add partitioning information to kernel list
591 * @parent: parent device for the disk 577 * @parent: parent device for the disk
@@ -626,13 +612,6 @@ void device_add_disk(struct device *parent, struct gendisk *disk)
626 612
627 disk_alloc_events(disk); 613 disk_alloc_events(disk);
628 614
629 /*
630 * Take a reference on the devt and assign it to queue since it
631 * must not be reallocated while the bdi is registered
632 */
633 disk->queue->disk_devt = disk->disk_devt;
634 get_disk_devt(disk->disk_devt);
635
636 /* Register BDI before referencing it from bdev */ 615 /* Register BDI before referencing it from bdev */
637 bdi = disk->queue->backing_dev_info; 616 bdi = disk->queue->backing_dev_info;
638 bdi_register_owner(bdi, disk_to_dev(disk)); 617 bdi_register_owner(bdi, disk_to_dev(disk));